Part 23: Java 9 – The Java Platform Module System (JPMS) – Rethinking Application Structure

Introduction When Java 9 was released in September 2017, it was one of the most ambitious releases in Java's history. Unlike Java 8, which introduced functional programming features such as Lambdas and Streams, Java 9 focused on the Java platform itself. Its headline feature was the Java Platform Module System (JPMS), often referred to as Project Jigsaw. For more than…

Part 22: Java 8 Hidden Gems – Base64, Repeatable Annotations, StampedLock, LongAdder, Arrays.parallelSort() and More

Introduction When developers discuss Java 8, the conversation almost always revolves around: Lambda Expressions Stream API Optional CompletableFuture Date & Time API These features undoubtedly transformed Java. However, Java 8 also introduced numerous smaller APIs that solved long-standing enterprise problems. Although less publicized, these APIs appear frequently in: Spring Boot applications Security frameworks Distributed caches High-performance concurrent applications Reflection-based frameworks…

Part 21: CompletableFuture – Building Asynchronous and Non-Blocking Enterprise Applications

Introduction Modern enterprise applications rarely operate in isolation. A single user request often requires data from multiple systems. Consider an Order Management application. To display a customer's order summary, the application may need to contact several independent services. Order Service │ ┌─────────────┼─────────────┐ ▼ ▼ ▼ Customer API Payment API Inventory API │ │ │ └─────────────┼─────────────┘ ▼ Aggregate Response If these…

Part 20: Default and Static Methods in Interfaces – Evolving APIs Without Breaking Existing Code

Introduction Before Java 8, interfaces in Java were simple contracts. An interface could declare methods, but it could not provide implementations. For example: public interface Vehicle { void start(); void stop(); } Every class implementing this interface was required to provide implementations for both methods. This design worked well for many years. However, as Java evolved, it exposed one of…

Part 19: Optional – Eliminating NullPointerException the Right Way

Introduction If you ask Java developers which exception they have encountered most often in their careers, one answer almost always stands out: NullPointerException For decades, NullPointerException has been one of the most common causes of production failures in Java applications. Consider the following code: Customer customer = customerRepository.findById(id); String city = customer.getAddress() .getCity(); This code looks perfectly reasonable. But what…

Part 18: UUID Best Practices – Java, Oracle, Hibernate, Microservices & Performance

Introduction Every enterprise application needs a way to uniquely identify its data. For many years, relational databases relied on auto-generated numeric identifiers: 1 2 3 4 5 These identifiers work well for monolithic applications with a single database. However, modern enterprise architectures look very different. Today's systems are built using: Microservices Event-driven architectures Kafka Cloud-native deployments Multi-region databases Offline synchronization…

Part 17: Spring Boot, Hibernate, Jackson & REST – End-to-End Date & Time Handling in Enterprise Applications

Introduction So far in this series, we've learned: Why Java introduced the new Date & Time API. How every java.time class works. Which Java type should be used for different business scenarios. How Oracle datatypes map to Java entities. Now it's time to put everything together. A timestamp in an enterprise application doesn't exist in isolation. It travels through multiple…

Part 16: Oracle ↔ Java ↔ JPA/Hibernate Mapping Guide – Choosing the Right Data Type for Enterprise Applications

Introduction Every enterprise application stores dates and timestamps. Whether you're building a banking platform, payment gateway, insurance application, e-commerce website, healthcare system, or event management platform, almost every table contains fields like: Created Date Updated Date Transaction Time Settlement Date Business Date Expiry Date Appointment Time Event Timestamp Although Java 8 introduced an excellent Date & Time API, many developers…

Part 15: Enterprise Date & Time Best Practices – Java, Spring Boot, Oracle, JPA, REST APIs, and Microservices

Introduction In the previous article, we explored every major class in the Java 8 Date & Time API and learned the purpose of classes such as LocalDate, LocalTime, LocalDateTime, Instant, OffsetDateTime, and ZonedDateTime. Understanding the API is only the first step. The real challenge begins when designing enterprise applications. Consider these questions: Which Java type should be used in a…

Part 14: Understanding Every Java Date & Time Class – Choosing the Right Type for Every Situation

Introduction In the previous article, we explored why Java replaced the legacy Date and Calendar APIs with the modern Java Date & Time API (JSR-310). We learned about the shortcomings of the old APIs and the design principles that shaped the new java.time package—immutability, thread safety, clarity, and correctness. Now comes the most important question that every Java developer faces:…