Still think you need a heavyweight Java EE server for distributed transactions? That assumption is costing teams more than they realize. Because here is what usually happens in modern microservices: - Teams avoid XA because it feels “too heavy” - They switch to retries, idempotency, and Sagas - Complexity explodes - Reliability drops All to avoid… an app server. But what if that trade-off is outdated? With Atomikos, you get: - Distributed transactions like you always had, but without the overhead of the application server - Exactly-once updates across databases and messaging - No Java EE container - No retries or deduplication logic - Works natively with Spring Boot and microservices In other words: You don’t need to choose between simplicity and reliability anymore. Distributed transactions without Java EE aren’t just possible— they are often the simpler architecture. Curious how it works? We broke it down in this short slideshow
Guy Pardon, PhD’s Post
More Relevant Posts
-
Java 25 is out, and the "Infrastructure Gap" has widened significantly. I've realized that a "functional" app is only part of the equation. By 2026, a Senior Developer's true value will lie in Operational Efficiency. If you're still running Java as if it's 2018, you're missing out on potential savings. Here’s why the Spring Boot 4 + Java 25 stack is a game-changer for enterprise systems: - 70% Performance Gains (For Free): With JEP 519 (Compact Object Headers), Java 25 has reduced the memory overhead for objects by half. Benchmarks from Helidon and Spring Boot 4 show up to a 70% performance boost with no code changes. In a Kubernetes cluster, this translates to higher pod density and reduced AWS/Azure costs. - Virtual Threads are Finally "Mature": We've moved beyond the Project Loom hype. In 2026, Spring Boot 4 will make Virtual Threads the default. The reality is that one request equals one virtual thread. - We are now handling 7200 requests per minute on the same hardware that previously capped at 1800 requests per minute with standard platform threads. - Structured Concurrency: ThreadLocal is now considered legacy. Java 25’s Scoped Values and Structured Concurrency ensure that if one sub-task fails, everything is cleaned up, preventing leaks and "zombie" threads that can disrupt your on-call time. It's time to stop treating the JVM as a "black box." In 2026, the distinction between a "Junior" and a "Senior" developer will be knowing how to leverage AOT (Ahead-Of-Time) caching and Generational G1 GC to allow your microservices to scale to zero without incurring a "Cold Start" penalty. Are you still manually tuning thread pools, or have you fully transitioned #Java #SpringBoot4 #Java25 #Microservices #SoftwareArchitecture #CloudNative #SeniorDeveloper #SystemDesign #BackendEngineering #ProjectLoom #GraalVM #TechTrends2026
To view or add a comment, sign in
-
This week I continued working on the performance issue I previously described in a Java Spring service. Initially, I tried to address the OutOfMemoryError by writing large data to a temporary file and then reading it line by line before storing it in the cache. While this approach reduced peak memory usage, it introduced significant I l/O overhead and made the process much slower. After further analysis, I removed the temporary file solution. Instead, I kept the streaming approach and processed the data in smaller chunks in memory. These chunks are then incrementally written to the database. This provided a better balance between memory usage and overall performance. I also kept the asynchronous cache update. The response is now returned to the client without waiting for the cache write to complete, while the cache is updated in the background. This reduced response time and improved system responsiveness. This change highlighted the importance of balancing memory usage and throughput, instead of focusing only on memory optimization. #java #springboot #softwareengineering #backend #performance #caching #architecture #scalability #microservices #javadeveloper
To view or add a comment, sign in
-
Most Java devs know Tomcat caps at ~200 threads. What Project Loom did about it. The issue: every Java thread maps to an OS thread. ~1MB RAM each. Under heavy I/O, 90% of those threads are just blocked (waiting on a DB, an API, a file). Sitting idle. Burning memory. Request 201? It waits. Or drops. That's been Java's reality for 20 years. Not a bug. A design constraint. Project Loom flips the model: Virtual thread hits a blocking call -> unmounts from OS thread -> OS thread immediately picks up next task -> millions of concurrent tasks, same machine. You write the exact same blocking code. The JVM does the scheduling. What changes: 1. Not execution speed 2. How many requests your server handles before it says "wait" 3. No reactive rewrite (WebFlux, RxJava) 4. Lower cloud bill. Same codebase. One thing interviewers love to ask: "what's the catch?" Two real ones: 1. Synchronized blocks pin virtual threads. Can silently kill your scaling gains. Check JVM pinning logs. 2. ThreadLocal breaks at scale. Use ScopedValue. Same code. Way cheaper server. #Java #ProjectLoom #SystemDesign #Backend #JavaDeveloper
To view or add a comment, sign in
-
-
You have written thousands of Java objects. You have never actually seen one. Not the real thing — the bytes sitting on the heap, the hidden 12-byte header every object carries before a single field is stored, the padding the JVM adds without asking. Java 25 just made that header smaller for the first time in 13 years. I ran JOL (Java Object Layout) on the same Point(int x, int y) record on Java 21 and Java 25. Here is what came back: Java 21 → 24 bytes Java 25 → 16 bytes At 1 million objects that is 8 MB freed. At the allocation rates of a typical Spring Boot service, that is measurable GC pressure gone. The article walks through the actual JOL output byte by byte — the header tax, how it works, why it took 13 years to fix, and what it means if you are running services on AWS or Kubernetes. #Java #Java25 #JVM #SpringBoot #BackendDevelopment #SoftwareEngineering #Performance
To view or add a comment, sign in
-
File Uploads and Retrieval in Spring Boot Master file management in modern web applications by exploring File Uploads and Retrieval in Spring Boot. Handling binary data is a core requirement for enterprise systems, and this guide provides a deep dive into building a robust solution using REST controllers and the MultipartFile interface. Following a "core-to-shell" approach, you’ll learn to integrate foundational Java NIO operations with high-level Spring APIs to create a seamless bridge between raw disk storage and your frontend. Discover how to implement secure uploads and efficient file fetching while maintaining a clean, scalable microservices architecture. => Multipart Management: Efficiently process file streams with Spring Boot. => Java NIO Mastery: Use modern I/O for high-performance file handling. => RESTful Fetch: Implement endpoints for secure content retrieval. https://lnkd.in/gyQvP5QA #SpringBoot #spring #springframework #springbootdeveloper #Maven #Java #java #JAVAFullStack #RESTAPI #Microservices #BackendDev #JavaNIO #FileUpload #WebDevelopment #CodingTutorial #codechallenge #programming #CODE #Coding #code #programmingtips
To view or add a comment, sign in
-
“Java doesn’t have memory leaks.” This is one of the biggest myths in backend development. 👇 Yes, Java has Garbage Collection. But GC only removes objects that are 𝐮𝐧𝐫𝐞𝐚𝐜𝐡𝐚𝐛𝐥𝐞. If your code still holds references… 👉 That memory is never freed. Common real-world mistakes: -Static collections that keep growing -Unclosed DB connections / streams -Listeners or callbacks not removed -Unlimited caching What happens then? 📈 Heap keeps growing ⚠️ Frequent Full GC 💥 Eventually → OutOfMemoryError How to catch it? ✔ Take heap dumps ✔ Analyze using 𝐄𝐜𝐥𝐢𝐩𝐬𝐞 𝐌𝐀𝐓 / 𝐕𝐢𝐬𝐮𝐚𝐥𝐕𝐌 ✔ Check: who is holding the reference? How to fix it? ✔ Remove unused references ✔ Use 𝐖𝐞𝐚𝐤𝐇𝐚𝐬𝐡𝐌𝐚𝐩 where needed ✔ Use 𝐭𝐫𝐲-𝐰𝐢𝐭𝐡-𝐫𝐞𝐬𝐨𝐮𝐫𝐜𝐞𝐬 ✔ Add limits to caches 💡 Hard truth: Most memory leaks are not JVM problems. They are 𝐝𝐞𝐬𝐢𝐠𝐧 𝐩𝐫𝐨𝐛𝐥𝐞𝐦𝐬. Garbage Collection works perfectly… Until your code prevents it. #Java #MemoryLeaks #JVM #Debugging #BackendEngineering
To view or add a comment, sign in
-
Spring Boot isn't "Magic". It's just brilliant engineering that saves you 100 hours of boilerplate code. ⏱️ Before Spring Boot, setting up a Java backend meant dealing with endless XML configurations. Today, it’s the industry standard for microservices. Here is what makes it powerful: 🔹 **Auto-Configuration:** It intelligently guesses what you need. Added a MySQL dependency? Spring Boot automatically sets up the database connection pool. 🔹 **Inversion of Control (IoC) & Dependency Injection:** You don't create objects (new Keyword()); the Spring Container creates and manages them for you. This makes your code loosely coupled and highly testable. 🔹 **Embedded Servers:** Tomcat is built-in. You don't deploy your app to a server; your app *contains* the server. If you are serious about enterprise backend, mastering the Spring ecosystem is non-negotiable. #SpringBoot #JavaDeveloper #Microservices #BackendArchitecture #Coding
To view or add a comment, sign in
-
JVM Architecture - what actually runs your Java code ⚙️ While working with Java and Spring Boot, I realized something: We spend a lot of time writing code, but not enough time understanding what executes it. That’s where the JVM (Java Virtual Machine) comes in. A simple breakdown: • Class Loader Loads compiled `.class` files into memory. • Runtime Data Areas * Heap → stores objects (shared across threads) 🧠 * Stack → stores method calls and local variables (per thread) * Method Area → stores class metadata and constants * PC Register → tracks current instruction * Native Method Stack → handles native calls • Execution Engine * Interpreter - runs bytecode line by line * JIT Compiler - optimizes frequently used code into native machine code ⚡ • Garbage Collector Automatically removes unused objects from memory --- Why this matters: Understanding JVM helps in: * Debugging memory issues (like OutOfMemoryError) * Improving performance * Writing more efficient backend systems --- The more I learn, the more I see this pattern: Good developers write code. Better developers understand how it runs. #Java #JVM #BackendDevelopment #SpringBoot #SystemDesign
To view or add a comment, sign in
-
🚀 Java 25 — The Most Performance-Driven Java Release Ever If you care about speed, memory efficiency, GC smoothness, and startup time, this release is a powerhouse. Java 25 finally fixes many real-world pain points we’ve all lived with. 🔥 Memory Upgrades 1️⃣ Compact Object Headers 2️⃣ Optimized Object Layout for better CPU cache hits 3️⃣ Generational Shenandoah GC for ultra-low pause times 4️⃣ Goodbye 32-bit x86 — cleaner, faster, modern runtime ⚡ Performance Boosts 1️⃣ Ahead-of-Time Method Profiling 2️⃣ AOT Profile Cache for lightning-fast startup 3️⃣ CPU-Time Profiling in JFR 4️⃣ Cooperative Sampling for low-overhead profiling 5️⃣ Enhanced Method Timing & Call Tracing for deeper insights 💡 Why this matters Faster microservices Lower cloud costs Better latency More predictable performance Java 25 isn’t just an update — it’s a leap forward for cloud-native Java. ⬆️ Follow for more Java, Spring Boot, Microservices, System Design, and Interview insights. #Java25 #Java #Performance #Memory #SpringBoot #Microservices #CloudNative #Developers #JVM #TechUpdates
To view or add a comment, sign in
-
More from this author
Explore content categories
- Career
- Productivity
- Finance
- Soft Skills & Emotional Intelligence
- Project Management
- Education
- Technology
- Leadership
- Ecommerce
- User Experience
- Recruitment & HR
- Customer Experience
- Real Estate
- Marketing
- Sales
- Retail & Merchandising
- Science
- Supply Chain Management
- Future Of Work
- Consulting
- Writing
- Economics
- Artificial Intelligence
- Employee Experience
- Workplace Trends
- Fundraising
- Networking
- Corporate Social Responsibility
- Negotiation
- Communication
- Engineering
- Hospitality & Tourism
- Business Strategy
- Change Management
- Organizational Culture
- Design
- Innovation
- Event Planning
- Training & Development