Oracle® Fusion Middleware Oracle WebLogic Server JMS プログラマーズ ガイド 11g リリース 1 (10.3.1) B55536-01 |
|
![]() 戻る |
![]() 次へ |
weblogic.jms.extensions.JMSModuleHelper
クラスには、JMS サーバ、ストア アンド フォワード エージェント、および JMS システム リソースをプログラム的に作成および管理するために使用する API が含まれています。
JMSModuleHelper
は、システム モジュールや JMS リソース (キュー、トピックなど) の管理に使用する以下の API シグネチャを提供します。
リソースの作成
リソースの作成と変更
リソースの削除
リソースの検索と変更
テンプレートを使用した検索
システム モジュールとそれに含まれる JMS リソースを管理するには、ドメイン MBean を提供するか、API シグネチャ内の管理サーバに初期コンテキストを提供します。JMS システム リソースの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server JMS のコンフィグレーションと管理』の「基本 JMS システム リソースのコンフィグレーション」を参照してください。
JMSModuleHelper
は、JMS サーバとストア アンド フォワード エージェントの管理に使用する以下のメソッド API を提供します。
JMS サーバとストア アンド フォワード エージェントの作成
JMS サーバとストア アンド フォワード エージェントの削除
JMS サーバとストア アンド フォワード エージェントのデプロイメント
JMS サーバとストア アンド フォワード エージェントのアンデプロイメント
JMS サーバとストア アンド フォワード エージェントを管理するには、ドメイン MBean を提供するか、API シグネチャ内の管理サーバに初期コンテキストを提供します。詳細については、以下を参照してください。
『Oracle Fusion Middleware Oracle WebLogic Server JMS のコンフィグレーションと管理』の「基本 JMS システム リソースのコンフィグレーション」
『Oracle Fusion Middleware Oracle WebLogic Server ストア アンド フォワードのコンフィグレーションと管理』の「ストア アンド フォワード サービスについて」
この節では、JMS システム リソース モジュールを作成および削除するサンプル コードを示します。
このモジュールには、接続ファクトリとトピックが含まれています。
コード リスト 6-1 JMS システム リソースの作成
. . . private static void createJMSUsingJMSModuleHelper(Context ctx){ System.out.println( "\n\n.... Configure JMS Resource for C API Topic Example ....\n\n"); try { MBeanHome mbeanHome = (MBeanHome) ctx.lookup(MBeanHome.ADMIN_JNDI_NAME); DomainMBean domainMBean = mbeanHome.getActiveDomain(); String domainMBeanName = domainMBean.getName(); ServerMBean[] servers = domainMBean.getServers(); String jmsServerName = "examplesJMSServer"; // // JMSSystemResource "CapiTopic-jms" の作成 // String resourceName = "CapiTopic-jms"; JMSModuleHelper.createJMSSystemResource( ctx, resourceName, servers[0].getName()); JMSSystemResourceMBean jmsSR = JMSModuleHelper.findJMSSystemResource( ctx, resourceName); JMSBean jmsBean = jmsSR.getJMSResource(); System.out.println("Created JMSSystemResource " + resourceName); // // JMSConnectionFactory "CConFac" の作成 // String factoryName = "CConFac"; String jndiName = "CConFac"; JMSModuleHelper.createConnectionFactory( ctx, resourceName, factoryName, jndiName, servers[0].getName()); JMSConnectionFactoryBean factory = jmsBean.lookupConnectionFactory(factoryName); System.out.println("Created Factory " + factory.getName()); // // トピック "CTopic" の作成 // String topicName = "CTopic"; String topicjndiName = "CTopic"; JMSModuleHelper.createTopic( ctx, resourceName, jmsServerName, topicName, topicjndiName); TopicBean topic = jmsBean.lookupTopic(topicName); System.out.println("Created Topic " + topic.getName()); } catch (Exception e) { System.out.println("Example configuration failed :" + e.getMessage()); e.printStackTrace(); } } . . .
次のコードは、JMS システム リソースを削除します。
コード リスト 6-2 JMS システム リソースの削除
. . . private static void deleteJMSUsingJMSModuleHelper(Context ctx ) { System.out.println("\n\n.... Remove JMS System Resource for C API Topic Example ....\n\n"); try { MBeanHome mbeanHome = (MBeanHome) ctx.lookup(MBeanHome.ADMIN_JNDI_NAME); DomainMBean domainMBean = mbeanHome.getActiveDomain(); String domainMBeanName = domainMBean.getName(); ServerMBean[] servers = domainMBean.getServers(); String jmsServerName = "examplesJMSServer"; // // JMSSystemResource "CapiTopic-jms" の削除 // String resourceName = "CapiTopic-jms"; JMSModuleHelper.deleteJMSSystemResource( ctx, resourceName ); } catch (Exception e) { System.out.println("Example configuration failed :" + e.getMessage()); e.printStackTrace(); } } . . .
この節では、JMSModuleHelper を使用して JMS サーバおよびリソースをコンフィグレーションするときのベスト プラクティスを示します。
MBean オブジェクトを操作する前に、Null MBean オブジェクト (サーバ、JMS サーバ、モジュールなど) をトラップする。
メソッド呼び出しの作成または削除は、例外を送出せずに失敗する可能性がある。また、例外が送出されても、それが必ずしもメソッド呼び出しの失敗を示しているとは限りません。
JMS サーバでの送り先の作成と JNDI ネームスペースへの情報の伝播には、時間がかかる場合がある。複数のサーバを使用している環境では、伝播の遅延が増大します。JNDI ルックアップを実行するよりも、createQueue()
メソッドまたは createTopic()
メソッドを使用して、それぞれキューまたはトピックの存在をテストすることをお勧めします。この方法によって、伝播固有の遅延を、ある程度回避できます。
たとえば、次に示す findQueue()
メソッドは、動的に作成されたキューにアクセスしようとしますが、アクセスに失敗すると再試行まで、指定された間隔スリープします。無限ループを回避するために、再試行の最大回数が設定されています。
private static Queue findQueue ( QueueSession queueSession, String jmsServerName, String queueName, int retryCount, long retryInterval ) throws JMSException { String wlsQueueName = jmsServerName + "/" + queueName; String command = "QueueSession.createQueue(" + wlsQueueName + ")"; long startTimeMillis = System.currentTimeMillis(); for (int i=retryCount; i>=0; i--) { try { System.out.println("Trying " + command); Queue queue = queueSession.createQueue(wlsQueueName); System.out.println(command + "succeeded after " + (retryCount - i + 1) + " tries in " + (System.currentTimeMillis() - startTimeMillis) + " millis."); return queue; } catch (JMSException je) { if (retryCount == 0) throw je; } try { System.out.println(command + "> failed, pausing " + retryInterval + " millis."); Thread.sleep(retryInterval); } catch (InterruptedException ignore) {} } throw new JMSException("out of retries"); }
この場合、JMSModuleHelper
クラス メソッドの後に findQueue()
メソッドを呼び出すことで、動的に作成されたキューを使用可能になり次第、取り出すことができます。次に例を示します。
JMSModuleHelper.createPermanentQueueAsync(ctx, domain, jmsServerName, queueName, jndiName); Queue queue = findQueue(qsess, jmsServerName, queueName, retry_count, retry_interval);