Podcast thumbnail for Enterprise Java and Quarkus for Decision Makers

Enterprise Java and Quarkus for Decision Makers

Claim This Podcast

by Markus Eisele

14 episodes
Updated Daily
Accepts GuestsHas Sponsors
19

Podcast Authority

Beta
PoorBased on show quality, social media presence, reviews, charts, and more
Pod Engine
Quality38
Social0
YouTube0
Engagement0

Podcast Overview

Welcome to The Main Thread — your strategic companion for navigating the evolving world of enterprise Java, software architecture, and AI-infused systems. Curated by Markus Eisele, a veteran technologist with over two decades of industry experience, this publication connects the core ideas shaping our field today with the innovations that will define it tomorrow. Here, we go beyond frameworks. We explore the “why” behind your architectural choices, the “what if” of platform decisions, and the career implications of living at the intersection of Java, cloud, and intelligence. Because in a world of increasing complexity, the main thread isn’t just a technical construct — it’s a mindset. <br/><br/><a href="https://www.the-main-thread.com?utm_medium=podcast">www.the-main-thread.com</a>

Language

🇺🇲

Publishing Since

4/4/2025

Unlock The Full Podcast Authority Score Report

See how your podcast performs across key metrics

19

Podcast Authority

Beta
PoorBased on show quality, social media presence, reviews, charts, and more
Pod Engine
Quality38
Social0
YouTube0
Engagement0
6
Excellent Areas
2
Good Performance
11
Growth Opportunities
excellent
Episode Length
10 minutes
Performing excellently!
good
Publishing Consistency
Every 15 days

Recommendations available

Unlock the full report to see detailed tips

poor
Episode Thumbnails

Recommendations available

Unlock the full report to see detailed tips

+16 More Metrics

Unlock comprehensive insights including:

  • • YouTube presence analysis
  • • Social media reach metrics
  • • RSS compliance scoring
  • • Podcast 2.0 features
  • • Technical standards
What's Included in Your Full Report

Detailed Analytics

  • Complete breakdown of all 19 authority metrics
  • Personalized recommendations for each metric
  • Industry benchmarks and comparisons
  • Technical RSS feed analysis and compliance scoring

Growth Strategies

  • Step-by-step action plans for improvement
  • Quick wins to boost your score immediately
  • Pro tips from successful podcasters
Get your free podcast insights report

See how your show performs across every key metric

Instant delivery
No spam
Attract Better Guests

High authority scores make your podcast more attractive to industry leaders and influencers who want to appear on credible shows.

Secure Sponsorships

Sponsors look for podcasts with proven authority and engagement. Your score demonstrates your podcast's value to potential partners.

Grow Your Audience

Understanding your strengths and weaknesses helps you make data-driven decisions to expand your listener base effectively.

1 verified contact email on file for Enterprise Java and Quarkus for Decision Makers

Pitch yourself as a guest, propose sponsorships, or reach out directly to the host.

Recent Episodes

Episode thumbnail for How to Find Regression Risks in a Quarkus App Before You Write the Feature

June 28, 2026

How to Find Regression Risks in a Quarkus App Before You Write the Feature

<p>User unregistration sounds simple until you look at the rest of the system.</p><p>In a booking application, “delete this user” is never just one DELETE endpoint. It touches active bookings, foreign keys, historical reads, cache state, and the uncomfortable question every senior team eventually has to answer: is this really a hard delete, or is it deactivation, anonymization, or something in between?</p><p>That is why I like the workflow Alex Soto shows in the latest video. He does not start by asking IBM Bob to write the feature. He starts by asking it to map the regression impact before implementation. That is a much better use of an assistant.</p><p><strong>Use the Agent Before the Feature Code</strong></p><p>I still think the basic rule is simple: use AI to go faster on work you understand already. If you hand core business logic to a model and hope for the best, you are outsourcing the part you still need to own.</p><p>Impact analysis is different. Here the agent helps you read the shape of the system, collect likely break points, and build a regression plan before the feature branch gets noisy. In this case, “shift-left” just means you do the regression thinking before you touch the code that will trigger it.</p><p>That matters because deletion flows are where business rules stop looking like CRUD. One missing constraint check and you get orphaned rows, broken history screens, or a second-order production issue that only shows up after cleanup jobs or cache refreshes run. Efficient. Also bad.</p><p><strong>Why IBM Bob Fits This Job</strong></p><p>It’s not IBM Bob’s magic that makes this work: It is context.</p><p>Bob runs against the workspace, so it can inspect the actual resources, entities, and services in the application. That gives it a real basis for the regression plan. It is reading the model you are about to change, not guessing from a paragraph of pasted code.</p><p>That is the difference. A browser chat can still help, but a workspace-aware tool can follow relationships across the codebase. For something like user unregistration, that is where the interesting bugs live.</p><p><strong>The Prompt Is Small on Purpose</strong></p><p>Alex starts with a constrained prompt:</p><p>“Act as a tester. Identify the areas of the system that should be included in regression testing after changes are made to add the unregistration of a user. Don’t implement anything.”</p><p>Don't implement anything keeps the session focused on analysis. Once an assistant starts writing code too early, it tends to collapse design, impact analysis, and implementation into one optimistic blob. That is fine for demos. It is much less fine when a deletion rule can invalidate half your booking flow.</p><p><strong>What a Good Regression Plan Should Surface</strong></p><p>Because Bob can inspect the workspace, it can point at actual system boundaries that deserve tests before the first delete path is implemented. In this example, the report highlights the kind of things I would expect a senior developer to check immediately:</p><p>* <strong>Active booking rules.</strong> What happens if the user still has a live reservation, an open payment flow, or another stateful process attached to the account?</p><p>* <strong>Database integrity.</strong> Do deletes cascade, fail fast, orphan records, or silently leave history in a shape the rest of the system no longer understands?</p><p>* <strong>Historical read paths.</strong> Can past bookings, reports, and audit views still load after the user record changes or disappears?</p><p>* <strong>Cache and derived state.</strong> If user data is cached, indexed, or copied into another read model, what gets invalidated and when?</p><p>* <strong>API behavior.</strong> What does the endpoint return when the user has already been unregistered, cannot be removed, or does not exist anymore?</p><p>This is where the workflow earns its keep. The assistant is not replacing engineering judgment. It is helping you build the list you will review anyway, only faster and with fewer blind spots.</p><p><strong>The Senior Java Questions Start After the First Report</strong></p><p>A regression plan is a good start. It is still only a start.</p><p>If I were taking this feature forward, I would want the team to answer a few more questions before implementation:</p><p>* <strong>Is “unregister” really delete?</strong> In many systems the right answer is soft delete, anonymization, or status change because legal retention, reconciliation, or audit rules still apply.</p><p>* <strong>Where is the transaction boundary?</strong> If one part of the removal fails, what rolls back, and what can be left half-done?</p><p>* <strong>What is the concurrency story?</strong> If one request unregisters the user while another creates or confirms a booking, which invariant wins?</p><p>* <strong>What happens on the second call?</strong> Idempotence matters here. A repeated delete should not create fresh damage.</p><p>* <strong>Which tests belong at which level?</strong> Some checks belong close to the domain model. Others need @QuarkusTest, HTTP assertions, persistence wiring, or a packaged-app check with @QuarkusIntegrationTest.</p><p>That last point is worth calling out. A lot of teams mix regression planning with test implementation planning and then get a giant bag of tests with no clear boundary. I would rather make that mapping explicit up front.</p><p><strong>Turn the Report Into Proof</strong></p><p>The report is useful because it changes what we test first.</p><p>For a change like this, I would usually split the work into a few layers:</p><p>* business-rule tests around the unregister decision itself</p><p>* persistence tests for relationship handling and transaction rollback</p><p>* @QuarkusTest coverage for the HTTP and CDI wiring</p><p>* packaged-app checks with @QuarkusIntegrationTest when the deployment shape matters</p><p>After that, continuous feedback matters more than one big test run at the end. Quarkus continuous testing is a good fit here because the regression plan will usually touch multiple paths, and you want quick confirmation while the model is still moving.</p><p>Coverage still matters, but later. First make sure the dangerous branches are tested. Then measure what you actually covered.</p><p><strong>Further Reading</strong></p><p>* <a target="_blank" href="https://quarkus.io/guides/getting-started-testing">Quarkus: Testing Your Application</a> for @QuarkusTest, transactions in tests, mocks, and @QuarkusIntegrationTest.</p><p>* <a target="_blank" href="https://quarkus.io/guides/continuous-testing">Quarkus: Continuous Testing</a> if you want fast feedback while the unregister flow is still changing.</p><p>* <a target="_blank" href="https://docs.junit.org/current/user-guide/">JUnit User Guide</a> for the current programming model, extension model, and test organization options once the regression plan becomes a real suite.</p><p>* <a target="_blank" href="https://www.jacoco.org/jacoco/trunk/doc/counters.html">JaCoCo Coverage Counters</a> if you want branch, instruction, and complexity numbers to reflect the paths that actually matter.</p><p>* <a target="_blank" href="https://bob.ibm.com/">IBM Bob</a> if you want to try the workspace-aware analysis workflow Alex uses in the video.</p><p>If your unregister flow goes through JPA or Hibernate relationships, read the deletion and orphan-handling rules in the ORM documentation for the exact version you run. That is one of those areas where small mapping details decide whether cleanup is correct or catastrophic.</p><p><strong>Why I Like This Pattern</strong></p><p>I like this workflow because it uses the assistant where assistants are actually useful: reading a codebase, building a candidate regression map, and giving you a sharper review checklist before implementation starts.</p><p>You still need to decide the delete semantics. You still need to own the transaction model. You still need to write the tests that prove the feature is safe.</p><p>But you do not need to build the first regression checklist from memory every single time. Let the tool help there. Save your energy for the decisions that still need an engineer.</p><p></p> <br/><br/>This is a public episode. If you would like to discuss this with other subscribers or get access to bonus episodes, visit <a href="https://www.the-main-thread.com?utm_medium=podcast&#38;utm_campaign=CTA_1">www.the-main-thread.com</a>

Episode thumbnail for Improving Test Coverage in Quarkus with JaCoCo and IBM Bob

June 22, 2026

Improving Test Coverage in Quarkus with JaCoCo and IBM Bob

<p>In the latest video, my co-author Alex Soto shows a test coverage workflow I actually like. I do not care about 100% coverage as a badge. I care about whether the important parts of the system are tested. Past that point, the number gets expensive fast. In some domains you still need to hit a minimum threshold because regulation says so. Ok. That might be a real constraint.</p><p>Building out tests should follow a more simpler question: where are the gaps that matter, and what should we test first? Alex uses <a target="_blank" href="https://bob.ibm.com/">IBM Bob</a> with a <a target="_blank" href="https://quarkus.io/guides/tests-with-coverage">JaCoCo report from a Quarkus</a> backend to answer exactly that. It is a boring workflow in the best way. The report grounds the analysis, so you get a list of real testing gaps instead of a random AI guess list.</p><p><strong>Quarkus and JaCoCo Without Extra Setup</strong></p><p>Before Bob can analyze anything, you need a coverage report. Quarkus keeps this part simple. Add the quarkus-jacoco dependency to your pom.xml or build.gradle file, run mvn verify, and Quarkus writes the report to target/jacoco-reports. </p><p>The automatic setup from quarkus-jacoco only covers tests annotated with @QuarkusTest. If your suite also includes standard unit tests without that annotation, you need the regular JaCoCo Maven plugin for those. If you use both at the same time, configure them carefully or you will hit duplicate instrumentation errors. For many Quarkus projects, the extension alone is the simple option and usually the right one.</p><p><strong>Give the Agent the Real Report</strong></p><p>This workflow works because the agent has real context. If you ask a coding agent to improve test coverage with no grounding, it will guess. If you give it the JaCoCo XML report, it can see what is already covered, what is still untouched, and which areas deserve attention first.</p><p>Here is the exact prompt Alex used for the analysis.</p><p><strong>Prompt:</strong> Act as a tester explorer to find test cases to improve the test coverage based on the current JaCoCo test coverage report placed at src/test/resources/jacoco.xml file. Read the JaCoCo file, explore what code has already been tested, and what tests could be done to improve the coverage. It is not necessary to have 100% coverage, but increasing coverage for relevant cases is necessary.</p><p>It keeps the agent focused on relevant business logic instead of chasing 100% because the number looks nice in a report.</p><p><strong>Phases Beat a Giant Test Todo List</strong></p><p>Bob reads the XML and returns a structured view of the current instruction and branch coverage. More importantly, it points at the places that matter, such as core booking logic or user services sitting at zero percent coverage.</p><p>After that, Bob breaks the work into phases you can actually use. You get a plan, not a wall of possible tests.</p><p>* <strong>Phase 1:</strong> Critical Business Logic (High Priority)</p><p>* <strong>Phase 2:</strong> REST API Integration (High Priority)</p><p>* <strong>Phase 3:</strong> Entity Layer (Medium Priority)</p><p>* <strong>Phase 4:</strong> DTOs and Utilities (Low Priority)</p><p>It also estimates the coverage you can reach after each phase. That gives you a clear next step and a rough idea what the work buys you. Then you can move straight to a follow-up prompt:</p><p><strong>Follow-up Prompt:</strong> Implement the Phase 1!</p><p>At that point the coding assistant has a bounded job. It reads the code for that phase, understands which classes are involved, and generates the tests for that slice. That is way better than asking it to “improve coverage” and hoping it reads your mind.</p><p><strong>What Comes Next</strong></p><p>I like this example because it shows where AI fits well in normal engineering work. The model works from the actual report, with a clear goal, on code that already exists. That is a much better use of these tools than vibing test coverage.</p><p>Watch the full video to see the workflow in action. In the next video, Alex will look at test execution performance, because faster feedback matters almost as much as better coverage. You can download Bob and try this yourself at bob.ibm.com.</p><p></p> <br/><br/>This is a public episode. If you would like to discuss this with other subscribers or get access to bonus episodes, visit <a href="https://www.the-main-thread.com?utm_medium=podcast&#38;utm_campaign=CTA_1">www.the-main-thread.com</a>

Episode thumbnail for API Versioning in Quarkus: The Part AI Doesn’t Solve

April 3, 2026

API Versioning in Quarkus: The Part AI Doesn’t Solve

<p>Versioning a REST API is one of those architectural chores that everyone knows they need to do, but nobody actually wants to implement. As your data models evolve, you have to maintain backward compatibility for existing clients while serving new data structures to updated ones.</p><p>Historically, this meant writing a lot of boilerplate: duplicating entities, adding routing logic, and carefully wiring fallback behavior. The problem is not that this is hard. The problem is that it is easy to get wrong, and once it is wrong, you carry that decision for years.</p><p>If you want a deeper breakdown of the long-term consequences, the earlier article on <a target="_blank" href="https://www.the-main-thread.com/p/quarkus-api-versioning-strategies-java">Quarkus API Versioning Strategies</a> goes into detail on how these decisions age over time.</p><p>What changes now is not the problem. What changes is the effort required to implement it.</p><p>As my co-author <strong>Alex Soto</strong> (Developer Advocate at IBM) demonstrated in our latest video, generative AI changes the balance. With <strong>IBM Bob</strong>, you no longer spend time writing versioning plumbing. You spend time choosing the right strategy.</p><p>And that distinction matters.</p><p>A Simple Mental Model</p><p>There are only three real ways to version an API:</p><p>* Change the <strong>URL</strong></p><p>* Change the <strong>request metadata</strong></p><p>* Change the <strong>representation</strong></p><p>Everything else is just a variation of these three.</p><p>Bob can implement all of them in seconds. But Bob does not decide which one you should use.</p><p>What is IBM Bob?</p><p>Before diving into the strategies, it helps to understand the tool.</p><p><a target="_blank" href="https://ibm.com/bob">IBM Bob</a> is an AI coding assistant that understands your project context. It reads your existing Quarkus classes, generates new entities, updates JAX-RS endpoints, and even runs the application in dev mode to validate the result.</p><p>You are not asking for snippets. You are asking for changes to your system.</p><p>And this is where things get interesting. Bob will happily generate a second version of your API in seconds. If your strategy is wrong, you just created technical debt faster than ever.</p><p>1. Path Versioning (The Pragmatic Choice)</p><p>This is the most visible approach. The version is part of the URI:</p><p>/v1/customer /v2/customer</p><p>In the demo, Alex asked Bob to update the Customer endpoint by renaming the name field to firstname in version two. Bob created a new CustomerV2 entity, added a new @Path("/v2/customer") endpoint, and kept the original version intact.</p><p>This is simple. It is explicit. It is easy to cache and debug.</p><p>But it also duplicates your API surface. Every version is a new endpoint, and over time you end up maintaining multiple parallel APIs.</p><p>This approach works well when you want clarity and when external consumers depend on stable URLs. It becomes harder when you have many versions active at the same time and need to keep them consistent.</p><p>If you want a deeper comparison of how this scales, the article on <a target="_blank" href="https://www.the-main-thread.com/p/quarkus-api-versioning-strategies-java">Quarkus API Versioning Strategies</a> breaks this down in more detail.</p><p>2. Custom Headers (The Clean URI Approach)</p><p>Here the URI stays the same:</p><p>/booking</p><p>The version is passed through a header:</p><p>Accept-Version: 2</p><p>In the demo, Alex asked Bob to rename the customerName field to name in a Booking entity. Bob updated the resource to use @HeaderParam, routing requests to BookingV1 or BookingV2 depending on the header, and defaulting to version one if no header is present.</p><p>This keeps your URIs clean. Clients do not need to change endpoints. Versioning becomes part of the request metadata.</p><p>The problem shows up later.</p><p>After a few versions, you no longer know which clients send which headers. Removing old logic becomes guesswork. You carry old branches in your code because you are not sure who still depends on them.</p><p>This is where lifecycle management becomes critical. The article on <a target="_blank" href="https://www.the-main-thread.com/p/when-to-deprecate-apis-java-quarkus-guide">When to Deprecate APIs</a> explains how to handle that transition without breaking consumers.</p><p>3. Media Type / Content Negotiation (The REST Purist Way)</p><p>This approach uses the Accept header with vendor-specific media types:</p><p>application/vnd.acme.car.v1+json</p><p>In the demo, Alex asked Bob to rename the year field in a Car entity to date. Bob updated the @Consumes and @Produces annotations to route requests based on the media type, without changing the URI or adding custom headers.</p><p>This is the most flexible and the most aligned with REST principles. You keep a single resource and serve different representations.</p><p>But flexibility comes with complexity.</p><p>Media types are harder to debug. Clients need to construct correct headers. Tooling support is not always consistent. And once you introduce multiple representations, testing becomes more involved.</p><p>This approach makes sense in large systems where representation evolves independently from the resource. If you want to see how this works in a real integration scenario, the <a target="_blank" href="https://www.the-main-thread.com/p/quarkus-stripe-api-versioning-adapter-java-tutorial">Quarkus Stripe API Versioning Adapter Tutorial</a> shows how to adapt external APIs with similar patterns.</p><p>The Takeaway</p><p>The hardest part of API versioning used to be the implementation. With tools like IBM Bob, implementation takes seconds. The hard part is choosing the right strategy and managing its lifecycle over time.</p><p>Bob will implement whatever you ask for. It will do it correctly and consistently. But it will not fix a bad architectural decision.</p><p>Pick a strategy that fits your consumers, enforce it consistently, and understand what happens when you need to evolve it.</p><p>Want to try it on your own codebase? You can check out Bob at <a target="_blank" href="https://ibm.com/bob">ibm.com/bob</a>.</p> <br/><br/>This is a public episode. If you would like to discuss this with other subscribers or get access to bonus episodes, visit <a href="https://www.the-main-thread.com?utm_medium=podcast&#38;utm_campaign=CTA_1">www.the-main-thread.com</a>

14 total episodes available

Recent guests on Enterprise Java and Quarkus for Decision Makers

Guests from recent episodes — sign up to see every guest that has ever appeared on this show.

Martin Stefanko

Guest

Deep-dive analytics for Enterprise Java and Quarkus for Decision Makers

Frequently asked questions

Have a different question and can't find the answer you're looking for? Reach out to our support team by sending us an email and we'll get back to you as soon as we can.

What is Enterprise Java and Quarkus for Decision Makers?

Welcome to The Main Thread — your strategic companion for navigating the evolving world of enterprise Java, software architecture, and AI-infused systems. Curated by Markus Eisele, a veteran technologist with over two decades of industry experience, this publication connects the core ideas shaping our field today with the innovations that will define it tomorrow.

Here, we go beyond frameworks. We explore the “why” behind your architectural choices, the “what if” of platform decisions, and the career implications of living at the intersection of Java, cloud, and intelligence.

Because in a world of increasing complexity, the main thread isn’t just a technical construct — it’s a mindset. <br/><br/><a href="https://www.the-main-thread.com?utm_medium=podcast">www.the-main-thread.com</a>

How often does this podcast release new episodes?

This podcast updates daily.

Where can I listen to this podcast?

This podcast is available on 4 platforms including Apple Podcasts, Spotify, and more. You can also use the RSS feed directly.

Does this podcast accept guests?

Information about guest appearances is not available.

Legal Disclaimer

Pod Engine is not affiliated with, endorsed by, or officially connected with any of the podcasts displayed on this platform. We operate independently as a podcast discovery and analytics service.

All podcast artwork, thumbnails, and content displayed on this page are the property of their respective owners and are protected by applicable copyright laws. This includes, but is not limited to, podcast cover art, episode artwork, show descriptions, episode titles, transcripts, audio snippets, and any other content originating from the podcast creators or their licensors.

We display this content under fair use principles and/or implied license for the purpose of podcast discovery, information, and commentary. We make no claim of ownership over any podcast content, artwork, or related materials shown on this platform. All trademarks, service marks, and trade names are the property of their respective owners.

While we strive to ensure all content usage is properly authorized, if you are a rights holder and believe your content is being used inappropriately or without proper authorization, please contact us immediately at hey@podengine.ai for prompt review and appropriate action, which may include content removal or proper attribution.

By accessing and using this platform, you acknowledge and agree to respect all applicable copyright laws and intellectual property rights of content owners. Any unauthorized reproduction, distribution, or commercial use of the content displayed on this platform is strictly prohibited.