The Main Thread

Markus Eisele

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. www.the-main-thread.com

Episodes

  1. From Standard to Smart

    MAR 9

    From Standard to Smart

    Today’s episode is a special one for me. I’m welcoming my friend and colleague Alex Soto to the show. If you follow the Quarkus ecosystem, you already know Alex. He has been shaping developer experience around Java and cloud-native for years. And today, he’s doing something very practical. He takes an existing Quarkus application. No greenfield. No clean slate. A real project. And he shows how to use IBM Bob to integrate LangChain4j step by step. This is important. Because most teams don’t start from zero. They have code. They have structure. They have production systems. The question is not “How do I build an AI app?” The question is: “How do I add AI to what I already have?” In this episode, Alex answers exactly that. There is a big difference between a CRUD application and an AI-ready application. At least, that’s what most developers think. You have your repository. You have your service layer. You expose everything through REST. It works. It scales. It follows clean architecture. End of story. But here’s the thing. Your users don’t think in endpoints. They don’t think in HTTP verbs. They think in sentences. In this episode, I show how we take a standard Quarkus booking application and turn it into a natural language assistant. We don’t rewrite it. We don’t redesign the architecture. We connect it to an LLM in a controlled way. And we use IBM Bob to guide the transformation. This article breaks down what actually happens under the hood. The Starting Point: A Classic Quarkus Service Our starting point is familiar. * A BookingRepository that talks to the database * A BookingService that implements business logic * A BookingResource exposing HTTP endpoints This is how most enterprise Java applications look. Clean separation. Clear boundaries. But there is friction. If a user wants to check a booking, they need to know: * The correct endpoint * The booking ID * The correct parameter format The system is precise. The user must be precise too. That works for APIs. It does not work for conversational interfaces. The goal is not to replace the existing architecture. The goal is to augment it. Step 1: Adding the AI Backbone The first real step is simple: we add LangChain4j to the project. Instead of manually browsing extensions and copying Maven coordinates, we told Bob: “Register dependency to use OpenAI.” Bob inspected the project and added: quarkus-langchain4j-openai This sounds trivial. It is not. Doing this step-by-step matters. When you instruct an AI assistant incrementally, it works with the real state of your project. It reduces hallucinations. It keeps changes scoped. It prevents massive diff explosions. This is how you should work with coding agents in production codebases. Small steps. Controlled context. Explicit instructions. Now the application is AI-capable. But not AI-integrated. Step 2: Defining the AI Service In Quarkus, an AI Service is your contract to the LLM. We asked Bob to create a BookingAssistant interface. What we got was more than a stub. Bob created: * System messages defining the assistant persona * Methods for chat interactions * Methods for cancellation explanations * Methods for confirmation generation The system message is critical. If you define: “You are a helpful booking assistant.” You shape the entire behavior of the model. Tone. Intent. Scope. Without this, the LLM behaves like a generic chatbot. With it, it behaves like a domain assistant. This is architecture, not decoration. You are defining boundaries for probabilistic behavior. Step 3: Giving the AI Real Power with Tools An LLM can generate text. It cannot read your database. That’s where Tools come in. Tools are simply Java methods exposed to the LLM with metadata. The model decides when to call them. We told Bob: “Expose the getBookingDetails method as a tool.” Bob did three important things. First, it annotated the existing method in BookingService with @Tool.Second, it generated a natural language description of what the method does.Third, it updated the assistant configuration so the LLM knows this capability exists. This is the real transformation. We did not duplicate business logic.We did not create parallel AI-only services.We reused existing domain code. Now when a user says: “Show me details for booking 123456” The model reasons about intent, decides that getBookingDetails is relevant, calls the tool, and incorporates the result into its answer. This is controlled augmentation. Your service remains the source of truth.The LLM becomes an orchestrator. Step 4: Closing the Loop with a Chat Endpoint Once the assistant exists and tools are registered, we need an entry point. Bob generated: * A new REST endpoint for chat interaction * A scaffolded application.properties with OpenAI configuration * Example configuration values (API key placeholder, model, temperature) One interesting detail. Bob scanned the existing test data and generated a cURL command using a real booking number found in the project. That means it understood the code context well enough to extract meaningful data. This is where AI-assisted development becomes practical. It does not just generate code. It connects dots inside your repository. What Actually Changed? Let’s be clear. We did not replace REST endpoints.We did not remove the service layer.We did not introduce magic. We added: * A LangChain4j extension * An AI Service interface * Tool annotations on existing business logic * A chat endpoint That’s it. The existing architecture stayed intact. This is important for enterprise systems. You cannot afford a rewrite just to add conversational access. You need incremental transformation. Architectural Insight: Standard and Smart Can Coexist There is a misconception that AI-first systems require a different architecture. In reality, the clean layering of a Quarkus application is ideal for AI augmentation. Your service layer already encapsulates domain logic.Your repository already isolates persistence.Your REST layer already defines boundaries. You just expose selected methods as tools and let the LLM orchestrate them. The intelligence does not replace structure. It sits on top of it. Why Use Bob for This? You could wire all this manually. But Bob helps with: * Discovering correct extensions * Generating consistent AI Service interfaces * Adding tool annotations correctly * Updating prompts and configuration * Generating example test calls The key benefit is not speed alone. It is correctness within context. Bob reads your project. It sees your packages. It understands your test data. It proposes changes that align with your codebase. That reduces the cognitive load when introducing AI features into legacy or existing systems. From CRUD to Conversational The gap between a standard application and an intelligent one is no longer architectural. It is connective. You already have the data.You already have the business logic.You already have clear domain boundaries. AI integration becomes a matter of: * Exposing logic as tools * Defining the assistant persona * Wiring a chat endpoint That’s the shift. You don’t build a new system. You make your existing system accessible through language. Final Thought Transforming a Quarkus application into an AI-ready assistant is not about hype. It is about controlled extension of your existing architecture. In the podcast episode, we walk through the full implementation live with IBM Bob. The takeaway is simple. You don’t need to throw away your Java services to make them smart.You just need to connect them the right way. This is a public episode. If you would like to discuss this with other subscribers or get access to bonus episodes, visit www.the-main-thread.com

    9 min
  2. FEB 4

    Most Java Persistence Bugs Are Boring. Quarkus 3.31 Fixes Them at Compile Time.

    When Alex talks about persistence, he usually does not start with syntax. He starts with consequences. In his recent deep dive on Jakarta Data in Quarkus 3.31.0, the real story is not a new annotation or another repository interface. The story is about moving database correctness from runtime to compile time. This matters because most persistence bugs are boring. They are not deadlocks or exotic transaction anomalies. They are simple things: renamed fields, broken query strings, invalid sort orders, and mismatches between entities and queries that only show up after deployment. Jakarta Data, as implemented in Quarkus 3.31.0, attacks exactly this class of problems. From Panache Convenience to Jakarta Data Discipline Quarkus developers already know Panache. It made Hibernate ORM approachable by reducing boilerplate and offering both Active Record and repository styles. But Panache was always a Quarkus-specific abstraction. Powerful, yes. Standardized, no. With Jakarta EE introducing Jakarta Data, Quarkus had a choice: bolt the spec on top of the existing engine, or rethink the internals. The result is Panache 2.0, a new engine that keeps the developer ergonomics but implements Jakarta Data as a first-class, specification-driven model. The shift is subtle but important. You are no longer just using a Quarkus feature. You are writing against a standard that other runtimes can implement, while still benefiting from Quarkus’ aggressive compile-time optimizations. The Real Enabler: Hibernate’s Annotation Processor The most important technical detail in Alex’s session is not a repository annotation. It is the Hibernate annotation processor. Traditional Panache queries often rely on strings: find("name", "Alex") This looks harmless until someone renames name to fullName. The code still compiles. Tests might still pass. Production fails later. With the annotation processor enabled, Hibernate generates a static meta-model at build time. For a User entity, you get a User_ class with strongly typed references to every mapped attribute. If the field disappears or changes type, your code stops compiling. This is not a convenience feature. This is a correctness guarantee. Once you enable the processor, every query that uses the meta-model becomes refactoring-safe by construction. Jakarta Data Repositories: Interfaces, Not Implementations Jakarta Data repositories look deceptively simple. You define an interface, annotate it with @Repository, and extend CrudRepository. That is it. There is no implementation class. There is nothing to generate manually. At build time, Quarkus creates the implementation and wires it as a CDI bean. The important part is what does not exist anymore: * No handwritten repository implementations * No duplicated CRUD logic * No string-based query glue code Instead, you describe intent. Find by this field. Insert this entity. Update that aggregate. Quarkus handles the rest. Because repositories are normal CDI beans, they fit cleanly into service layers, transactional boundaries, and testing setups you already use. Type Safety Where It Actually Hurts Type safety is an overused term. In this case, it is very concrete. Sorting is a good example. In older code, you often see something like: "ORDER BY name DESC" This is legal Java. It is also fragile. With Jakarta Data and the generated meta-model, sorting becomes: Order.desc(User_.name) If name no longer exists, the compiler fails. The same applies to pagination, nested property navigation, and derived queries that walk object graphs. You get IDE completion, refactoring support, and early failure. This is especially relevant for large teams, where entity models evolve continuously and not everyone remembers which query strings exist in which module. Transparency Instead of Magic One concern many architects have with repository abstractions is loss of visibility. Alex explicitly addresses this. By enabling SQL logging with quarkus.hibernate-orm.log.sql=true, you can see exactly what SQL Jakarta Data generates. The output is clean, predictable, and optimized. There is no hidden runtime interpretation layer. Everything is resolved at build time. This is a recurring Quarkus theme: push work to build time, fail early, and make runtime behavior boring. Why This Matters for Enterprise Codebases Jakarta Data in Quarkus 3.31.0 is not about writing less code. It is about writing code that is harder to break accidentally. For enterprise systems with long lifetimes, frequent refactoring, and many contributors, compile-time guarantees matter more than clever APIs. Moving query validation, sorting correctness, and repository wiring to build time reduces an entire class of production failures. Panache 2.0 is the quiet engine behind this shift. Jakarta Data is the standard that makes it portable. Quarkus is the runtime that makes it practical. Jakarta Data in Quarkus does not try to reinvent persistence. It tightens it. By combining a specification-driven repository model with aggressive compile-time validation, Quarkus turns persistence into something that behaves more like modern Java code and less like a stringly typed DSL hiding in annotations. If you care about refactorability, correctness, and long-term maintainability, this is one of the most important changes in the Quarkus 3.x line. This is a public episode. If you would like to discuss this with other subscribers or get access to bonus episodes, visit www.the-main-thread.com

    9 min
  3. What the 2025 U.S. AI Action Plan Means for Enterprise Java and ERP Systems

    07/30/2025

    What the 2025 U.S. AI Action Plan Means for Enterprise Java and ERP Systems

    The U.S. AI Action Plan, while aiming to accelerate AI innovation by reducing "red tape" and fostering private-sector growth, explicitly states it does not override critical existing regulations like HIPAA (for healthcare) and SOX (for financial reporting). Instead, it seeks to harmonize AI adoption with these legal obligations. The plan acknowledges that complex regulatory landscapes have slowed AI adoption in sensitive sectors like healthcare and finance. I have taken a deeper look at what this means for the industry and gave both the Action Plan and my interpretation to Googles NotebookLLM to create a nice overview. And here you go. Pretty spot on. Compare yourself and find my original interpretation on LinkedIn: What the 2025 U.S. AI Action Plan Means for Enterprise Java and ERP Systems Key takeaways from the plan's and my analysis: • No Override, But Harmonization: The plan emphasizes regulatory sandboxes and "AI Centers of Excellence" where new AI tools can be tested under supervisory frameworks, ensuring compliance with existing laws. NIST is tasked with developing national AI standards and evaluation guidelines that will incorporate HIPAA and SOX requirements for risk assessments, audit trails, and data protection. • Data Protection is Paramount: For HIPAA, the plan's focus on secure compute environments, privacy, and confidentiality for large datasets aligns directly with the need to protect Protected Health Information (PHI). AI applications must maintain the confidentiality, integrity, and availability of PHI. • Auditability for Financial Integrity: For SOX, internal controls and accurate financial reporting remain non-negotiable. AI tools used in financial reporting must provide audit trails, explainability, and error detection. • Embracing Open and Self-Hosted Models: Both HIPAA and SOX compliance are significantly supported by the plan's push for open-source and open-weight AI models. This is crucial because organizations handling sensitive PHI or financial data often cannot send this data to external, closed model vendors. Self-hosting models within a company's secure environment reinforces control over sensitive data. • Secure-by-Design and Incident Response: The plan promotes "secure-by-design" AI technologies to guard against threats like data poisoning and adversarial attacks. It also calls for AI-specific incident response plans, which are vital for SOX compliance to detect and report anomalies that could affect financial statements. • Integration with Existing Systems: For traditional ERP/Java back-ends, the plan signals a need to embed AI transparently into existing process workflows, ensuring robust audit logs to meet compliance requirements. Enterprise architects will need to adopt strong AI evaluation and governance frameworks and build secure infrastructure with robust data governance. This is a public episode. If you would like to discuss this with other subscribers or get access to bonus episodes, visit www.the-main-thread.com

    5 min
  4. Langchain4j, GraphQL, WebSocket Next and Buildpacks

    05/27/2025

    Langchain4j, GraphQL, WebSocket Next and Buildpacks

    A little later than usual, but here it is. The weekly recap. Postponed due to RH Summit. NOTE: This is an AI generated Podcast with Google NotebookLM * Local AI with LangChain4j and Quarkus: Build an Email Task Extractor with Tool Calling - Published on May 13, 2025. This post introduces building a local-first AI application using Quarkus, LangChain4j, and local Large Language Models (LLMs) via Ollama. It demonstrates creating a simulation service that generates emails using one LLM and extracts tasks using another with LangChain4j's tool calling feature. * Supercharge Your Java APIs with GraphQL and Quarkus - Published on May 14, 2025. This guide explains how to leverage GraphQL with Quarkus to build efficient APIs. It covers defining GraphQL schemas, implementing queries and mutations, and the benefits of GraphQL like solving over-fetching and under-fetching issues. Quarkus' smallrye-graphql extension is used for integration. * Intercept This! Hands-On with HTTP Filters in Quarkus - Published on May 15, 2025. This tutorial focuses on using standard JAX-RS filters in Quarkus to intercept HTTP requests and responses. It shows how to implement global filters for logging or adding headers, and conditional filters using Name Binding for specific endpoints, useful for cross-cutting concerns like auditing or access control. * No More Polling: Build Real-Time Java Apps with Quarkus WebSocket Next - Published on May 16, 2025. This post demonstrates building real-time applications with Quarkus WebSocket Next, highlighting how to push live data updates from the server to clients without inefficient polling. An example of a live JVM heap monitor is used to showcase broadcasting messages to multiple connected clients using scheduled tasks. The post notes that WebSocket Next is a new, more efficient API compared to the original quarkus-websockets extension. * Debug Smarter, Not Slower: Master Runtime Logging in Quarkus - Published on May 17, 2025. This guide introduces the Quarkus Logging Manager, a tool that allows developers to dynamically adjust logging configurations, such as log levels for specific loggers or categories, at runtime. This capability helps in troubleshooting performance issues or other problems in production without requiring application restarts or redeployments. * Mastering Database Migrations in Java: A Hands-On Guide with Quarkus and Flyway - Published on May 18, 2025. This tutorial covers managing database schema evolution using Flyway integrated with Quarkus Dev Services. It explains the importance of versioned database changes and how Flyway automates applying SQL migration files in order, ensuring consistency and predictability. * Containerize This! A Hands-On Guide to Quarkus with Buildpacks - Published on May 19, 2025. This post details containerizing Quarkus applications using Cloud Native Buildpacks, eliminating the need for Dockerfiles and manual base image management. It highlights Quarkus' first-class integration with Buildpacks via the container-image-buildpack extension, resulting in faster, more optimized, and portable container images triggered directly from the Maven build. This is a public episode. If you would like to discuss this with other subscribers or get access to bonus episodes, visit www.the-main-thread.com

    11 min
  5. 05/12/2025

    From CDI Sorcery to Container Sanity: A Java Week in Review

    NOTE: This is an AI generated podcast exported from Google’s NotebookLM. I am still experimenting with this and am very excited to read about your feedback! In this packed fourth episode of Enterprise Java and Quarkus for Decision Makers, we navigate the rich terrain of modern Java development with Quarkus. From advanced CDI tricks like reactive dependency injection and custom scopes, to security-focused input validation and dynamic CSV ingestion magic — we’ve got your back. Ever wondered how to peek under the hood of your running Quarkus app? We break down Jolokia and Hawtio for real-time monitoring. If you’re curious about text embeddings and Java’s take on semantics, we explore cosine similarities and Ollama-powered AI. And because no week is complete without a head-scratching container issue, we explain why your resource files go missing — and how to make peace with the ClassLoader. We wrap it up with a testing showdown: @QuarkusTest vs. @QuarkusIntegrationTest — which one should you really use, and when? Tune in for practical insights, entertaining war stories, and a dose of Java sanity to power your week. Advanced CDI in Quarkus: Native Images, Reactive DI, and Custom Scopes (May 05, 2025) https://myfear.substack.com/p/advanced-cdi-quarkus-native-reactive-scopes Covers advanced CDI topics like custom scopes with Build Compatible Extensions, lifecycle observation with @Startup and @Shutdown, CDI in native images, and reactive programming integration Secure Your Java Apps: Input Validation with Quarkus Made Easy (May 06, 2025) https://myfear.substack.com/p/quarkus-input-validation-owasp-java Focuses on OWASP-compliant input validation using Jakarta Bean Validation (@Pattern, @NotBlank, etc.), server-side validation logic in JAX-RS resources, and displaying errors with Qute templates, including localization Dynamic CSV Uploads in Java: Building Smart, Flexible Databases with Quarkus (May 07, 2025) https://myfear.substack.com/p/dynamic-csv-uploads-java-quarkus-postgresql Details building a flexible system to dynamically ingest any CSV file into PostgreSQL by creating tables on the fly based on header and type inference, using Hibernate Panache and Jackson CSV What’s Really Going On in Your Quarkus App? A Java Developer’s Guide to Jolokia and Hawtio (May 08, 2025) https://myfear.substack.com/p/whats-really-going-on-in-your-quarkus Explains using Jolokia (JMX-HTTP bridge) and Hawtio (web console) for live introspection and monitoring of Quarkus application internals (MBeans, threads, memory), and integrating Micrometer for metrics, with emphasis on production security From Strings to Semantics: Comparing Text with Java, Quarkus, and Embeddings (May 09, 2025) https://myfear.substack.com/p/java-quarkus-text-embeddings-similarity Describes building a service for semantic text similarity using text embeddings generated via LangChain4j and Ollama, comparing them with cosine similarity and Euclidean distance, and visualizing results Stop Getting FileNotFound in Containers: How Java Developers Can Load Resources Correctly with Quarkus (May 10, 2025) https://myfear.substack.com/p/classpath-resource-access-quarkus-java-containers Addresses accessing static resource files in containerized Quarkus apps, recommending the Java ClassLoader (getResourceAsStream) over file paths for reliability across JVM and native modes, and discussing alternatives for dynamic files Mastering Quarkus Testing: When to Use @QuarkusTest vs. @QuarkusIntegrationTest (May 11, 2025) https://myfear.substack.com/p/quarkus-testing-quarkustest-vs-quarkusintegrationtest Compares @QuarkusTest (in-JVM, classloader isolation, fast component testing) and @QuarkusIntegrationTest (out-of-process, black-box, production-like testing for final artifacts), advocating for a combined strategy Thanks for reading Enterprise Java and Quarkus! Subscribe for free to receive new posts directly in your inbox. This is a public episode. If you would like to discuss this with other subscribers or get access to bonus episodes, visit www.the-main-thread.com

    18 min
  6. Future-Proofing Enterprise Java: Security, Skills, and Smarter Deployments

    05/04/2025

    Future-Proofing Enterprise Java: Security, Skills, and Smarter Deployments

    Please remember: This is generated with NotebookLM from Google based on last weeks articles. Still an experiment. Feel free to give me feedback how useful this is for you and if you like it or not! This week's topics cover various aspects of modern enterprise Java development. The articles discuss practical steps for building and deploying cloud-native Java applications, particularly using Quarkus. Key areas include leveraging frameworks like Quarkus for efficient development, mastering dependency injection with CDI, and configuring applications for performance and minimal resource usage. We also looked into crucial operational and security considerations. This includes understanding and implementing TLS/SSL for secure communication, generating Software Bill of Materials (SBOMs) for dependency tracking and vulnerability management, and effectively deploying applications to platforms like OpenShift. Runtime management is explored through Galleon layers in JBoss EAP 8.1 Beta for creating trimmed, efficient server distributions and Bootable JARs. Furthermore, we discussed the evolving landscape for Java developers, outlining essential skills for 2025 and beyond, covering areas like cloud-native development, AI/ML integration, data fluency, platform engineering, and soft skills. A critical discussion point is the impact of Oracle's Java LTS licensing changes and presenting Red Hat OpenJDK as a supported alternative for enterprises seeking stability and predictable costs. Direct links to CW18 articles for your recap: * https://myfear.substack.com/p/tls-ssl-java-quarkus-guide * https://myfear.substack.com/p/future-proof-java-skills-2025 * https://myfear.substack.com/p/quarkus-sbom-cyclonedx-dependency-track-snyk * https://myfear.substack.com/p/java-lts-strategy-oracle-vs-redhat-cost-support * https://myfear.substack.com/p/galleon-layers-jboss-eap-8-1-beta-bootable-jar-guide * https://myfear.substack.com/p/quarkus-dependency-injection-cdi-basics * https://myfear.substack.com/p/quarkus-rest-api-openshift-postgresql-guide This is a public episode. If you would like to discuss this with other subscribers or get access to bonus episodes, visit www.the-main-thread.com

    18 min
  7. Enterprise Java and Quarkus for Decision Makers - Week in Review

    04/27/2025

    Enterprise Java and Quarkus for Decision Makers - Week in Review

    Please remember: This is generated with NotebookLM from Google based on last weeks articles. Still an experiment. Feel free to give me feedback how useful this is for you and if you like it or not! In this week's episode, we explore key insights from the latest blog posts shaping the future of enterprise Java development with Quarkus. We start by addressing the top questions junior developers have when adopting Quarkus and what that means for onboarding strategies. We highlight the new Quarkus 3.21.3 maintenance release, focusing on stability, developer productivity, and native image improvements. We dive into why standards matter more than ever today, helping organizations avoid vendor lock-in while ensuring interoperability. Next, we cover how to implement database-backed authentication with Jakarta Persistence to strengthen application security. We also unpack Quarkus’s build-time-first philosophy and how it achieves lightning-fast performance and low memory usage, critical for modern cloud deployments. Finally, we reflect on how Quarkus is reshaping Java developer mindsets compared to traditional frameworks like Spring.Each topic delivers practical takeaways for IT decision-makers looking to optimize developer experience, security, scalability, and cloud-native readiness. Last weeks episodes as direct links: This is a public episode. If you would like to discuss this with other subscribers or get access to bonus episodes, visit www.the-main-thread.com

    16 min
  8. Hot topics CW 15

    04/21/2025

    Hot topics CW 15

    This is a weekly recap of the articles published fed into NotebookLM and converted to a podcast episode of my two wonderful hosts discussing the high level implications of the individual pieces. I consider this an experiment. LMK what you think and if this is helpful or at least entertaining. Last week's articles centered around building various aspects of enterprise Java applications using the Quarkus framework. Here's a brief recap: * One key topic was setting up robust and reliable email notification systems with Quarkus. This included using the Quarkus Mailer extension, configuring SMTP, creating email templates with Qute, implementing a queuing mechanism using reactive messaging, and integrating with PostgreSQL to manage recipients. * Another significant area covered was contributing to the open-source Quarkus project. This article detailed the prerequisites, how to find suitable tasks, the different types of contributions (documentation, bug fixes, new extensions, core enhancements), and the standard contribution workflow using Git and GitHub. * The integration of NoSQL databases with Quarkus using Jakarta NoSQL was also explored. This covered the standardization Jakarta NoSQL brings to the NoSQL ecosystem with its Communication and Mapping APIs, and provided a practical example using MongoDB. * Furthermore, the articles delved into integrating Artificial Intelligence (AI) into Java applications using Quarkus and LangChain4j. This included choosing Quarkus as a foundation, leveraging LangChain4j for LLM interactions, building AI services, considering system design, using local models for development, and understanding the Model Context Protocol (MCP). * Implementing audit trails in Quarkus applications using Hibernate Envers was another crucial topic. This involved understanding the importance of audit trails, setting up Hibernate Envers, capturing user identity, understanding the audit table structure, choosing the right audit strategy, querying audit data, and considering performance and compliance. * The week also covered securely streaming files with Quarkus, addressing different storage options (database, object storage), streaming techniques, handling large files and backpressure, using pre-signed URLs, and various security considerations for file delivery. * Finally, a more informal article highlighted ten signs that one might be deeply engaged with Quarkus, playfully noting the positive impact the framework can have on developer productivity and even habits. This is a public episode. If you would like to discuss this with other subscribers or get access to bonus episodes, visit www.the-main-thread.com

    14 min

About

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. www.the-main-thread.com