0

外部システム 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」を解決しました

だから私は理解しようとしています:

  1. 私は何を間違えましたか?
  2. 外部システム B への送信に成功した後、システム A にメッセージを送信しないのはなぜですか?
  3. これらの内部 Java オブジェクト (InitialContext、JNDI オブジェクトなど) はどこかに何らかの状態を持っていますか? 多分私はきれいなものが必要ですか?
  4. JNDI名がめちゃくちゃになったような気がします...
  5. 多分私は名前を変更する必要がありますか?(実際には、まったく異なる jndi キュー名を使用しようとしましたが、効果はありませんでしたが、外部システムを再起動しませんでした。必要かどうかはわかりません)。

移動するためのアイデア、指示はありますか??? お願いします

ps - jms サーバーと jms モジュールは、A と B の両方の外部システムで同じ名前を持っています。プロバイダーの URL は - ext1.xxx.corp.comext2.xxx.corp.com

4

2 に答える 2