外部システム A および B のリモート JMS キューを操作しようとするアプリケーションを tomcat にデプロイしています。外部システムは Weblogic にデプロイされているため、それらと通信するために、wlthint3client も提供しています。
それが私のコードです:
public void myMethod () {
// Sending message to first ext system
// jndi queue name - topic1.extsys1.tosend.messages
magicMethod(Params of External system A);
// Sending message to second ext system
// jndi queue name - topic1.extsys2.tosend.messages
magicMethod(Params of External system B);
// AGAIN Sending message to FIRST ext system
// jndi queue name - topic1.extsys1.tosend.messages
magicMethod(Params of External system A);
}
private void magicMethod(String factoryName, String url, String connectionFactoryJNDI, String queueName) throws Exception {
javax.jms.QueueConnectionFactory queueConnectionFactory = null;
javax.jms.QueueSession queueSession = null;
javax.jms.Queue queue = null;
javax.jms.QueueSender queueSender = null;
javax.jms.QueueConnection queueConnection = null;
InitialContext ic = null;
try {
final Properties initialContextProperties = new Properties();
initialContextProperties.put(Context.INITIAL_CONTEXT_FACTORY, factoryName);
initialContextProperties.put(Context.PROVIDER_URL, url);
initialContextProperties.put(Context.SECURITY_PRINCIPAL, "");
initialContextProperties.put(Context.SECURITY_CREDENTIALS, "");
ic = new InitialContext(initialContextProperties);
queueConnectionFactory = (QueueConnectionFactory) ic.lookup(connectionFactoryJNDI);
queue = (javax.jms.Queue) ic.lookup(queueName);
} catch (NamingException e) {
System.out.println("Could not create JNDI context: " + e.getMessage());
}
try {
queueConnection = queueConnectionFactory.createQueueConnection();
queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
queueSender = queueSession.createSender(queue);
ObjectMessage objectMessage = queueSession.createObjectMessage("message");
queueSender.send(objectMessage);
} catch (JMSException e) {
System.out.println(e.getMessage());
} finally {
ic.close();
queueConnection.close();
queueSession.close();
queueSender.close();
}
}
外部システム A にメッセージを送信している場合 - すべて問題ありません。外部システム B にメッセージを送信しています - それでもメッセージは送信されますが、すべて問題ありません。
再試行時に外部システム A にメッセージを送信 - 失敗しています。
JNDI コンテキストを作成できませんでした: 'topic1.extsys1.tosend.messages' をルックアップしようとしているときに、サブコンテキスト 'extsys1' が見つかりませんでした。「トピック 1」を解決しました
だから私は理解しようとしています:
- 私は何を間違えましたか?
- 外部システム B への送信に成功した後、システム A にメッセージを送信しないのはなぜですか?
- これらの内部 Java オブジェクト (InitialContext、JNDI オブジェクトなど) はどこかに何らかの状態を持っていますか? 多分私はきれいなものが必要ですか?
- JNDI名がめちゃくちゃになったような気がします...
- 多分私は名前を変更する必要がありますか?(実際には、まったく異なる jndi キュー名を使用しようとしましたが、効果はありませんでしたが、外部システムを再起動しませんでした。必要かどうかはわかりません)。
移動するためのアイデア、指示はありますか??? お願いします
ps - jms サーバーと jms モジュールは、A と B の両方の外部システムで同じ名前を持っています。プロバイダーの URL は - ext1.xxx.corp.com
、ext2.xxx.corp.com