![]() ![]() ![]() ![]() |
weblogic.jms.extensions.JMSModuleHelper クラスには、JMS サーバ、ストア アンド フォワード エージェント、および JMS システム リソースをプログラム的に作成および管理するために使用する API が含まれています。
JMSModuleHelper は、システム モジュールや JMS リソース (キュー、トピックなど) の管理に使用する以下の API シグネチャを提供します。
システム モジュールとそれに含まれる JMS リソースを管理するには、ドメイン MBean を提供するか、API シグネチャ内の管理サーバに初期コンテキストを提供します。JMS システム リソースの詳細については、『WebLogic JMS のコンフィグレーションと管理』の「基本 JMS システム リソースのコンフィグレーション」を参照してください。
JMSModuleHelper は、JMS サーバとストア アンド フォワード エージェントの管理に使用する以下のメソッド API を提供します。
JMS サーバとストア アンド フォワード エージェントを管理するには、ドメイン MBean を提供するか、API シグネチャ内の管理サーバに初期コンテキストを提供します。詳細については、以下を参照してください。
この節では、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();
}
}
.
.
.
.
.
.
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 サーバおよびリソースをコンフィグレーションするときのベスト プラクティスを示します。
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);
![]() ![]() ![]() |