Lazy EJB3.1 timerservice deployment starting JBoss AS 6.0.0.M5

Version 1
    Background:

     

    EJB3.1 timerservice support was introduced in AS 6.0.0.M4 http://community.jboss.org/wiki/EJB31inJBossAS600M4. The implementation is based on JPA (Hibernate as the provider in JBoss AS). This added around 3-4 second increase in the boot time of the JBoss AS server, due the initialization involved for deploying the timerservice jar. Since the timerservice was only applicable for EJB3.x deployments, it did not make sense to increase the default boot time if the server doesn't have any EJB3.x deployments. Hence we decided to "lazily" deploy the timerservice.

     

    Forum discussion:

     

    http://community.jboss.org/thread/155800

     

    Details:

     

    Starting JBoss AS 6.0.0.M5, which was released recently http://community.jboss.org/blogs/donnamishelly/2010/09/24/jboss-as-600m5-released, the jboss-ejb3-timerservice-mk2.jar now resides in JBOSS_HOME/common/deploy folder. This jar will be deployed lazily by the server. The server will  deploy this jar only when the first EJB3.x deployment is made available in the server. By default, JBoss AS doesn't ship any EJB3.x deployments and hence the lazy deployment of timerservice jar saves a few seconds of the server boot time.

     

    How to disable the "lazy" timerservice deployment:

     

    If users want to disable the "lazy" deployment of timerservice and instead deploy it always, irrespective of the presence of an EJB3.x deployment, then follow the steps mentioned below:

     

    • Move (cut/paste) jboss-ejb3-timerservice-mk2.jar from JBOSS_HOME/common/deploy to JBOSS_HOME/server/< servername>/deploy folder. Ex: Move it to JBOSS_HOME/server/default/deploy folder, if you use the "default" server config.

     

    • Edit the JBOSS_HOME/server/< servername>/deployers/ejb3.deployer/META-INF/ejb3-as-deployers-jboss-beans.xml and comment out (or remove) the following MC bean configuration:

       
       

    <bean name="EJB3MetadataOnDemandDeploymentDeployer" class="org.jboss.ejb3.deployers.EJB3MetadataOnDemandDeploymentDeployer">
          
          <property name="profileService"><inject bean="jboss.profileservice:service=ProfileService"/></property>
     
          <!-- Build a profile from the contents of this single URI -->
          <property name="deploymentRoot">${jboss.common.base.url}deploy</property>
          
          <!--  We just have a single on-demand deployment - the jboss-ejb3-timerservice-mk2.jar
            Note: If there are multiple deployments which need to be deployed on-demand, then 
            set the "deploymentNames" collection property *instead of* "singleDeployment"
            property
           -->
          <property name="singleDeployment">jboss-ejb3-timerservice-mk2.jar</property>
          
          <!-- 
            Whether activation of the profile (i.e. deployment of the URI contents)
            should be deferred until the first EJB3.x deployment (true) or done as part of
            the start of this bean (false).
            
            WARNING: This configuration option may be altered in a subsequent AS 6.0
            milestone release.
            
            FIXME: https://jira.jboss.org/jira/browse/JBAS-7714        
            -->
          <property name="activateOnDemand">${jboss.as.deployment.ondemand:true}</property>
    
       </bean>
    

      
    Issues/questions:

     

    If you have any related issues or questions, please report/ask them in our user forum here http://community.jboss.org/community/ejb3?view=discussions