2017-06-02 1 views
1

ich derzeit ‚JBAS014516: Es konnte keine Genehmigung innerhalb von 5 Minuten erwerben‘ mit Blick auf bin erwerben Problem mit meinem EJB-JBOSS configuration.Below ist meine Konfiguration -Wie lösen - JBAS014516: Es kann keine Genehmigung innerhalb von 5 Minuten

<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> 

Um dies zu beheben, sollte ich den 'strict-max-pool' auf einen höheren Wert erhöhen oder die Thread-Pool-Größe erhöhen.

+0

Gibt es einen tatsächlichen Stack-Trace, der dieser Nachricht zugeordnet ist? Bitte fügen Sie es in Ihre Frage ein. –

Antwort

1

Es ist wirklich schwierig, einen guten Ansatz ohne Verständnis Ihres Anwendungsfalls vorzuschlagen, aber höchstwahrscheinlich rufen Sie eine Methode auf Ihrer EJB-Bean auf, die zu lange dauert, bis die Instanzen im Pool allmählich erschöpft sind links für den Aufrufer-Prozess. Wenn mehr und mehr Anfragen für diese Operation eingehen, versucht der EJB-Container, dem Client den nächsten freien Artikel im Pool bereitzustellen. Normalerweise wird die Instanz, wenn die Operation für die Bean-Instanz beendet ist, an den Pool zurückgegeben und könnte für den nächsten Client-Aufruf verwendet werden. Wenn die Operation lange dauert, wird der Pool erschöpft, bis keine Instanz mehr verfügbar ist, um den Clientanruf zu bedienen. Basierend auf Ihrer Konfiguration verfügt der EJB-Container über 20 Instanzen. Wenn keine verfügbar ist, versucht es 5 Minuten zu warten, ob eine Instanz nicht in den Pool zurückkehrt. Wenn es in dieser Zeit keine Instanz erhält, wird der oben erwähnte Fehler dem Aufrufer übergeben.
Also wohin führt uns das: In erster Linie analysieren Sie die EJB-Operation, die so lange dauert (es ist sehr nützlich, eine einfache EJB Interceptor zu Ihrer Bereitstellung hinzuzufügen, die Anfang und Ende von EJB-Anrufe plus verfolgen verfolgen würde) Ausführungszeit)
Ermitteln, wer diese EJB-Instanz anruft - vielleicht führt sie übermäßig viele Aufrufe für diese Bean aus.
Wenn der langen laufende Betrieb nicht oder optimiert vermieden werden kann, die Poolgröße erhöhen, so dass mehr Instanzen dieser Bohne zu den Kunden zur Verfügung stehen (max-pool-size justiert)

Wenn Ihr Anwendungsfall lange laufenden Betrieb erfordert, aber tut Sie müssen blockieren und auf ihr Ergebnis warten. Berücksichtigen Sie die asynchrone Verarbeitung zusammen mit der JMS-Warteschlange - erstellen Sie Jobs in der Warteschlange und führen Sie sie dann mit MDB aus. Sie können den Status Ihrer Verarbeitung über die DB noch ablegen und abfragen.

Verwandte Themen