One of the most important things to do at this stage of the life-cycle of Java EE is highlight successful adoption stories at a regular cadence. The community has been doing just that for a long time including at JavaOne. A number of these stories are curated at Zeef. Pavel Pscheidl recently agreed to share a few such adoption stories about Java EE applications he has worked on over a few years. Pavel had a number of insightful things to say about Java EE worth paying attention to. I have highlighted specific passages that really stand out.
Can you kindly introduce yourself?
My name is Pavel Pscheidl, and of course I’m a Java EE developer. Besides that, I’m a fresh Ph.D. student at the Faculty of Informatics, University of Hradec Králové, Czech Republic. I spend most of my time with Java/Java EE and it’s ecosystem. However, I am also a big fan of Mozilla’s Rust language, using it practically already, mainly on projects related to research, like agent-based simulations.
Can you describe the application or applications that use Java EE? What does your company do?
There are many applications based on Java EE that I’ve worked on. It all started a few years ago by exploring new possibilities. I obtained a contract for building a very special e-commerce application. Back then I discovered the beauty of Java EE 6, mostly CDI and JSF. The project was a major success – everything went well, no technological difficulties or obstacles.
Fast forward to 2016. Currently, I work for a company called Zentity, based in Prague. Zentity specializes in delivering mobile application solutions. Our customers are mainly big banks and telco companies not only in Europe, but all around the world. Building mobile applications for banks is not simple. Most of the interesting work is actually done in back-end systems, providing the necessary security layer, orchestration and overall integration to customer’s current systems. And that is where Java EE shines.
A place for the really fancy stuff with Java EE is in the university. There are multiple projects that can be split into two categories. The major part of our research that relies on Java EE are Internet of Things projects. We build both practical projects and theoretical prototypes. Our IoT-enabled Home Automation System is a perfect example.
We also run Java EE (micro)services for research computations. There is more. For example, one of the projects I’m also partially involved in is building an implementation of SMART adaptive calculator for service costs. Overall, Java EE in it’s seventh version provides us solid background for both commercial and research projects.
Why did you choose Java EE?
The short answer is simple and obvious – it best serves my needs. Java itself is a rich ecosystem and an advantage on it’s own. I can’t image Java to go away one day. Anyway, the word “Enterprise” may have lots of different meanings. Telecommunications, Banking, Healthcare – each domain is different. And Java EE covers them all.
I used to work with different technologies per each project, Ruby here, Python there…Java EE covers it all. It is the strange mix of being complex enough to handle every situation, yet being designed so well everything is easy to understand. Solutions in Java EE are in practice cleanest I’ve ever seen so far. There is no extensive configuration madness, straightforward and reasonable guidelines for everything. This is especially important in larger teams.
If I had to name one part of Java EE that makes me absolutely love it, then I would say CDI and related specifications. CDI is beautifully designed and allows me to build applications with strong focus on the problem domain, not on configuration and wiring everything together. It’s extension capabilities are awesome. That really is impossible to find anywhere else. And I learned to write reusable extensions doing work for developers a lot. It is common for my projects to automatically add new functionality via a combination of extensions and interceptors. These are the main practical reasons I use Java EE and absolutely love it. It just works for me.
It also has a great community and enough literature of great quality. I recommend Beginning Java EE 7 by Antonio Goncalves to everyone, especially students/juniors. This book itself brought us many newcomer Java EE developers.
How does the application or applications use Java EE?
The usage is mostly very complex. Especially at Zentity, I’ve used many of Java EE’s parts in one project. Of course, there is dependency injection in every project. There is JAX-RS, JPA, EJB, asynchronous invocations and schedulers. I also use JSF on many projects. However lately, we’ve replaced the JSF approach with Single-Page-Applications developed with JAX-RS.
The target application server is mostly WildFly and/or Payara. Both are very capable, but for bigger projects with possible demand for support I’m going for Payara. However, WildFly’s ability to server as a load balancer is outstanding, as well as other capabilities like session fail-over. Switching among application servers is easy and picking one is mostly a matter of target environment.
For Internet of Things projects, REST-based microservices are often built with “fat” business logic hidden inside. JAX-RS is great here and the implementation doesn’t matter. And it’s fast too. WildFly’s standalone regime without full profile is often used for microservices – Undertow is great performance-wise. We also use enunciate to automatically generate API documentations whenever possible.
In the future, I’d like to deeply evaluate possibilities of delivering Java EE applications as a “click & run” package. Possibly by dockerizing them, or using WildFly Swarm/Payara Micro. It would solve the only pain I feel when dealing with applications written in Java – JVM gets old and big institutions like banks update slowly. There are many institutions, especially banks operating on deprecated JDK 1.6 with no will to perform an easy update. Delivering applications with both the application server and JDK packed is not an ideal solution in terms of package size.
How was your general experience with Java EE? Would you use it again?My overall experience was very good. I learned a lot from Java EE in terms of design patterns. I will definitely use pure Java EE again in the future. There are many “enterprise” projects waiting for me where Java EE perfectly fits.
Big projects are quite easy with Java EE, yet it is awesome even for small projects with limited functionality and logic. I would like to point out the clean design of Java EE applications. There is no JAR hell, no configuration hell, the projects remain oriented on the target domain. Everything just works and is intuitive. There is also a strong community of enthusiasts who help us all more than they even realize by writing great articles, books, recording educational videos and organizing community events. No one named, no one forgotten. But overall, I find the Java EE ecosystem great.
If you have a similarly great Java EE adoption story to share with the community (particularly migration stories from other technologies), please do reach out.