In the last post we had our first taste of Jakarta EE 9 with the preview version of WildFly 22: How to run Jakarta EE 9 on WildFly
Let’s see now how to build and deploy sample application which uses the ‘jakarta‘ package namespace.
The jakarta.jakartaee-api version 9 is now available on the official Maven repository: https://search.maven.org/search?q=g:jakarta.platform
This means that you can now build your applications using ‘jakarta‘ packages as follows:
<dependency> <groupId>jakarta.platform</groupId> <artifactId>jakarta.jakartaee-api</artifactId> <version>9.0.0</version> <scope>provided</scope> </dependency>
If you just need the Web Profile capabilities, then you can use instead:
<dependency> <groupId>jakarta.platform</groupId> <artifactId>jakarta.jakartaee-web-api</artifactId> <version>9.0.0</version> <scope>provided</scope> </dependency>
Let’s rewrite a WildFly quickstart to use the new packaging. Here’s an Hello World Servlet:
import java.io.IOException; import java.io.PrintWriter; import jakarta.inject.Inject; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @WebServlet("/HelloWorld") public class HelloWorldServlet extends HttpServlet { static String PAGE_HEADER = "<html><head><title>helloworld</title></head><body>"; static String PAGE_FOOTER = "</body></html>"; @Inject HelloService ejb; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException,ServletException { resp.setContentType("text/html"); PrintWriter writer = resp.getWriter(); writer.println(PAGE_HEADER); try { writer.println(ejb.createHelloMessage("Jakarta EE 9!")); } catch (Exception e) { e.printStackTrace(); } writer.println(PAGE_FOOTER); writer.close(); } }
And here’s the HelloService ejb:
import jakarta.ejb.Stateless; @Stateless public class HelloService { public String createHelloMessage(String name) throws Exception { return "Hello "+name; } }
Now grab WildFly 22 from https://www.wildfly.org/downloads/ and start it:
$ ./standalone.sh
Build and deploy the application on it:
$ mvn install wildfly:deploy
You will see from the logs that the application deployed on WildFly:
11:46:23,735 INFO [org.jboss.as.server.deployment] (MSC service thread 1-6) WFLYSRV0027: Starting deployment of "helloworld.war" (runtime-name: "helloworld.war") 11:46:23,798 INFO [org.jboss.weld.deployer] (MSC service thread 1-8) WFLYWELD0003: Processing weld deployment helloworld.war 11:46:23,820 INFO [org.jboss.as.ejb3.deployment] (MSC service thread 1-8) WFLYEJB0473: JNDI bindings for session bean named 'HelloService' in deployment unit 'deployment "helloworld.war"' are as follows: java:global/helloworld/HelloService!org.jboss.as.quickstarts.helloworld.HelloService java:app/helloworld/HelloService!org.jboss.as.quickstarts.helloworld.HelloService java:module/HelloService!org.jboss.as.quickstarts.helloworld.HelloService java:global/helloworld/HelloService java:app/helloworld/HelloService java:module/HelloService 11:46:24,136 INFO [org.jboss.as.server] (management-handler-thread - 1) WFLYSRV0010: Deployed "helloworld.war" (runtime-name : "helloworld.war")
Test it:
That was our first ride on Jakarta EE 9 with WildFly. As said in our first article, at the moment using the ‘jakarta‘ packaging is not mandatory as the transformer capabilities of wildfly-preview layer are able to perform the required bytecode changes in the package name, so everything still works with the former ‘javax’ packaging. Enjoy Jakarta EE 9!
Source code for this tutorial: https://github.com/fmarchioni/mastertheboss/tree/master/jakartaee/jakartaee-9