Environment:
JBoss EAP
6.x
Issue:
1. Excluding
javax.mail.api does not work
2. Trying
to deploy an existing Spring application to JBoss and the deployed
application's SMTP mail sending functionality is broken. User realized that
JBoss is loading the javax.mail.api from its own (red-hat implementation of the
jar) existing modules. The user wants to load its implementation.
3. User
has been created a jboss-deployment-structure.xml and tried different exclusion
ideas. However, none of them worked. JBoss Application Server refused to load
our war provided javax.mail.jar.
Resolution:
User
would need to exclude the javaee.api as it is an automatic
dependency and exports javax.mail.api.
Hence the user would need to add all dependencies of javaee.api
in jboss-deployment-structure.xml and exclude the default dependencies of
javax.mail.api.
<xml version="1.0"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<deployment>
<exclusions>
<module name="javaee.api"
/>
<module name="javax.mail.api"
/>
</exclusions>
<dependencies>
<module name="javax.activation.api" export="true" />
<module name="javax.annotation.api" export="true" />
<module name="javax.ejb.api" export="true" />
<module name="javax.el.api" export="true" />
<module name="javax.enterprise.api" export="true" />
<module name="javax.enterprise.deploy.api" export="true" />
<module name="javax.inject.api" export="true" />
<module name="javax.interceptor.api" export="true" />
<module name="javax.jms.api" export="true" />
<module name="javax.jws.api" export="true" />
<module name="javax.management.j2ee.api" export="true" />
<module name="javax.persistence.api" export="true" />
<module name="javax.resource.api" export="true" />
<module name="javax.rmi.api" export="true" />
<module name="javax.security.auth.message.api" export="true" />
<module name="javax.security.jacc.api" export="true" />
<module name="javax.servlet.api" export="true" />
<module name="javax.servlet.jsp.api" export="true" />
<module name="javax.transaction.api" export="true" />
<module name="javax.validation.api" export="true" />
<module name="javax.ws.rs.api" export="true" services="export"
/>
<module name="javax.xml.bind.api" export="true" />
<module name="javax.xml.registry.api" export="true" />
<module name="javax.xml.soap.api" export="true" />
<module name="javax.xml.ws.api" export="true" />
<!— OR can comment out to load from EAR -->
<module name="javax.mail.api" slot="1.4" />
<module name="javax.api" export="true" />
</dependencies>
</deployment>
</jboss-deployment-structure>
|
Define Custom module:
It is
possible to create a custom module under $JBOSS_HOME/modules/ with a different
version of a mail jar and then make application depend on it using the
jboss-deployment-structure.xml. If you create a module, you should declare the
dependencies below which are needed by the javax.mail.api classes.
<module xmlns="urn:jboss:module:1.3" name="javax.mail.api" slot="1.4">
<dependencies>
<module name="javax.activation.api" />
<module name="javax.api" />
</dependencies>
<resources>
<resource-root path="mail-1.6.jar" />
</resources>
</module>
|