ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server JMSアプリケーションの開発
12c (12.1.2)
E48081-02
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

7 JMSモジュール・ヘルパーを使用したアプリケーションの管理

この章では、weblogic.jms.extensions.JMSModuleHelperを使用して、JMSサーバー、ストア・アンド・フォワード・エージェントおよびJMSシステム・リソースをプログラム的に作成および管理する方法について説明します。

JMSModuleHelperを使用したJMSシステム・リソースの構成

JMSModuleHelperは、システム・モジュールやJMSリソース(キュー、トピックなど)の管理に使用する以下のAPIシグネチャを提供します。

システム・モジュールとそれに含まれるJMSリソースを管理するには、ドメインMBeanを提供するか、API署名内の管理サーバーに初期コンテキストを提供します。JMSシステム・リソースの詳細は、Oracle WebLogic Server管理コンソール・オンライン・ヘルプの基本JMSシステム・リソースの構成に関する項を参照してください。

JMSサーバーとストア・アンド・フォワード・エージェントの構成

JMSModuleHelperは、JMSサーバーとストア・アンド・フォワード・エージェントの管理に使用する以下のメソッドAPIを提供します。

JMSサーバーとストア・アンド・フォワード・エージェントを管理するには、ドメインMBeanを提供するか、APIシグネチャ内の管理サーバーに初期コンテキストを提供します。詳細については、以下を参照してください。

JMSModuleHelperのサンプル・コード

この節では、JMSシステム・リソース・モジュールを作成および削除するサンプル・コードを示します。

JMSシステム・リソースの作成

このモジュールには、接続ファクトリとトピックが含まれています。

例7-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";

//
// create a 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);

//
// create a 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());

//
// create a topic "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システム・リソースの削除

次のコードは、JMSシステム・リソースを削除します。

例7-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";

//
// delete JMSSystemResource "CapiTopic-jms"
//
     String resourceName = "CapiTopic-jms";
     JMSModuleHelper.deleteJMSSystemResource(
        ctx,
        resourceName
         );
     } catch (Exception e) {
        System.out.println("Example configuration failed :" + e.getMessage());
        e.printStackTrace();
     } 
}
.
.
.

匿名ユーザーのセキュリティの考慮事項

WebLogic Server 10.3.6以降では、JMSModuleHelperは、既存のWebLogicセキュリティ・モデルに準拠する匿名のルックアップ(-Dweblogic.management.anonymousAdminLookupEnabled=trueを使用)をサポートしません。

アプリケーション環境が匿名ユーザーの使用に依存している場合、匿名用のセキュリティ・ロールを作成し、そのロールのユーザーによるアクセスを許可するポリシーをJNDIリソースweblogic.management.mbeanserversに適用できます。『Oracle WebLogic Server JMXによるカスタム管理ユーティリティの開発』のWebLogic Server MBeanのセキュリティに関する項を参照してください。

JMSModuleHelper使用時のベスト・プラクティス

この節では、JMSModuleHelperを使用してJMSサーバーおよびリソースを構成するときのベスト・プラクティスを示します。

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);