24.10. サードパーティー JMS プロバイダーを使用するよう汎用 JMS リソースアダプターを設定
サードパーティー JMS プロバイダーを使用するよう JBoss EAP 6 を設定できますが、すべての JMS プロバイダーが Java アプリケーションプラットフォームと統合するための JMS JCA リソースアダプターを作成するわけではありません。ここでは、JBoss EAP 6 に含まれる汎用 JMS リソースアダプターを設定して JMS プロバイダーに接続するための手順について取り上げます。この手順では、Tibco EMS 6.3 が JMS プロバイダーの例として使用されていますが、他の JMS プロバイダーを使用する場合は、必要な設定が異なる場合があります。
重要
この手順では、JMS プロバイダーサーバーは設定済みで、使用できる状態であることを前提としています。プロバイダーの JMS 実装に必要なバイナリーがすべて必要になります。また、以下の JMS プロバイダープロパティーの値を知っている必要があります。
- PROVIDER_HOST:PROVIDER_PORT: JMS プロバイダーサーバーのホスト名およびポート番号。
- PROVIDER_CONNECTION_FACTORY: JMS プロバイダーサーバーにデプロイされた接続ファクトリーの名前。XA である必要があります。
- PROVIDER_QUEUE、 PROVIDER_TOPIC: 使用される JMS プロバイダーサーバーのキューおよびトピックの名前。
手順24.10 汎用 JMS リソースアダプターの設定
- キューおよびトピックの JNDI バインディング向けに
ObjectFactory実装を作成します。- 以下のコードをテンプレートとして使用し、サーバーの詳細を実際の JMS プロバイダーサーバーの値に置き換えます。
import java.util.Hashtable; import java.util.Properties; public class RemoteJMSObjectFactory implements ObjectFactory { private Context context = null; public RemoteJMSObjectFactory() { } public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) throws Exception { try { String jndi = (String) obj; final Properties env = new Properties(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.tibco.tibjms.naming.TibjmsInitialContextFactory"); env.put(Context.URL_PKG_PREFIXES, "com.tibco.tibjms.naming"); env.put(Context.PROVIDER_URL, "tcp://TIBCO_HOST:TIBCO_PORT"); context = new InitialContext(env); Object o = context.lookup(jndi); return o; } catch (NamingException e) { e.printStackTrace(); throw e; } } } - 上記のコードをコンパイルし、結果となるクラスファイルを
remoteJMSObjectFactory.jarという名前の JAR ファイルに保存します。
- JBoss EAP 6 インスタンスの
genericjmsモジュールを作成します。EAP_HOME/modules/system/layers/base/org/jboss/genericjms/provider/mainというディレクトリー構造を作成します。remoteJMSObjectFactory.jarファイルをEAP_HOME/modules/system/layers/base/org/jboss/genericjms/provider/mainにコピーします。- プロバイダーの JMS 実装に必要なバイナリーを
EAP_HOME/modules/system/layers/base/org/jboss/genericjms/provider/mainにコピーします。Tibco EMS では、必要なバイナリーは Tibco インストールの/libディレクトリーにあるtibjms.jarおよびtibcrypt.jarになります。 - 下記のように
module.xmlファイルをEAP_HOME/modules/system/layers/base/org/jboss/genericjms/provider/mainに作成し、以前の手順の JAR ファイルをリソースとしてリストします。<module xmlns="urn:jboss:module:1.1" name="org.jboss.genericjms.provider"> <resources> <resource-root path="tibjms.jar"/> <resource-root path="tibcrypt.jar"/> <resource-root path="remoteJMSObjectFactory.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.jms.api"/> </dependencies> </module>
- グローバルモジュールとするすべてのデプロイメントに対し、汎用 JMS モジュールを依存関係として追加します。
注記
この手順では、EAP_HOME/standalone/configuration/standalone-full.xmlが JBoss EAP 6 設定ファイルとして使用されます。EAP_HOME/standalone/configuration/standalone-full.xmlにて、<subsystem xmlns="urn:jboss:domain:ee:1.1">の下に以下を追加します。<global-modules> <module name="org.jboss.genericjms.provider" slot="main"/> <module name="org.jboss.common-core" slot="main"/> </global-modules>
- デフォルトの HornetQ リソースアダプターを汎用リソースアダプターに置き換えます。
EAP_HOME/standalone/configuration/standalone-full.xmlの<subsystem xmlns="urn:jboss:domain:ejb3:1.4"> <mdb>を以下に置き換えます。<mdb> <resource-adapter-ref resource-adapter-name="org.jboss.genericjms"/> <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/> </mdb>
- 必要に応じて、JMS トピックおよびキューのバインディングをリモートオブジェクトとして追加します。
EAP_HOME/standalone/configuration/standalone-full.xmlにて、<subsystem xmlns="urn:jboss:domain:naming:1.3">の下にバインディングを追加し、必要に応じて PROVIDER_QUEUE および PROVIDER_TOPIC を置き換えます。<bindings> <object-factory name="PROVIDER_QUEUE" module="org.jboss.genericjms.provider" class="org.jboss.qa.RemoteJMSObjectFactory"/> <object-factory name="PROVIDER_TOPIC" module="org.jboss.genericjms.provider" class="org.jboss.qa.RemoteJMSObjectFactory"/> </bindings>
EAP_HOME/standalone/configuration/standalone-full.xmlにて、汎用リソースアダプターを<subsystem xmlns="urn:jboss:domain:resource-adapters:1.1">に追加します。PROVIDER_CONNECTION_FACTORY、PROVIDER_HOST、および PROVIDER_PORT を JMS プロバイダーの値に置き換えます。<resource-adapters> <resource-adapter id="org.jboss.genericjms"> <module slot="main" id="org.jboss.genericjms"/> <transaction-support>NoTransaction</transaction-support> <connection-definitions> <connection-definition class-name="org.jboss.resource.adapter.jms.JmsManagedConnectionFactory" jndi-name="java:/jms/PROVIDER_CONNECTION_FACTORY" pool-name="PROVIDER_CONNECTION_FACTORY"> <config-property name="JndiParameters"> java.naming.factory.initial=com.tibco.tibjms.naming.TibjmsInitialContextFactory;java.naming.provider.url=tcp://PROVIDER_HOST:PROVIDER_PORT </config-property> <config-property name="ConnectionFactory"> PROVIDER_CONNECTION_FACTORY </config-property> <security> <application/> </security> </connection-definition> </connection-definitions> </resource-adapter> </resource-adapters>
汎用 JMS リソースアダプターが設定され、使用できる状態になりました。
user および password プロパティーを指定して (必要に応じてプロパティーの値を置き換えます) Tibco EMS のセキュアな接続を設定することもできます。
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "jndiParameters", propertyValue = "java.naming.factory.initial=com.tibco.tibjms.naming.TibjmsInitialContextFactory;java.naming.provider.url=tcp://PROVIDER_HOST:PROVIDER_PORT")
@ActivationConfigProperty(propertyName = "destination", propertyValue = "PROVIDER_QUEUE"),
@ActivationConfigProperty(propertyName = "connectionFactory", propertyValue = "PROVIDER_CONNECTION_FACTORY"),
@ActivationConfigProperty(propertyName = "user", propertyValue = "USER"),
@ActivationConfigProperty(propertyName = "password", propertyValue = "PASSWORD"),
})
@ResourceAdapter("org.jboss.genericjms")
public class SampleMdb implements MessageListener {
@Override
public void onMessage(Message message) {
}
}
Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.