Jboss-deployment-structure.xml: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 19: | Line 19: | ||
* To change an EAR deployments isolated class loading behavior, independently of the general setting described here: [[WildFly Modules#ear-subdeployments-isolated|<tt>ear-subdeployments-isolated</tt> setting]]. | * To change an EAR deployments isolated class loading behavior, independently of the general setting described here: [[WildFly Modules#ear-subdeployments-isolated|<tt>ear-subdeployments-isolated</tt> setting]]. | ||
* To add additional resource roots to a module. | * To add additional resource roots to a module. | ||
=Example= | |||
<pre> | |||
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2"> | |||
<!-- | |||
Override the global 'ear-subdeployments-isolated' setting. | |||
--> | |||
<ear-subdeployments-isolated>false</ear-subdeployments-isolated> | |||
<!-- | |||
This configuration element corresponds to the top level deployment. For a WAR this is | |||
the WAR's unique module, for an EAR is the top level module, which contains the classes | |||
in the EAR's lib folder. | |||
--> | |||
<deployment> | |||
<!-- exclude-subsystem prevents a subsystems deployment unit processors running on a deployment --> | |||
<!-- which gives basically the same effect as removing the subsystem, but it only affects single deployment --> | |||
<exclude-subsystems> | |||
<subsystem name="resteasy" /> | |||
</exclude-subsystems> | |||
<!-- Exclusions allow you to prevent the server from automatically adding some dependencies --> | |||
<exclusions> | |||
<module name="org.javassist" /> | |||
</exclusions> | |||
<!-- This allows you to define additional dependencies, it is the same as using the Dependencies: manifest attribute --> | |||
<!-- Note that the export="true" is necessary if these dependencies are to be seen by the sub-deployments --> | |||
<!-- if export is not set or is set to false, then the dependencies are only visible to the classes in the jars in the ear lib --> | |||
<dependencies> | |||
<module name="deployment.javassist.proxy" export="true" /> | |||
<module name="deployment.myjavassist" export="true" /> | |||
<!-- Import META-INF/services for ServiceLoader impls as well --> | |||
<module name="myservicemodule" services="import"/> | |||
</dependencies> | |||
<!-- These add additional classes to the module. In this case it is the same as including the jar in the EAR's lib directory --> | |||
<resources> | |||
<resource-root path="my-library.jar" /> | |||
</resources> | |||
</deployment> | |||
<sub-deployment name="myapp.war"> | |||
<!-- This corresponds to the module for a web deployment --> | |||
<!-- it can use all the same tags as the <deployment> entry above --> | |||
<dependencies> | |||
<!-- Adds a dependency on a ejb jar. This could also be done with a Class-Path entry --> | |||
<module name="deployment.myear.ear.myejbjar.jar" /> | |||
</dependencies> | |||
<!-- Set's local resources to have the lowest priority --> | |||
<!-- If the same class is both in the sub deployment and in another sub deployment that --> | |||
<!-- is visible to the war, then the Class from the other deployment will be loaded, --> | |||
<!-- rather than the class actually packaged in the war. --> | |||
<!-- This can be used to resolve ClassCastExceptions if the same class is in multiple sub deployments--> | |||
<local-last value="true" /> | |||
</sub-deployment> | |||
<!-- Now we are going to define two additional modules --> | |||
<!-- This one is a different version of javassist that we have packaged --> | |||
<module name="deployment.myjavassist" > | |||
<resources> | |||
<resource-root path="javassist.jar" > | |||
<!-- We want to use the servers version of javassist.util.proxy.* so we filter it out--> | |||
<filter> | |||
<exclude path="javassist/util/proxy" /> | |||
</filter> | |||
</resource-root> | |||
</resources> | |||
</module> | |||
<!-- This is a module that re-exports the containers version of javassist.util.proxy --> | |||
<!-- This means that there is only one version of the Proxy classes defined --> | |||
<module name="deployment.javassist.proxy" > | |||
<dependencies> | |||
<module name="org.javassist" > | |||
<imports> | |||
<include path="javassist/util/proxy" /> | |||
<exclude path="/**" /> | |||
</imports> | |||
</module> | |||
</dependencies> | |||
</module> | |||
</jboss-deployment-structure> | |||
</pre> |
Revision as of 21:22, 10 March 2016
External
- Developer Guide jboss-deployment-structure.xml https://docs.jboss.org/author/display/AS71/Developer+Guide#DeveloperGuide-JBossDeploymentStructureFile
Internal
Overview
jboss-deployment-structure.xml is a WildFly proprietary deployment descriptor that allows finely grained class loading control.
It must be placed in the META-INF or the WEB-INF directory of the deployment.
It can be used for the following:
- To prevents automatic dependencies from being added.
- To add module dependencies.
- To define additional modules. What for? How is that useful?
- To change an EAR deployments isolated class loading behavior, independently of the general setting described here: ear-subdeployments-isolated setting.
- To add additional resource roots to a module.
Example
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2"> <!-- Override the global 'ear-subdeployments-isolated' setting. --> <ear-subdeployments-isolated>false</ear-subdeployments-isolated> <!-- This configuration element corresponds to the top level deployment. For a WAR this is the WAR's unique module, for an EAR is the top level module, which contains the classes in the EAR's lib folder. --> <deployment> <!-- exclude-subsystem prevents a subsystems deployment unit processors running on a deployment --> <!-- which gives basically the same effect as removing the subsystem, but it only affects single deployment --> <exclude-subsystems> <subsystem name="resteasy" /> </exclude-subsystems> <!-- Exclusions allow you to prevent the server from automatically adding some dependencies --> <exclusions> <module name="org.javassist" /> </exclusions> <!-- This allows you to define additional dependencies, it is the same as using the Dependencies: manifest attribute --> <!-- Note that the export="true" is necessary if these dependencies are to be seen by the sub-deployments --> <!-- if export is not set or is set to false, then the dependencies are only visible to the classes in the jars in the ear lib --> <dependencies> <module name="deployment.javassist.proxy" export="true" /> <module name="deployment.myjavassist" export="true" /> <!-- Import META-INF/services for ServiceLoader impls as well --> <module name="myservicemodule" services="import"/> </dependencies> <!-- These add additional classes to the module. In this case it is the same as including the jar in the EAR's lib directory --> <resources> <resource-root path="my-library.jar" /> </resources> </deployment> <sub-deployment name="myapp.war"> <!-- This corresponds to the module for a web deployment --> <!-- it can use all the same tags as the <deployment> entry above --> <dependencies> <!-- Adds a dependency on a ejb jar. This could also be done with a Class-Path entry --> <module name="deployment.myear.ear.myejbjar.jar" /> </dependencies> <!-- Set's local resources to have the lowest priority --> <!-- If the same class is both in the sub deployment and in another sub deployment that --> <!-- is visible to the war, then the Class from the other deployment will be loaded, --> <!-- rather than the class actually packaged in the war. --> <!-- This can be used to resolve ClassCastExceptions if the same class is in multiple sub deployments--> <local-last value="true" /> </sub-deployment> <!-- Now we are going to define two additional modules --> <!-- This one is a different version of javassist that we have packaged --> <module name="deployment.myjavassist" > <resources> <resource-root path="javassist.jar" > <!-- We want to use the servers version of javassist.util.proxy.* so we filter it out--> <filter> <exclude path="javassist/util/proxy" /> </filter> </resource-root> </resources> </module> <!-- This is a module that re-exports the containers version of javassist.util.proxy --> <!-- This means that there is only one version of the Proxy classes defined --> <module name="deployment.javassist.proxy" > <dependencies> <module name="org.javassist" > <imports> <include path="javassist/util/proxy" /> <exclude path="/**" /> </imports> </module> </dependencies> </module> </jboss-deployment-structure>