Deploying Grails 3.1 Applications to JBoss 6.4 EAP

26 May 2016

Tags: Grails, Deployment

We had previously described how to deploy Grails 3.1 applications to WildFly 10, which is where all of the “cutting edge” work happens in the JBoss world.

The process to deploy Grails 3.1 applications to JBoss 6.4 EAP is largely similar with some minor configuration differences.

Firstly, you have to configure your dependencies in build.gradle correctly by marking Tomcat as a provided dependency and including JAXB as a runtime dependency:

provided "org.springframework.boot:spring-boot-starter-tomcat"    
runtime 'javax.xml.bind:jaxb-api:2.2.12'

Next you need to create a src/main/webapp/WEB-INF/jboss-deployment-structure.xml file with the following contents:

<?xml version='1.0' encoding='UTF-8'?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1">
    <deployment>
        <exclusions>
          <module name="javaee.api"/>
          <module name="javax.validation.api"/>
          <module name="javax.faces.api"/>
          <module name="org.hibernate.validator"/>
        </exclusions>
    </deployment>
</jboss-deployment-structure>

This will prevent JBoss from loading any APIs that conflict. For example Grails ships with javax.validation version 1.1 but JBoss 6.4 comes prepackages with version 1.0, so without this configuration you would end up with an exception such as:

Caused by: java.lang.NoSuchMethodError: javax.validation.spi.ConfigurationState.getParameterNameProvider()Ljavax/validation/ParameterNameProvider;
    at org.hibernate.validator.internal.engine.ValidatorFactoryImpl.<init>(ValidatorFactoryImpl.java:119)
    at org.hibernate.validator.HibernateValidator.buildValidatorFactory(HibernateValidator.java:45)

With these two changes in place you can run gradle assemble to produce a WAR file that can be deployed to JBoss 6.4 EAP!

Published on 26 May 2016