[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