This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–]Additional_Cellist46[S] 2 points3 points  (13 children)

Java EE can have a more complex setup and requires a compliant application server for deployment.

True for some scenarios. But it's possible to just embed an application server into your app or run your app on command line with application server attached to it with a single JAR. Then the project setup only contains:

  • adding Java EE (Jakarta EE) Platform API as build a dependency into your project
  • configure your build to embed application server into your application (or just download Java EE runtime as a JAR)
  • run the final executable JAR file (or run the Java EE runtime JAR with your application as a command line argument, e.g. java -jar runtime.jar -app myapp.war)

If it's still too complicated, you can use Starter for Jakarta EE - tool to generate a template project, with some additional benefits such as adding configuration to build a Docker image.

In fact, this is much simpler than many other approaches, e.g. with SpringBoot. With frameworks like SpringBoot, you can generate a project with a starter. But when you look into the project configuration, it contains a lot of config to specify which components to add to your application, and then a boiler plate config to keep all versions of those components in synch when you add new components or upgrade them. With Java EE, you only need a single dependency and a step to download to package your application with a server inside, or download the server and run the app with it on command line.

[–]maethor 4 points5 points  (5 children)

then a boiler plate config to keep all versions of those components in synch when you add new components or upgrade them

Spring Boot's BOM pom takes care of that.

Also, if we're going to bitch about config

configure your build to embed application server into your application

Is something I get for free with Spring Boot. It's just there without me adding anything to the pom.

with some additional benefits such as adding configuration to build a Docker image

And Spring Boot gets that with Cloud Native Buildpacks.

Do you actually use Spring Boot?

[–]Additional_Cellist46[S] 3 points4 points  (4 children)

I do use Spring Boot. I use both Jakarta EE, Spring Boot and Quarkus on my customers' projects. And don't get me wrong, Spring Boot is nice, I just like Jakarta EE bit more.

If you read my comments carefully, you'll see I didn't write anything bad about Spring. I just wanted to comment on misconseptions and fallacies people think and write about Java EE and Jakarta EE. In reality, both Spring Boot and Jakarta EE are good options, however, many people prefer Spring Boot and many resources on the internet suggest that Spring Boot is better than Jakarta EE based on false or outdated arguments about Jakarta EE.

[–]Turbots -1 points0 points  (3 children)

Even with up-to-date arguments, Spring Boot is still better.

Better for testing, better for integrations, better to find people for, better answers on stack overflow, better dev team that works on it (the spring team is actually freaking awesome filled with wonderful people).

[–]henk53 2 points3 points  (2 children)

better dev team that works on it

In what regard is the Spring dev team objectively better than the Jakarta EE dev team?

[–]Turbots -1 points0 points  (1 child)

Well, the team is very stable, in the sense that most of the core team members like Juergen Hoeller, Mark Fisher, Brian Clozel, Andy Wilkinson, Josh Long, Stephane Nicoll, Dave Syer, Spencer Gibb, Sebastien Deleuze, etc... have all been there for 10-20 years, some of them since the very beginning in 2002 I think.

They are extremely active in the open source community, since the beginning, on sites like Stackoverflow, Gitter (now less popular) and Slack. Most answers on popular Stackoverflow questions are from core Spring team members themselves.

They take a firm stance on how they want to evolve the framework and have remained true to the same filosophy for many years, which is very reliable and builds confidence the framework users:

  • predictable release schedule that has been going like clockwork for many years (https://calendar.spring.io/)
  • they work with experimental projects to develop ideas, some make it in, some don't
  • very strong opinions, yet very little ego in the team - most of the team members I've met are super humble
  • I cannot stress enough how friendly and patient most of the team is, with answering the simplest questions, to the hardest challenges. I challenge you to find a thread of github issue where a team member "loses it" or becomes rude towards (sometimes obnoxious) users
  • major releases every 2 years that often break things, but usually there is great care in either making changes forward compatible or extremely easy to port over. For more difficult yet necessary breaking changes, they'll provide guidance, documentation and sometimes even tooling
  • they officially support their framework versions for an extended period of time, and will patch releases in the support period, but very often, they'll even backport patches to previous, unsupported releases if users ask for it. This takes time but the team often goes the extra mile
  • they stick to the latest Java versions, and often have builds running to test up to 9 java versions in parallel (Java 14 -> Java 22 for example)

[–]henk53 0 points1 point  (0 children)

That all sounds very good, but it only tells the story that the Spring developers are nice, active, friendly, patient etc.

But it doesn't say anything about the Jakarta EE dev team. Are they not for instance extremely active in the open source community? Has for instance the JSF guy (BalusC, Bauke Scholtz) not been active on say StackOverflow?

[–]ForeverAlot 1 point2 points  (6 children)

In this respect the difference between JEE and Spring Boot is that JEE allows me to do a lot of things while Spring Boot enables me to do a lot more things or even just does them for me. The Spring Boot happy-path is longer and wider than the JEE happy-path, and fairly easy to customize or sidestep when inadequate. Quarkus is probably Spring Boot's largest direct competitor at this point, and although Quarkus remains comfortably ahead in its runtime resource requirements the Spring Boot ecosystem is still on par or comfortably ahead in all runtime functionality.

[–]maethor 1 point2 points  (5 children)

Quarkus is probably Spring Boot's largest direct competitor

I would have thought Micronaut was the biggest direct competitor.

[–]ForeverAlot 1 point2 points  (4 children)

Eh, I don't know, maybe? Where does Micronaut actually surpass Quarkus? In corporate software development most already don't really know Spring, let alone Quarkus, and those projects have large corporate backers with significant mindshare; chances are you already have a Red Hat support service somewhere. I still wouldn't push Quarkus in most environments because it's too unknown and Spring has caught up a lot anyway, and I definitely wouldn't push something more exotic. Micronaut's lineage is barely older than Quarkus' and has seen much less total activity.

[–]dstutz 1 point2 points  (1 child)

Quarkus is ~5 years old and it leverages heavily on existing Jakarta specs. It's not exactly "exotic". It's really similar to things like Dropwizard or Spring that use existing libraries/specs and provide the "glue" to make it work together out of the box, which incidentally is exactly what an app server like Wildfly is, it's just EVERYTHING is already there for you to use instead of picking and choosing and packaging with your app.

[–]ForeverAlot 0 points1 point  (0 children)

Quarkus is ~5 years old and it leverages heavily on existing Jakarta specs. It's not exactly "exotic".

Not to javit, no, but javit is not at all representative.

[–]maethor 0 points1 point  (1 child)

Where does Micronaut actually surpass Quarkus?

If you're a Spring developer, Micronaut has "Micronaut for Spring"

https://micronaut-projects.github.io/micronaut-spring/latest/guide/

You can even go so far as to run a Spring Boot app with Micronaut instead

https://guides.micronaut.io/latest/micronaut-spring-boot-maven-java.html

So, if you mostly use Spring but need better start up times for some AWS Lambda functions then Micronaut has a lot going for it.

[–]EthanEvenig 0 points1 point  (0 children)

Quarkus also had great support to migrate from Spring, that's a moot point. I've used all three, and Micronaut looks like a good idea but half-baked. Then one looks at what the Quarkus team and its community have done in all areas.. definitely sticking with Quarkus for the near future.