[jboss-user] [EJB 3.0] - Adjust / reduce MDB bean pool

Alexander Hartner do-not-reply at jboss.com
Wed Oct 27 08:43:38 EDT 2010


Alexander Hartner [http://community.jboss.org/people/ejb3workshop] created the discussion

"Adjust / reduce MDB bean pool"

To view the discussion, visit: http://community.jboss.org/message/568627#568627

--------------------------------------------------------------
I am trying to reduce the MDB bean pool to limit the concurrency of my application. I know I can do this via the ActivationSpecification as well as via the deployment descriptor. However I would like to do this outside the EAR file and be able to adjust it at the application server level. I have found the suggestion to edit maxSize=5 in ejb3-interceptors-aop.xml.

> 
>       <bind pointcut="execution(public * @javax.annotation.security.RunAs->*(..))">
> 
>          <interceptor-ref name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
> 
>       </bind>
> 
>       <bind pointcut="execution(public * *->*(..))">
> 
>          <interceptor-ref name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
> 
>          <interceptor-ref name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
> 
>          <interceptor-ref name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
> 
>          <interceptor-ref name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
> 
>          <interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
> 
>       </bind>
> 
>       <annotation expr="!class(@org.jboss.annotation.ejb.PoolClass)">
> 
>          @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.StrictMaxPool.class, maxSize=5, timeout=10000)
> 
>       </annotation>
> 
>    </domain>
>    <domain name="Message Driven Bean">
>       <bind pointcut="execution(public * @javax.annotation.security.RunAs->*(..))">
>          <interceptor-ref name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
>       </bind>
>       <bind pointcut="execution(public * *->*(..))">
>          <interceptor-ref name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
>          <interceptor-ref name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
>          <interceptor-ref name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
>          <interceptor-ref name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
>          <interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
>       </bind>
>       <annotation expr="!class(@org.jboss.annotation.ejb.PoolClass)">
>          @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.StrictMaxPool.class, maxSize=5, timeout=10000)
>       </annotation>
>    </domain>
> 
Yet this resulted the following exception:

> javax.ejb.EJBException: Failed to acquire the pool semaphore, strictTimeout=10000
>         at org.jboss.ejb3.StrictMaxPool.get(StrictMaxPool.java:122)
>         at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:54)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>         at org.jboss.ejb3.mdb.MessagingContainer.localInvoke(MessagingContainer.java:249)
>         at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.delivery(MessageInflowLocalProxy.java:268)
>         at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.invoke(MessageInflowLocalProxy.java:138)
>         at $Proxy158.onMessage(Unknown Source)
>         at org.jboss.resource.adapter.jms.inflow.JmsServerSession.onMessage(JmsServerSession.java:178)
>         at org.jboss.jms.client.container.ClientConsumer.callOnMessageStatic(ClientConsumer.java:160)
>         at org.jboss.jms.client.container.SessionAspect.handleRun(SessionAspect.java:831)
>         at org.jboss.aop.advice.org.jboss.jms.client.container.SessionAspect14.invoke(SessionAspect14.java)
>         at org.jboss.jms.client.delegate.ClientSessionDelegate$run_N8003352271541955702.invokeNext(ClientSessionDelegate$run_N8003352271541955702.java)
>         at org.jboss.jms.client.container.ClosedInterceptor.invoke(ClosedInterceptor.java:170)
>         at org.jboss.aop.advice.PerInstanceInterceptor.invoke(PerInstanceInterceptor.java:105)
>         at org.jboss.jms.client.delegate.ClientSessionDelegate$run_N8003352271541955702.invokeNext(ClientSessionDelegate$run_N8003352271541955702.java)
>         at org.jboss.jms.client.delegate.ClientSessionDelegate.run(ClientSessionDelegate.java)
>         at org.jboss.jms.client.JBossSession.run(JBossSession.java:199)
>         at org.jboss.resource.adapter.jms.inflow.JmsServerSession.run(JmsServerSession.java:237)
>         at org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java:204)
>         at org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:275)
>         at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:756)
>         at java.lang.Thread.run(Thread.java:619)


Further reading brought me on to this link :  http://community.jboss.org/docs/DOC-9334 http://community.jboss.org/wiki/ConfigJBossMDB as well as other forum posts which suggests adding *<strictTimeout>forever</strictTimeout>* to conf/standardjboss.xml as in:

>   <container-configuration>
>       <container-name>Standard Message Driven Bean</container-name>
>       <call-logging>false</call-logging>
>       <invoker-proxy-binding-name>message-driven-bean</invoker-proxy-binding-name>
>       <container-interceptors>
>         <interceptor>org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor</interceptor>
>         <interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
>         <interceptor>org.jboss.ejb.plugins.RunAsSecurityInterceptor</interceptor>
>         <!-- CMT -->
>         <interceptor transaction="Container">org.jboss.ejb.plugins.TxInterceptorCMT</interceptor>
>         <interceptor transaction="Container">org.jboss.ejb.plugins.CallValidationInterceptor</interceptor>
>         <interceptor transaction="Container">org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor</interceptor>
>         <!-- BMT -->
>         <interceptor transaction="Bean">org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor</interceptor>
>         <interceptor transaction="Bean">org.jboss.ejb.plugins.MessageDrivenTxInterceptorBMT</interceptor>
>         <interceptor transaction="Bean">org.jboss.ejb.plugins.CallValidationInterceptor</interceptor>
>         <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptor</interceptor>
>       </container-interceptors>
>       <instance-pool>org.jboss.ejb.plugins.MessageDrivenInstancePool</instance-pool>
>       <instance-cache></instance-cache>
>       <persistence-manager></persistence-manager>
>       <container-pool-conf>
>            <MaximumSize>100</MaximumSize>
>            <strictTimeout>forever</strictTimeout>
>       </container-pool-conf>
>     </container-configuration>


Any suggestion on how I to change the pool size used for MDBs using JBoss 4.2.3 correctly.

Kind regards
Alex
--------------------------------------------------------------

Reply to this message by going to Community
[http://community.jboss.org/message/568627#568627]

Start a new discussion in EJB 3.0 at Community
[http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2029]

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jboss-user/attachments/20101027/9eee1743/attachment.html 


More information about the jboss-user mailing list