2

使用される技術。

  • アクティブMQ 5.5.1
  • グラスフィッシュ 3.1
  • ジェネリック 2.1

私がいる場所;

  • ActiveMQ をインストールして実行しています
  • genericra が構成され、Glassfish で動作しています。コネクタ リソース (amqRes)、コネクタ接続プール (amqPool)、および管理オブジェクト リソース (amqQueue) を構成しました。ジェネリックをデプロイし、リソース アダプター構成を構成しました。
  • Glassfish で実行されているアプリから、activeMQ キューにメッセージを投稿できます。投稿すると、activeMQ 管理コンソールのキューに新しいエントリが表示されます。

他の JMS キュー (glassfish 内) を使用していますが、うまく機能します。

私が抱えている問題は、activeMQ からキューからメッセージを取得することです。javax.jms.MessageListener を実装するテスト @MessageDriven Bean を作成しました。メッセージを出力するだけの単純なメソッド (onMessage) が 1 つあります。MDB を登録して、activeMQ キューからメッセージを取得する方法がわかりません。ejb-jar.xml、glassfish-ejb-jar.xml、または sun-ejb-jar.xml にエントリを配置する例をかなり見てきましたが、どれもうまくいきませんでした。activeMQ コンソールを見ると、作成したキューのコンシューマーが表示されません。

私は多くのブログを読みましたが、ジグソーパズルのこの最後のピースが欠けているようです.

import javax.ejb.MessageDriven;
import javax.jms.Message;

@MessageDriven(mappedName = "amqQueue")
public class ActiveMQTestListener implements javax.jms.MessageListener {
    public void onMessage(Message message) {
        System.out.println(message.toString());
    }
}
4

1 に答える 1

4

OK、たくさん遊んだ後、動作するようになりました。アクティブ mq からメッセージを受信するために、コネクタ リソース、接続プール、または管理オブジェクト リソースを作成する必要はありません。

要約すると、コネクタ genericra.rar (名前を genericRA に変更) を Glassfish http://java.net/downloads/genericjmsra/v2.1a/binaries/にデプロイしました。http://activemq.apache.org/sjsas-with-genericjmsra.htmlの設定を使用して、リソース アダプタの構成を構成しました(以下にコピー - 例に合わせてわずかに変更されています)。グラスフィッシュで手動で詳細を入力しました。

asadmin create-resource-adapter-config
  --property
  SupportsXA=true
  :RMPolicy=OnePerPhysicalConnection
  :ProviderIntegrationMode=javabean
  :ConnectionFactoryClassName=org.apache.activemq.ActiveMQConnectionFactory
  :QueueConnectionFactoryClassName=org.apache.activemq.ActiveMQConnectionFactory
  :TopicConnectionFactoryClassName=org.apache.activemq.ActiveMQConnectionFactory
  :XAConnectionFactoryClassName=org.apache.activemq.ActiveMQXAConnectionFactory
  :XAQueueConnectionFactoryClassName=org.apache.activemq.ActiveMQXAConnectionFactory
  :XATopicConnectionFactoryClassName=org.apache.activemq.ActiveMQXAConnectionFactory
  :UnifiedDestinationClassName=org.apache.activemq.command.ActiveMQDestination
  :QueueClassName=org.apache.activemq.command.ActiveMQQueue
  :TopicClassName=org.apache.activemq.command.ActiveMQTopic
  :ConnectionFactoryProperties=brokerURL\\=tcp\\://127.0.0.1\\:61616
  :LogLevel=FINE
  genericRA

Glassfish から送信することを希望する場合、管理オブジェクト リソースが jndi リスト (./asadmin list-jndi-entries) に表示されていないことがわかりました。管理オブジェクト リソースが無効になっていることがわかりました。domain.xml を編集して、enabled = true に設定する必要がありました。

私のテスト メッセージ駆動型 Bean。

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.Message;
import javax.jms.MessageListener;

@MessageDriven(activationConfig =  {
    @ActivationConfigProperty(propertyName = "destinationType",propertyValue = "javax.jms.Queue"),
    @ActivationConfigProperty(propertyName = "destinationProperties",propertyValue = "PhysicalName=amqQueue")
})
public class ActiveMQTestListener implements MessageListener {
    public void onMessage(Message message) {
        System.out.println(message.toString());
    }
}

私のglassfish-ejb-jar.xml;

<glassfish-ejb-jar>
    <enterprise-beans>
        <ejb>
            <ejb-name>ActiveMQTestListener</ejb-name>
            <mdb-resource-adapter>
                <resource-adapter-mid>genericRA</resource-adapter-mid>
            </mdb-resource-adapter>
        </ejb>
    </enterprise-beans>
</glassfish-ejb-jar>

activeMQ、glassfish を (メッセージが表示されるようにデバッグ モードで) 起動し、コンソール (http://localhost:8161/admin) を起動しました。amqQueue という新しいキューを作成しました。新しいメッセージを作成し (activeMQ コンソールで送信)、送信先を amqQueue に設定し、メッセージ本文にテキストを入力しました。送信をクリックすると、コードでブレークポイントがトリガーされました。

于 2011-10-25T10:53:51.617 に答える