Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Eleventh time's the charm

Eleventh time's the charm

Slides of my JCON Europe 2025 talk

Avatar for Dirk Weil

Dirk Weil

May 13, 2025
Tweet

More Decks by Dirk Weil

Other Decks in Programming

Transcript

  1. gedoplan.de Dirk Weil • Studied Informatik at RWTH Aachen •

    Living in Bielefeld • CEO of GEDOPLAN GmbH • JEE since 1999 • Speaker and author GEDOPLAN • Software development, consulting, training since 1979 • Bielefeld and Berlin • Jakarta EE, Spring Boot, Angular, Kubernetes, … 2 Eleventh time's the charm - from J2EE to Jakarta 11
  2. gedoplan.de 1999: J2EE • Umbrella specification • Individual specifications ~

    Open Source www.oracle.com/java/technologies/appmodel.html Community Driven 3 Eleventh time's the charm - from J2EE to Jakarta 11
  3. gedoplan.de 1999: J2EE • Enterprise JavaBeans ☺ Declarative component binding

    ☺ Scopes ☺ Declarative transactions control  (too) complex (up to EJB 2.1) www.itwissen.info/J2EE-Java-2-enterprise-edition-J2EE-Komponentenmodell.html 4 Eleventh time's the charm - from J2EE to Jakarta 11
  4. gedoplan.de 1999: J2EE • Demo Eleventh time's the charm -

    from J2EE to Jakarta 11 5 HelloService WorldService public class HelloServiceBean implements SessionBean { private WorldService worldService; public String getHello() { return "Hello, " + this.worldService.getWorld(); } public void ejbCreate() throws CreateException { try { InitialContext context = new InitialContext(); WorldServiceHome worldServiceHome = (WorldServiceHome) context.lookup("java:comp/env/WorldService"); this.worldService = worldServiceHome.create(); <ejb-jar … version="2.1"> <enterprise-beans> <session> <ejb-name>HelloService</ejb-name> <local-home>de.gedoplan.showcase.service.HelloServiceHome</local-home> <local>de.gedoplan.showcase.service.HelloService</local> <ejb-class>de.gedoplan.showcase.service.HelloServiceBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> <ejb-local-ref> <ejb-ref-name>WorldService</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <local-home>de.gedoplan.showcase.service.WorldServiceHome</local-home> <local>de.gedoplan.showcase.service.WorldService</local>
  5. gedoplan.de gedoplan.de 2006: Java EE 5 Eleventh time's the charm

    - from J2EE to Jakarta 11 6 @Stateless public class HelloService { @EJB WorldService worldService; public String getHello() { return "Hello, " + this.worldService.getWorld(); } Dependency Injection! Cool! Let’s do that too. And let’s use annotations instead of XML! Spring JEE • no home interfaces • no local interfaces (3.1+) • @EJB • make descriptors optional • move persistence into JPA
  6. gedoplan.de gedoplan.de 2010: Java EE 6 Eleventh time's the charm

    - from J2EE to Jakarta 11 7 JEE Ok, let‘s try a new name: CDI! @ApplicationScoped @Stateless public class HelloService { @Inject @EJB WorldService worldService; public String getHello() { return "Hello, " + this.worldService.getWorld(); }
  7. gedoplan.de 2010: Java EE 6 • Servlet: Annotation-based configuration •

    Faces: Annotation-based configuration, AJAX • Bean Validation: New standardized validation framework • RESTful services: Annotation-based configuration, CDI integration • Deployment: Everything fits into a WAR, making EAR obsolete • JPA: Criteria API, 2nd level cache, validation Eleventh time's the charm - from J2EE to Jakarta 11 8
  8. gedoplan.de Eleventh time's the charm - from J2EE to Jakarta

    11 9 2000 2020 J2EE 1.0 … 1.4 • forward-thinking ideas • standardized component models • too complex Java EE 5 • annotation-based configuration (@Stateless, @WebService, …) • EJBs are POJOs ORACLE Java EE 6 • EJB interfaces obsolete • CDI as „next level EJB“ • Bean Validation 2010 Java EE 8 • JSON-B • Entity EJBs → JPA • JSF: annotations, AJAX, composite components • JPA: Criteria API, cache, validation • Servlet: annotations • JAX-RS: annotations • WAR instead of EAR Java EE 7 • HTML 5 • JSON • Concurrency • Batch • JAX-RS: Client API, async processing • JMS: simplified API • CDI in EJB, JSF, JAX-RS • HTTP/2, server push • CDI events • embrace Java 8
  9. gedoplan.de 2016: MicroProfile • New impacts: Microservices, Docker/Kubernetes, cloud •

    JCP/Oracle: • • Eleventh time's the charm - from J2EE to Jakarta 11 10 Config Fault Tolerance Health JWT Authentication Metrics OpenAPI OpenTracing Rest Client CDI JAX-RS JSON-B JSON-P MicroProfile JEE 8
  10. gedoplan.de 2019: Jakarta EE 8 • 2017: • Oracle keeps

    naming and copyrights • Java EE Jakarta EE • JPA Jakarta Persistence • JAX-RS Jakarta RESTful Web Services • … • Jakarta EE 8 (September 2019) • no functional change • same code as Java EE 8 (despite of central dependency) • reference implementation → compatible implementations Eleventh time's the charm - from J2EE to Jakarta 11 11 JEE ORACLE
  11. gedoplan.de 2020: Jakarta EE 9 • Oracle keeps author‘s right

    for packages javax.* • may be used, but not modified • Jakarta EE 9 (November 2020) • no functional change • big bang renamings 12 Eleventh time's the charm - from J2EE to Jakarta 11
  12. gedoplan.de 2020: Jakarta EE 9 • Maven Coordinates javax:javaee-api:8.0.0 →

    jakarta.platform:jakarta.jakartaee-api:10.0.0 • Package Names javax.{annotation|ejb|enterprise|faces|inject|persistence|ws} → jakarta.… • Deployment Descriptor Schemas http://xmlns.jcp.org → https://jakarta.ee • Property Names (persistence.xml, web.xml, …) javax.… → jakarta.… • Faces Taglib Names xmlns:…="http://xmlns.jcp.org/jsf/{facelets|core|html|passthrough|composite}" → xmlns:…="jakarta.faces.…" Eleventh time's the charm - from J2EE to Jakarta 11 13
  13. gedoplan.de 2022: Jakarta EE 10 • CDI Alignment, including •

    @Context → @Inject • @Asynchronous, @Lock, @Schedule → Jakarta Concurrency • @Inject for FacesContext etc. • CDI Split-up CDI Core CDI SE CDI EE CDI Core CDI SE CDI EE CDI Lite → Build-time artifacts (Quarkus!) (EJB 1.0 had that, too!) 14 Eleventh time's the charm - from J2EE to Jakarta 11
  14. gedoplan.de 2025: Jakarta EE 11 • December 2024: Core Profile

    • March 2025: Web Profile • soon ☺: Full Profile (aka Platform) • Java 17 and 21 • embrace records • virtual thread support • various enhancements in Persistence and CDI • Jakarta Data Eleventh time's the charm - from J2EE to Jakarta 11 15
  15. gedoplan.de gedoplan.de Competition keeps things moving Eleventh time's the charm

    - from J2EE to Jakarta 11 16 2000 2025 Dependency Injection! Simplify EJB by DI! Replace XML by Annotations Replace XML by annotations. Let’s package the server into the application! Combine server and application in a bootable JAR Compose applications from starters Compose applications from extensions Native mode as option! Native mode
  16. gedoplan.de The charm • Standard: Jakarta EE • modern and

    mature platform • integrates current Java features • new standards for data, concurrency, security … • backward compatible (after package rename) • Servers: WildFly, Open Liberty, Payara, … • lightweight • single-JAR mode („bootable JAR“, …) • Micro frameworks: Quarkus, Helidon, … • small, quick, sexy ... • „Spring Boot“ based on Jakarta EE Eleventh time's the charm - from J2EE to Jakarta 11 17
  17. gedoplan.de More • github.com/GEDOPLAN/java-ee-demo github.com/GEDOPLAN/jee11-demo Projects • speakerdeck.com/dirkweil Slides •

    www.gedoplan.de Trainings in Berlin, Bielefeld, inhouse • www.gedoplan.de Reviews, Coaching, … Blog 18 Eleventh time's the charm - from J2EE to Jakarta 11 Email Icon-Bilder: Stock-Fotos -Videos. | Adobe Stock dirk.weil@gedoplan linkedin.com/in/dirk-weil-49940683