2

我们有一个在 Jboss AS 7.1.1 上运行并使用 EJB 3 的应用程序。我们间歇性地看到以下错误

javax.ejb.EJBException:JBAS014516:未能在 org.jboss.as.ejb3.pool.strictmax.StrictMaxPool.get(StrictMaxPool.java:109) 在 org.jboss.as.ejb3.component 的 5 分钟内获得许可。 pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:47) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) at org.jboss.as.ejb3.remote.EJBRemoteTransactionPropagatingInterceptor.processInvocation(EJBRemoteTransactionPropagatingInterceptor.java:8 0 ) 在 org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java :41) 在 org.jboss.invocation.InterceptorContext 的 org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)。在 org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 在 org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 在 org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59) 继续(InterceptorContext.java:288) .jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor .processInvocation(AdditionalSetupInterceptor.java:32) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) at org.jboss.as.ee.component.TCCLInterceptor.processInvocation(TCCLInterceptor.java:45) at org. jboss.invocation.InterceptorContext。在 org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:165) 的 org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:165) 的 org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) 继续(InterceptorContext.java:288) .jboss.as.ejb3.remote.LocalEjbReceiver.processInvocation(LocalEjbReceiver.java:179) 在 org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:179) 在 org.jboss.ejb.client.TransactionInterceptor.handleInvocation (TransactionInterceptor.java:43) 在 org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:128) 在 org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:181)。 ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:181) 在 org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:121) 在 org.jboss.ejb.client.EJBInvocationHandler 的 org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:136) .invoke(EJBInvocationHandler.java:104)

下面是standalone.xml中EJB子系统的配置

<subsystem xmlns="urn:jboss:domain:ejb3:1.2">
        <session-bean>
            <stateless>
                <bean-instance-pool-ref pool-name="slsb-strict-max-pool"/>
            </stateless>
            <stateful default-access-timeout="5000" cache-ref="simple"/>
            <singleton default-access-timeout="5000"/>
        </session-bean>
        <mdb>
            <resource-adapter-ref resource-adapter-name="hornetq-ra"/>
            <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>
        </mdb>
        <pools>
            <bean-instance-pools>
                <strict-max-pool name="slsb-strict-max-pool" max-pool-size="40" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
                <strict-max-pool name="mdb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
            </bean-instance-pools>
        </pools>
        <caches>
            <cache name="simple" aliases="NoPassivationCache"/>
            <cache name="passivating" passivation-store-ref="file" aliases="SimpleStatefulCache"/>
        </caches>
        <passivation-stores>
            <file-passivation-store name="file"/>
        </passivation-stores>
        <async thread-pool-name="default"/>
        <timer-service thread-pool-name="default">
            <data-store path="timer-service-data" relative-to="jboss.server.data.dir"/>
        </timer-service>
        <remote connector-ref="remoting-connector" thread-pool-name="default"/>
        <thread-pools>
            <thread-pool name="default">
                <max-threads count="10"/>
                <keepalive-time time="100" unit="milliseconds"/>
            </thread-pool>
        </thread-pools>
    </subsystem>
    <subsystem xmlns="urn:jboss:domain:infinispan:1.2" default-cache-container="hibernate">
        <cache-container name="hibernate" default-cache="local-query">
            <local-cache name="entity">
                <transaction mode="NON_XA"/>
                <eviction strategy="LRU" max-entries="10000"/>
                <expiration max-idle="100000"/>
            </local-cache>
            <local-cache name="local-query">
                <transaction mode="NONE"/>
                <eviction strategy="LRU" max-entries="10000"/>
                <expiration max-idle="100000"/>
            </local-cache>
            <local-cache name="timestamps">
                <transaction mode="NONE"/>
                <eviction strategy="NONE"/>
            </local-cache>
        </cache-container>
    </subsystem>

我们正在尝试解决可能导致此问题的原因并对其进行修复。

4

1 回答 1

6

当配置的 EJB 池用尽时会发生这种情况 - 意味着所有 EJB 当前都“正在使用”(=处理中)。在您的 EJB 中寻找长时间运行的调用。在您的情况下,调用似乎需要超过 5 分钟。

于 2013-09-19T10:41:21.727 回答