Sometimes the order of deployed units, in an Enterprise application matters. For example, if you are deploying an EAR which is made up of a WEB application an EJB, it can be necessary that the EJB application is deployed at first.
A typical scenario is a Web application uses ServletContextListeners. If the ServletContextListener tries to access the EJB, as soon as the Web component is deployed, a NamingException might be the outcome of it, because the EJB hasn't been still bound in the JNDI.
The quick fix to it is adding a ContextComparator in conf\bootstrap\deployers.xml file:
<bean name="topContextComparator"> <constructor factoryClass="org.jboss.system.deployers.LegacyDeploymentContextComparator" factoryMethod="getInstance"/> <property name="suffixOrder" class="java.util.Map"> <map keyClass="java.lang.String" valueClass="java.lang.Integer"> <entry> <key>.war</key> <value>700</value> </entry> </map> </property> </bean>
This will ensure that your Web application is loaded after the EJB modules.