7 Replies Latest reply on Jan 10, 2013 10:21 AM by pgadecki

    Mark all Stateless EJBs as part of cluster using ejb3-interceptors-aop.xml

    nitin_jain

      Hello Forum,

       

      I am running my application in a clustered environment. I would like to avoid annotating every stateless EJB with @Clustered annotation and rather make use of "ejb3-interceptors-aop.xml".

       

      When I use @Clustered annotation, the annotated EJB is logged by JBoss in the following manner.

       

      2011-07-07 10:06:18,251 INFO  [org.jboss.ejb3.deployers.JBossASKernel] (main) Added bean(jboss.j2ee:ear=myapp.ear,jar=platform-services-ejbs.jar,name=NotificationProcessorBean,service=EJB3) to KernelDeployment of: platform-services-ejbs.jar
      2011-07-07 10:06:18,251 INFO  [org.jboss.ejb3.deployers.JBossASKernel] (main) installing bean: jboss.j2ee:ear=myapp.ear,jar=platform-services-ejbs.jar,name=RequestDispatcherBean,service=EJB3
      2011-07-07 10:06:18,251 INFO  [org.jboss.ejb3.deployers.JBossASKernel] (main)   with dependencies:
      2011-07-07 10:06:18,251 INFO  [org.jboss.ejb3.deployers.JBossASKernel] (main)   and demands:
      2011-07-07 10:06:18,251 INFO  [org.jboss.ejb3.deployers.JBossASKernel] (main)  jboss.ejb:service=EJBTimerService
      2011-07-07 10:06:18,251 INFO  [org.jboss.ejb3.deployers.JBossASKernel] (main)  partition:partitionName=MyCluster
      2011-07-07 10:06:18,251 INFO  [org.jboss.ejb3.deployers.JBossASKernel] (main)   and supplies:
      2011-07-07 10:06:18,251 INFO  [org.jboss.ejb3.deployers.JBossASKernel] (main)  Class:com.myapp.platform.bs.SampleEJB
      2011-07-07 10:06:18,251 INFO  [org.jboss.ejb3.deployers.JBossASKernel] (main)  jndi:myapp/SampleEJBBean/remote-com.myapp.platform.bs.SampleEJB
      2011-07-07 10:06:18,251 INFO  [org.jboss.ejb3.deployers.JBossASKernel] (main)  jndi:myapp/SampleEJBBean/remote

      From the log it can be understood that "SampleEJBBean" is part of "MyCluster".

       

      Is it possible to add annotation element for @Clustered annotation in "ejb3-interceptors-aop.xml" and achieve similar functionality?

       

      To give it a try I added the following elements in the "ejb3-interceptors-aop.xml" file present at "\server\all\deploy" with no success.

       

       

         <domain name="Stateless Bean" extends="Intercepted Bean" inheritBindings="true">
            <bind pointcut="execution(public * *->*(..))">
               <interceptor-ref name="org.jboss.ejb3.ENCPropagationInterceptor"/>
               <interceptor-ref name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
            </bind>
            <bind pointcut="execution(public * @org.jboss.ejb3.annotation.SecurityDomain->*(..))">
               <interceptor-ref name="Basic Authorization"/>
            </bind>
            <bind pointcut="execution(public * *->*(..))">
               <interceptor-ref name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
            </bind>
            <bind pointcut="execution(public * @org.jboss.ejb3.annotation.Clustered->*(..))">
               <interceptor-ref name="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory"/>
            </bind>
            <bind pointcut="execution(public * *->*(..))">
               <interceptor-ref name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
               <interceptor-ref name="org.jboss.ejb3.tx.CMTTxInterceptorFactory"/>
               <interceptor-ref name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
               <interceptor-ref name="org.jboss.ejb3.tx.BMTTxInterceptorFactory"/>
               <interceptor-ref name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
               <interceptor-ref name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
               <!-- interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/ -->
               <stack-ref name="EJBInterceptors"/>
            </bind>
            <annotation expr="class(*) AND !class(@org.jboss.ejb3.annotation.Pool)">
               @org.jboss.ejb3.annotation.Pool (value="ThreadlocalPool", maxSize=30, timeout=10000)
            </annotation>
            <annotation expr="class(@javax.ejb.Remote) AND !class(@org.jboss.annotation.ejb.Clustered)">
           @org.jboss.annotation.ejb.Clustered(partition="MyCluster", loadBalancePolicy="org.jboss.ha.framework.interfaces.RandomRobin")
      
            </annotation>
         </domain>
      
      

      I have tried other possiblities like

       

         <annotation expr="class(*) AND !class(@org.jboss.annotation.ejb.Clustered)">
             @org.jboss.annotation.ejb.Clustered(partition="MyCluster", loadBalancePolicy="org.jboss.ha.framework.interfaces.RandomRobin")
         </annotation>
      

      and

         <annotation expr="!class(@org.jboss.annotation.ejb.Clustered)">
                @org.jboss.annotation.ejb.Clustered(partition="MyCluster", loadBalancePolicy="org.jboss.ha.framework.interfaces.RandomRobin")
         </annotation>
      
      

      but with no success. I do not see any of my other stateless EJB with a similar log as depicted for "SampleEJBBean".

       

      Please advise on how to fix this issue.

       

      Regards,

      Nitin