Deploy resteasy-spring-boot project into WildFly Java EE Full & Web Distribution
By Wei Nan Li | April 27, 2020
Recently I have made an example project that showing how to deploy the resteasy-spring-boot based project into WildFly Java EE Full & Web Distribution, and here is the source code of the example:
There are several points need to be noted, and let me explain these points one by one.
Firstly, we need to set the project packaging type as
war in the
pom.xml file of the project:
So it can be packaged as WAR file and then deployed to WildFly server.
Secondly, because we are deploying the project into WildFly, so we need to exclude the Tomcat server embedded in spring-boot itself. To do this, we need to exclude the module in the
pom.xml of the sample project:
<!-- we need to remove tomcat from WAR becasue this project will be deployed to Wildfly--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
Like the snippet shown above, we have marked the scope of
spring-boot-starter-tomcat dependency as
provided, thus the package won’t be included into the final war file.
The third point is to add a file named
jboss-deployment-structure.xml into the
WEB-INF directory of the project. Here is the content of the file:
<jboss-deployment-structure> <deployment> <exclude-subsystems> <subsystem name="jaxrs"/> </exclude-subsystems> </deployment> </jboss-deployment-structure>
With the setup above, we have disabled the
jaxrs subsystem of the WildFly to work for our project. Because our project contains
resteasy-spring-boot and all its dependencies by itself in the war file.
The last point is to configure the
maven-war-plugin properly in the
pom.xml, and here is the configuration:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin>
Because we don’t have a
web.xml in our project, so we need above configuration for the
maven-war-plugin to work properly.
Above are all the points to note. Then we can package the sample project in the project directory:
$ pwd works/resteasy-spring-boot/sample-app-for-wildfly
In above directory, run the following command to do the packaging:
$ mvn package ... [INFO] BUILD SUCCESS ...
After the above packaging process, we get the war file like this:
$ ls target/sample-app.war target/sample-app.war ...
As the command shown above, we get the
sample.war file. Then we can deploy the war file into a running WildFly server:
$ pwd works/wildfly-19.0.0.Final/bin
$ ./standalone.sh ... 14:06:32,847 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 19.0.0.Final (WildFly Core 11.0.0.Final) started in 7600ms - Started 911 of 1139 services (384 services are lazy, passive or on-demand)
From above process we can see that we started a WildFly server, and then we can connect to the server and do the deployment:
$ ./jboss-cli.sh connect lYou are disconnected at the moment. Type 'connect' to connect to the server or 'help' for the list of supported commands. [disconnected /] connect localhost [standalone@localhost:9990 /] deploy works/resteasy-spring-boot/sample-app-for-wildfly/target/sample-app.war --force [standalone@localhost:9990 /]
With above command we did a deployment, and from the WildFly server side output we can see the project is deployed:
14:08:14,211 INFO [org.wildfly.extension.undertow] (ServerService Thread Pool -- 114) WFLYUT0021: Registered web context: '/sample-app' for server 'default-server'
From the above server output we can see the project is deployed to the WildFly server. Then we can try to access the service by using the
$ curl localhost:8080/sample-app/rest/hello Hello, world!
From the above output, we can see the service is working.