1

jboss-5.1 を使用して、サードパーティのキューからメッセージをサブスクライブするために使用されるメッセージ駆動型 Bean をデプロイしています。

約 16 のメッセージがそのキューに投稿されましたが、それらはサブスクライバー キューで保留中のままでした。サーバーを再起動したところ、メッセージはすぐに取得されました。

私が分析した限り、どちらも15歳なので、影響を受けたと思いますmaxsizemaxsessionしかし、実際の問題があったかどうか、再起動するだけでどのように解決したかはわかりません。

ログはエラー モードでした。完全なスタック トレースを取得できませんでした。

これは、そのエラー ログのスニペットです。

[2012-10-30 17:01:00,228] [MQQueueAgent (GQH1_PLANNING_MDM_001)]
[ERROR] STDERR: 2012.10.30 17:01:00 MQJMS1023E rollback failed

[2012-10-30 17:01:00,228] [exceptionDelivery0] [WARN ]
org.jboss.resource.adapter.jms.inflow.JmsActivation: Failure in jms activation 
org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@85d0d(ra=org.jboss.resource.adapter.jms.JmsResourceAdapter@b21aae
destination=remotewsmq/NOTIFICATION_PLANNING_MDM_001.SUBQ
destinationType=javax.jms.Queue tx=true durable=false reconnect=10 provider=RemoteWSMQJMSProvider
 user=null maxMessages=1 minSession=1 maxSession=5 keepAlive=60000 useDLQ=false)

GQH1_PLANNING_MDM_001: サブスクライブに使用されるキューの名前。

MDB のプロパティを構成するために使用するファイルは次のとおりです。

1.ejb3-interceptors-aop.xml

  <domain name="Message Driven Bean" extends="Intercepted Bean" inheritBindings="true">
      <bind pointcut="execution(public * *->*(..))">
         <interceptor-ref name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
         <interceptor-ref name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
      </bind>

      <!-- TODO: Authorization? -->

      <bind pointcut="execution(public * *->*(..))">
         <interceptor-ref name="org.jboss.ejb3.tx.CMTTxInterceptorFactory"/>
         <interceptor-ref name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
         <interceptor-ref name="org.jboss.ejb3.tx.BMTTxInterceptorFactory"/>
         <interceptor-ref name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
         <interceptor-ref name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
         <!-- interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/ -->
         <stack-ref name="EJBInterceptors"/>
      </bind>

      <annotation expr="class(*) AND !class(@org.jboss.ejb3.annotation.Pool)">
         @org.jboss.ejb3.annotation.Pool (value="StrictMaxPool", maxSize=15, timeout=10000)
      </annotation>
   </domain>

2.standardjboss.xml

<invoker-proxy-binding>
      <name>message-driven-bean</name>
      <invoker-mbean>default</invoker-mbean>
      <proxy-factory>org.jboss.ejb.plugins.jms.JMSContainerInvoker</proxy-factory>
      <proxy-factory-config>
        <JMSProviderAdapterJNDI>DefaultJMSProvider</JMSProviderAdapterJNDI>
        <ServerSessionPoolFactoryJNDI>StdJMSPool</ServerSessionPoolFactoryJNDI>
        <CreateJBossMQDestination>false</CreateJBossMQDestination>

        <!-- WARN: Don't set this to zero until a bug in the pooled executor is fixed -->

        <MinimumSize>1</MinimumSize>
        <MaximumSize>15</MaximumSize>
        <KeepAliveMillis>30000</KeepAliveMillis>
        <MaxMessages>1</MaxMessages>

        <MDBConfig>
          <ReconnectIntervalSec>10</ReconnectIntervalSec>
          <DLQConfig>
            <DestinationQueue>queue/DLQ</DestinationQueue>
            <MaxTimesRedelivered>10</MaxTimesRedelivered>
            <TimeToLive>0</TimeToLive>
          </DLQConfig>
        </MDBConfig>

      </proxy-factory-config>
    </invoker-proxy-binding>

   <activation-config-property>
        <activation-config-property-name>maxSession</activation-config-property-name>
        <activation-config-property-value>15</activation-config-property-value>
   </activation-config-property>

3.jms-ds.xml

<?xml version="1.0" encoding="UTF-8"?>

<connection-factories>

  <!-- ==================================================================== -->
  <!-- JMS Stuff                                                            -->
  <!-- ==================================================================== -->

   <!--
       The JMS provider loader. Currently pointing to a non-clustered ConnectionFactory. Need to
       be replaced with a clustered non-load-balanced ConnectionFactory when it becomes available.
       See http://jira.jboss.org/jira/browse/JBMESSAGING-843. 
   -->
   <mbean code="org.jboss.jms.jndi.JMSProviderLoader"
          name="jboss.messaging:service=JMSProviderLoader,name=JMSProvider">
      <attribute name="ProviderName">DefaultJMSProvider</attribute>
      <attribute name="ProviderAdapterClass">org.jboss.jms.jndi.JNDIProviderAdapter</attribute>
      <attribute name="FactoryRef">java:/XAConnectionFactory</attribute>
      <attribute name="QueueFactoryRef">java:/XAConnectionFactory</attribute>
      <attribute name="TopicFactoryRef">java:/XAConnectionFactory</attribute>
   </mbean>

   <!-- JMS XA Resource adapter, use this to get transacted JMS in beans -->
   <tx-connection-factory>
      <jndi-name>JmsXA</jndi-name>
      <xa-transaction/>
      <rar-name>jms-ra.rar</rar-name>
      <connection-definition>org.jboss.resource.adapter.jms.JmsConnectionFactory</connection-definition>
      <config-property name="SessionDefaultType" type="java.lang.String">javax.jms.Topic</config-property>
      <config-property name="JmsProviderAdapterJNDI" type="java.lang.String">java:/DefaultJMSProvider</config-property>
      <max-pool-size>20</max-pool-size>
      <security-domain-and-application>JmsXARealm</security-domain-and-application>
      <depends>jboss.messaging:service=ServerPeer</depends>
   </tx-connection-factory>

</connection-factories>

助けてください。

4

2 に答える 2

2

リスナーが再接続を試みなかった場合は、保留中のメッセージが失敗の原因である可能性があります。

于 2012-11-07T18:38:59.820 に答える
1

エラーによると、トランザクションROLLBACK呼び出しが失敗しました。障害の後、キュー マネージャーはこれらのメッセージを未処理の作業単位に保持していた可能性があります。サーバーを再起動すると接続が閉じられ、その時点でキュー マネージャーがアプリケーションに代わってトランザクションをロールバックします。再起動時に、アプリケーションは新しい UOW を作成し、メッセージを取得します。

WebSphere MQ のキュー・マネージャーのエラー・ログとグローバル・エラー・ログを調べて、リソース不足が原因でエラーが発生したかどうかを判別してください。キュー マネージャのトランザクション ログのサイズを大きくしたり、 などのトランザクション パラメータを調整したりする必要がある場合がありますMAXUOW

また、MQ クライアントのバージョンまたはキュー マネージャーのバージョンを更新する必要がある場合もあります。この Technoteによると、6.0.2.3 の時点で WebSphere MQ JMS クラスが更新され、MQJMS1023E エラーが発生するバグが修正されました。クライアント バージョンを更新する必要がある場合は、SupportPac MQC75として無料でダウンロードできます。新しいクライアントは、任意のバック レベルのキュー マネージャーで実行できます。アップグレード後、アプリは新しいクライアント コードのバグ修正とパフォーマンス強化の恩恵を受け、接続先のキュー マネージャーのバージョンに適した API 機能を提供します。現在インストールされている WebSphere MQ JMS クライアントのバージョンは? 現在インストールされている WebSphere MQ キュー マネージャーのバージョンは?

于 2012-11-07T12:53:00.240 に答える