JBoss WildFly là một Java server runtime, giúp chúng ta có thể chạy các ứng dụng Java web. Để thuận tiện cho quá trình development, các bạn có thể sử dụng WildFly Maven Plugin để chạy ứng dụng web mà chúng ta đang làm việc sử dụng Maven ngay luôn, không cần phải build source code thành tập tin .war sau đó thì copy vào thư mục deployment của JBoss WildFly. Trong bài viết này, mình sẽ hướng dẫn các bạn cách sử dụng WildFly Maven Plugin này các bạn nhé!
Mình sẽ tạo mới một Spring MVC project như sau:
Vì trong Maven Archetype huongdanjava-springmvc-archetype mình đã định nghĩa sử dụng Maven Jetty plugin để chạy ứng dụng này rồi nên mình sẽ remove plugin này ra, thay vào đó, mình sẽ khai báo để sử dụng WildFly Maven Plugin như sau:
1 2 3 4 5 |
<plugin> <groupId>org.wildfly.plugins</groupId> <artifactId>wildfly-maven-plugin</artifactId> <version>4.2.0.Final</version> </plugin> |
Mặc định thì WildFly Maven Plugin sẽ download và sử dụng latest version của JBoss WildFly để chạy ứng dụng. Các bạn có thể chỉ định JBoss WildFly version mà các bạn muốn sử dụng bằng cách khai báo cấu hình như sau:
1 2 3 4 5 6 7 8 |
<plugin> <groupId>org.wildfly.plugins</groupId> <artifactId>wildfly-maven-plugin</artifactId> <version>4.2.0.Final</version> <configuration> <version>30.0.0.Final</version> </configuration> </plugin> |
Thông tin trong tag <version> ở trên chính là version của JBoss WildFly mà các bạn muốn sử dụng.
Cho ứng dụng ví dụ của mình với Spring framework 6.x chạy với Java 17 và Jakarta EE 9 thì chỉ có JBoss WildFly version 27.0.1.Final là phù hợp nên mình sẽ khai báo cho ví dụ của mình như sau:
1 2 3 4 5 6 7 8 |
<plugin> <groupId>org.wildfly.plugins</groupId> <artifactId>wildfly-maven-plugin</artifactId> <version>4.2.0.Final</version> <configuration> <version>27.0.1.Final</version> </configuration> </plugin> |
Lúc này, nếu các bạn chạy ứng dụng này với Maven goals là mvn clean package wildfly:run, các bạn sẽ thấy kết quả như sau trong Console:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
09:55:48,486 INFO [org.jboss.as.server.deployment] (MSC service thread 1-4) WFLYSRV0027: Starting deployment of "wildfly-maven-plugin-example-1.0-SNAPSHOT.war" (runtime-name: "wildfly-maven-plugin-example-1.0-SNAPSHOT.war") 09:55:51,330 INFO [org.jboss.weld.deployer] (MSC service thread 1-5) WFLYWELD0003: Processing weld deployment wildfly-maven-plugin-example-1.0-SNAPSHOT.war 09:55:51,495 INFO [org.hibernate.validator.internal.util.Version] (MSC service thread 1-5) HV000001: Hibernate Validator 8.0.0.Final 09:55:51,843 WARN [org.wildfly.extension.microprofile.opentracing] (MSC service thread 1-5) WFLYTRACEXT0012: No Jaeger endpoint or sender-binding configured. Installing a no-op sender 09:55:51,858 INFO [io.jaegertracing.internal.JaegerTracer] (MSC service thread 1-5) No shutdown hook registered: Please call close() manually on application shutdown. 09:55:51,861 INFO [org.wildfly.microprofile.opentracing.smallrye] (MSC service thread 1-5) WFLYTRAC0001: Tracer initialized: JaegerTracer(version=Java-1.6.0, serviceName=wildfly-maven-plugin-example-1.0-SNAPSHOT.war, reporter=RemoteReporter(sender=NoopSender(), closeEnqueueTimeout=1000), sampler=ConstSampler(decision=true, tags={sampler.type=const, sampler.param=true}), tags={hostname=Khanhs-MacBook-Pro.local, jaeger.version=Java-1.6.0, ip=127.0.0.1}, zipkinSharedRpcSpan=false, expandExceptionLogs=false, useTraceId128Bit=false) 09:55:52,022 INFO [org.jboss.weld.Version] (MSC service thread 1-3) WELD-000900: 5.1.0 (Final) 09:55:53,361 INFO [io.undertow.servlet] (ServerService Thread Pool -- 10) No Spring WebApplicationInitializer types detected on classpath 09:55:53,374 INFO [io.undertow.servlet] (ServerService Thread Pool -- 10) Initializing Spring root WebApplicationContext 09:55:53,377 INFO [org.springframework.web.context.ContextLoader] (ServerService Thread Pool -- 10) Root WebApplicationContext: initialization started 09:55:53,998 INFO [org.springframework.web.context.ContextLoader] (ServerService Thread Pool -- 10) Root WebApplicationContext initialized in 620 ms 09:55:54,085 INFO [jakarta.enterprise.resource.webcontainer.faces.config] (ServerService Thread Pool -- 10) Initializing Mojarra 4.0.0.SP01 for context '/wildfly-maven-plugin-example-1.0-SNAPSHOT' 09:55:54,838 INFO [io.undertow.servlet] (ServerService Thread Pool -- 10) Initializing Spring DispatcherServlet 'appServlet' 09:55:54,838 INFO [org.springframework.web.servlet.DispatcherServlet] (ServerService Thread Pool -- 10) Initializing Servlet 'appServlet' 09:55:55,445 INFO [org.springframework.web.servlet.DispatcherServlet] (ServerService Thread Pool -- 10) Completed initialization in 607 ms 09:55:55,446 INFO [org.wildfly.extension.undertow] (ServerService Thread Pool -- 10) WFLYUT0021: Registered web context: '/wildfly-maven-plugin-example-1.0-SNAPSHOT' for server 'default-server' 09:55:55,489 INFO [org.jboss.as.server] (management-handler-thread - 1) WFLYSRV0010: Deployed "wildfly-maven-plugin-example-1.0-SNAPSHOT.war" (runtime-name : "wildfly-maven-plugin-example-1.0-SNAPSHOT.war") |
Như vậy là ứng dụng của chúng ta đã được deploy thành công. Context path của ứng dụng, như các bạn thấy trong đoạn log message trên, là /wildfly-maven-plugin-example-1.0-SNAPSHOT nha các bạn!
Kết quả khi mình request tới địa chỉ http://localhost:8080/wildfly-maven-plugin-example-1.0-SNAPSHOT/ như sau: