2

私は ActiveMq 5.4.3 を使用しており、キューを使用しています。私はプロデューサーをWebサービス(Ejbではありません)として持っており、jbossサーバーにWebサービス戦争を展開しました。私のサービスはうまくいきます。ただし、サービスが接続を呼び出すたびに、セッションが作成されて閉じられます。サーバーの起動時に接続とセッションが一度だけ作成されるように、このボトルネックを克服したいと考えています。これどうやってするの。jboss を mdb コンテナーとして機能させたくありません。jboss の deploy フォルダー内に activemq-rar をデプロイし、以下のサブシステムを standalone.xml に追加しました。

<subsystem xmlns="urn:jboss:domain:resource-adapters:1.0">
        <resource-adapters>
            <resource-adapter>
                <archive>
                    activemq-ra.rar
                </archive>
                <transaction-support>XATransaction</transaction-support>
                <connection-definitions>
                    <connection-definition class-name="org.apache.activemq.ra.ActiveMQManagedConnectionFactory" jndi-name="java:jboss/activemq/QueueConnectionFactory" enabled="true" use-java-context="true" pool-name="QueueConnectionFactory" use-ccm="true">
                        <config-property name="prefill">
                            false
                        </config-property>
                        <config-property name="max-pool-size">
                            20
                        </config-property>
                        <config-property name="ServerUrl">
                            tcp://localhost
                        </config-property>
                        <config-property name="use-strict-min">
                            false
                        </config-property>
                        <config-property name="min-pool-size">
                            5
                        </config-property>
                    </connection-definition>
                </connection-definitions>
                <admin-objects>
                    <admin-object class-name="org.apache.activemq.command.ActiveMQQueue" jndi-name="activemq/queue/outbound" enabled="true" use-java-context="true" pool-name="outbound">
                        <config-property name="Type">
                            javax.jms.Queue
                        </config-property>
                        <config-property name="Properties">
                            PhysicalName=queue.outbound
                        </config-property>
                    </admin-object>
                    <admin-object class-name="org.apache.activemq.command.ActiveMQTopic" jndi-name="activemq/topic/inbound" enabled="true" use-java-context="true" pool-name="inbound">
                        <config-property name="Type">
                            javax.jms.Topic
                        </config-property>
                        <config-property name="Properties">
                            PhysicalName=topic.inbound
                        </config-property>
                    </admin-object>
                </admin-objects>
            </resource-adapter>
        </resource-adapters>
    </subsystem>

JNDIを使用して接続(以下のコード)を取得しようとすると PooledConnectionFactory connectionFactory = (PooledConnectionFactory) context.lookupLink("java:jboss/activemq/QueueConnectionFactory");

次のようなエラーが表示されます

javax.naming.NameNotFoundException: org.apache.activemq.ra.ActiveMQManagedConnectionFactory -- service jboss.naming.context.java."org.apache.activemq.ra.ActiveMQManagedConnectionFactory 
4

1 に答える 1

0

簡単です。PooledConnectionFactory を使用してください。

コードでそれを行うことができます。おそらく、手元にある任意の XML 構成でも行うことができます。

ConnectionFactory cf = new PooledConnectionFactory(new ActiveMQConnectionFactory("tcp://localhost:61616"));

XML の使用例を次に示します (春用ですが、そこからアイデアを得ることができます)

その後は、他のコネクション ファクトリと同じです。

Connection conn = cf.createConnection();
Session sess = conn.createSession..

チャッシングに関する ActiveMQ の側面 (主に春関連)

于 2012-08-07T13:53:05.170 に答える