This will work on any JEE5 compliant server.
Let's assume you have
- 2 EJB called myejb1.jar and myejb2.jar
- 2 WAR webapps called mywebapp1.war and mywebapp2.war
- 2 common JARs called log4j.jar and mycommon.jar
You want to package it all into an EAR file called myapp.ear.
The myapp.ear directory structure will look like this:
myapp.ear:
META-INF/application.xml
myejb1.jar
myejb2.jar
mywebapp1.war
mywebapp2.war
lib/log4j.jar
lib/mycommon.jar
The contents of your META-INF/application.xml will contain
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="5"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/application_5.xsd">
<module>
<ejb>myejb1.jar</ejb>
</module>
<module>
<ejb>myejb2.jar</ejb>
</module>
<module>
<web>
<web-uri>mywebapp1.war</web-uri>
<context-root>webapp1</context-root>
</web>
</module>
<module>
<web>
<web-uri>mywebapp2.war</web-uri>
<context-root>webapp2</context-root>
</web>
</module>
<library-directory>lib</library-directory>
</application>
You will be able to access your web apps via the URL
http://myJBossServer.url/webapp1/
http://myJBossServer.url/webapp2/
You can also share static resources like CSS, images, JavaScript among multiple webapps. For example, I have a static-content.jar file with this directory layout:
static-content.jar:
META-INF/resources/css/my.css
META-INF/resources/img/my.jpg
META-INF/resources/js/jQuery.js
META-INF/resources/js/node.js
I put the static-content.jar in the WEB-INF/lib directory on both my webapps during build time. Now
http://myJBossServer.url/webapp1/css/my.css
http://myJBossServer.url/webapp2/css/my.css
have the same source from static-content.jar.
If I wanted to override the default my.css in webapp2 only, I can put the modified my.css into the mywebapp2.war directly.
mywebapp2.war
css/my.css
WEB-INF/lib/static-content.jar
The css/my.css in the WAR will override the my.css from static-content.jar