How to force JBoss to deploy the EJB first in an EAR ?

Please note this tutorial is related to JBoss AS 5 therefore it's now obsolete.
If you want to learn how to configure the deployment order of applications in WildFly / JBoss EAP we recommend checking this tutorial: Simple way to configure JBoss / WildFly deployment order

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">

This will ensure that your Web application is loaded after the EJB modules.