In our new Java Monthly edition, we’d like to introduce you to Víctor Orozco. He was kind enough to share his experience on 9 more Java-related questions.
Víctor is a software consultant based in Guatemala city. For 12+ years he has been helping clients from telecom, banking and government sectors to implement time-critical systems in Java and Open Source technologies. He likes to contribute to the global Java community receiving some awards like Java Champion, Oracle ACE Pro and Duke’s Choice Award.
Dreamix: As an expert with Jakarta EE, you’re familiar with its competition with the Spring Framework. In which situations do you think Jakarta EE has an advantage over Spring Framework?
Víctor Orozco: We must start this discussion by defining what is Jakarta EE in the first place.
Jakarta EE describes itself as a platform to provide a specification set in the form of documentation and APIs. For practical matters these specs act as an opinionated way of doing enterprise development with Java, being adopted by diverse entities like Open Source communities or companies.
These entities could embrace the specs on different levels, for instance:
• Libraries -e.g. EclipseLink- that provide an implementation of a particular spec
• Frameworks -e.g. Spring, Micronaut- that pick some popular specs and implementations to provide a well known way of doing things for a particular aspect while having its own opinion (and implementation) on other aspects
• Frameworks and platforms -e.g. OpenLiberty, Apache Tomme, Payara- that fully embrace Jakarta EE by providing implementations compatible with Jakarta EE profiles (platform, web, core), which are nothing more than well-defined collections of these specifications to provide cohesive support for building enterprise, web, or microservice applications
Hence, for me the main advantage of Jakarta EE is the portability of your knowledge. Despide some rocky years in the development of Java EE, the specs allowed me crucial things as a consultant:
• To pick up existing codebases fast, despite not having a lot of experience on a particular application server
• Switch companies and jobs without re-training myself on a newer framework
• To build up my team knowledge by training them on Java/Jakarta EE and picking the best framework/platform for the need
Despite enjoying Jakarta EE, as a consultant, I also use Spring quite often and some fundamental specs like Jakarta Servlets or Jakarta Persistence are also present in Spring. So again, once you pick Jakarta EE your knowledge (and often also your code) is portable through the Java ecosystem.
Dreamix: Which are your favorite Jakarta EE technologies and why do you like them?
Víctor Orozco: If I have to pick I would like to highlight:
• Apache DeltaSpike: For real world development I resort a lot to it. It provides CDI extensions for cross-cutting concerns like testing or features backporting to older Java EE versions, my favorite feature here is probably JPA Repositories generation.
• Payara Application Server: It became a successful alternative for Glassfish when its development stagnated, contributing to keeping up to date with many Java/Jakarta EE specs and implementations. Nowadays Eclipse Glassfish is back, but Payara helped to maintain my workloads while this happened.
• Arquillian: One particular aspect that Jakarta EE lacks is a platform for testing, Arquillian provides many ways of doing real integration testing
• Quarkus: Technically is not compliant with any particular Jakarta EE profile. Still, many of the well-known specifications like JAX-RS, JPA, and CDI are present, providing a fast (if not the fastest) development loop for annotation-based Java frameworks
• Apache TomEE: For some specifications ASF is the only provider that avoids a monopoly, competition is good. Besides this, TomEE has good support for creating regular deployments and uber jars
Dreamix: Do you believe that Jakarta EE is the most secure of all the popular Java frameworks and if so which features in the framework makes it that secure?
Víctor Orozco: Despite having some specifications for security, the ability to be considered the most secure framework will be a combination of the security of the implementation, the libraries in the classpath, and of course my and your code. So I don’t think I could affirm or negate this.
Dreamix: Which resources can you recommend for learning the fundamentals of Jakarta EE if someone is a beginner and eager to learn it?
Víctor Orozco: Jakarta EE has some introductory tutorials for this purpose, specifically:
I also recommend the book Java EE 7 Essentials by Aurun Gupta, despite being released during the Java EE 7 era, this book was my daily driver while learning Java EE. It is written in a way that is easy to navigate for reference but at the same time has the enough level of detail to understand specification principles.
Dreamix: Currently there are many MicroProfile implementations and people are confused, which one to use in their project. What criterias do you use when choosing the appropriate implementation?
Víctor Orozco: In the same line as the first question, we have to set up some context to answer this.
MicroProfile was created to move forward Java EE to the distributed applications era when this task was really difficult. Hence it is also a project to create specifications (API+documentation) with a special focus on Microservices, for which you will find libraries -e.g. Small Rye- or providers -e.g. Helidon, Quarkus- that embrace the specifications.
With this in mind and in the same fashion as Jakarta EE, your knowledge is portable among implementations. Hence my decision often depends on the particular need of a given project. For example:
• If I could solve the project by using a monolith. I’ll be using probably Payara or TomEE, sometimes it’s simpler to focus on building a web application and be sure that if I need any microprofile feature, it will be available on the application server.
• Once I get into distributed solutions, it will be Helidon or Quarkus. These in particular have useful extensions for tracing and reactive messaging that facilitate the implementation of microservices patterns. And depending on the Kubernetes platform, these provide automatic integration for logs and metrics recollection. These also offer good support for GraalVM native image but to be sincere most of the time I remain over regular JVMs since these are light enough.
• Finally If I’m going with AWS serverless, I’ll go with Quarkus. In my experience, it provides a capable extension to generate CloudFormation templates and also provides good support for SAM development.
So, as any IT question, it depends. But you can be sure that your knowledge won’t be impacted too much by the “depends” :).
Dreamix: Do you find the new MicroProfile 6.0 different from the previous versions? Which features from it do you find useful?
Víctor Orozco: In practical terms the featured capability is the alignment with CNCF OpenTelemetry, integrating the instrumentation, generation, and export of telemetry data, so we could expect better integration with OpenTelemetry compliant platforms (like Kubernetes).
In the long term, MicroProfile decided to align itself with JakartaEE Core, so I root for better integration among the communities. It is interesting to follow up on the discussion on Jakarta EE and MicroProfile mailing lists.
Dreamix: Kubernetes and DockerSwarm have similar purposes, but when is Kubernetes a more appropriate choice for container orchestration?
Víctor Orozco: I see Swarm as an easy alternative to orchestrate container workloads, specially on teams that already have some containers running on Docker, it enables a way to scale horizontally without re-creating entirely their current infrastructure.
On the other hand orchestration is only a features of Kubernetes, Kubernetes provides some useful features thate are not available on Swarm, like periodic Jobs, network sidecars, autoscaling based on CPU, memory and custom metrics, plugins in the form of Kubernetes operators, and most importantly a neutral way to deploy to any major cloud provider.
Dreamix: How do you update yourself about the latest trends in Java?
Víctor Orozco: Twitter is probably my main source of news, especially random news that result in interesting findings, but I have some particular information sources that I always recommend
- inside.java, the direct source for the Java Virtual Machine news
- foojay.io, a good website for community news an tutorials
- Java community at Reddit, I’ve observed that nowadays people does not comment to often on blogs and websites, but Reddit is actually good at this, sometimes the technical discussions reach good levels
Dreamix: Can you recommend a favorite book about programming? What about a favorite book in general?
Víctor Orozco: I cannot remember all of my favorite books so I would like to share my top 5 five “not-so-well-known books”.
• Algorithms + Data Structures = Programs by Niklaus Wirth: This is an old book that actually helped me to understand data structures and programming in general, somehow it was common in Latin America and opened my mind to Pascal and programming. Probably is not the most popular book nowadays but it has useful information for coding interviews
• OCP Oracle Certified Professional Java SE 17 Developer Study Guide: Exam 1Z0-829 by Jeanne Boyarsky and Scott Selikoff: If you’re preparing for a Java certification this book is a must, it helped me to reach OCP. If you are not into certifications, you will learn a lot of Java fundamentals just by reading it.
• Practical Cloud-Native Java Development with MicroProfile by John Alcorn et al.: This book provides a holistic view of microservices with Java, Jakarta EE, and MicroProfile
• Classic Computer Science Problems in Java by David Kopec: This book is quite underrated. It has a lot of classic algorithms explained that could be a fun way of improving your Java skills, I discovered this book while teaching a classic AI lecture and I learnt a lot just by re-implementing the solutions.
• Reactive systems in Java by Clement Escoffier and Kend Finnigan: Once you leave the basic for creating microservices with Jakarta EE and MicroProfile, you will face yourself with the need for communication and orchestration patterns. This book has a good discussion of this in the context of Quarkus, but the knowledge is useful for Java in general
Is there anything else you would like to ask Víctor Orozco? What is your opinion on the questions asked? Who would you like to see featured next? Let’s give back to the Java community together!