Mark all Stateless EJBs as part of cluster using ejb3-interceptors-aop.xml
nitin_jain Jul 7, 2011 1:53 AMHello 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