2017-06-02 16 views
1

以内に許可証の取得に失敗しました。私は現在、「JBAS014516:5分以内に許可証の取得に失敗しました」直面しています私のEJB-JBOSS configuration.Belowは私の構成であるとの問題 -がどのように解決するには - JBAS014516 5分

<subsystem xmlns="urn:jboss:domain:ejb3:1.4"> 
     <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="20" 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"/> 
      <cache name="clustered" passivation-store-ref="abc" aliases="StatefulTreeCache"/> 
     </caches> 

     <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> 
     <iiop enable-by-default="false" use-qualified-name="false"/> 
     <default-security-domain value="other"/> 
     <default-missing-method-permissions-deny-access value="true"/> 
    </subsystem> 

これを解決するには、 'strict-max-pool'を高い値に増やすか、スレッドプールのサイズを大きくする必要があります。

+0

このメッセージに関連付けられている実際のスタックトレースはありますか?あなたの質問にそれを含めてください。 –

答えて

1

ユースケースを理解していないとよいアプローチを提案するのは本当に難しいですが、たいていあなたが実行するには時間がかかりすぎて、プール内のインスタンスを徐々に使い果たしてしまうEJB Beanのメソッドを呼び出しています呼び出し元プロセスのために残しました。この操作の要求が増えるにつれて、EJBコンテナはプールに次の空きアイテムをクライアントに提供しようとします。通常、Beanインスタンスの操作が終了すると、インスタンスはプールに戻され、次のクライアント呼び出しに使用されます。操作に時間がかかる場合、クライアントコールを処理するために使用可能なインスタンスがなくなるまで、プールは使い果たされます。あなたの設定に基づいて、EJBコンテナには20のインスタンスがあります。どれも利用できない場合、インスタンスがプールに返されないかどうかを5分間待つことを試みます。その時間にインスタンスを取得できない場合は、上記のエラーが呼び出し元に送信されます。
それはどこにありますか 最初に、は、その長さがであるEJB操作を分析します(デプロイメントに単純なEJBインターセプタを追加すると、EJB呼び出しの開始と終了を追跡するのに非常に便利です)実行時間)
そのEJBインスタンスを誰が呼び出すのかを決定します。おそらく、そのBeanに対して過剰な呼び出しを行っています。
実行時間の長い操作を回避または最適化することができない場合は、そのBeanの複数のインスタンスは、クライアントに利用可能になるように、プールのサイズを増やす(max-pool-sizeを調整)

ご利用の場合は、長時間実行される操作を必要としますが、ない場合それらの結果をブロックして待機する必要があります。JMSキューと一緒に非同期処理を検討してください。キューにジョブを作成し、MDBを使用してそれらを実行してください。 DBを介して処理のステータスを保存して照会することはできます。

関連する問題