JMSを初めて使用し、JdeveloperとWeblogic 12cで作業していますが、コードは正常ですが、Consumer onMessage()
メソッドはProducerからメッセージを受け取りません。私がonMessage()
を使用しなかったときに私はメッセージを得ることができますが。すべてのファイルを動作させる前に設定する必要がありますか?ここで JMSキュークライアントonMessage()が送信者からメッセージを受信していません
onMessage
メソッドが呼び出される前に、メインスレッドが終了しているため、問題がある疑いがあるメッセージコンシューマコード
package com.soap_jms;
import javax.jms.ExceptionListener;
import java.util.*;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.naming.Context;
import utils.system;
public class QueueConsume implements MessageListener, ExceptionListener{
private final static String JMS_FACTORY="jms/ThesisConnectionFactory";
private final static String QUEUE="jms/ThesisJMSQueue";
private static Connection mConnection;
private static ConnectionFactory mConnectionFactory;
private static Queue mQueue;
private static MessageConsumer mConsumer;
private static Session mSession;
public static void main (String [] args) throws JMSException, NamingException {
mConnection=null;
MessageListener listener = null;
System.out.println("Entering into JMS Queue Consumer........");
Context ctx = QueueConsume.getInitialContext();
mConnectionFactory=(javax.jms.ConnectionFactory)ctx.lookup(JMS_FACTORY);
mQueue=(javax.jms.Queue)ctx.lookup(QUEUE);
mConnection=mConnectionFactory.createConnection();
mSession=mConnection.createSession(false,Session.AUTO_ACKNOWLEDGE);
mConsumer=mSession.createConsumer(mQueue);
QueueConsume mConsume = new QueueConsume();
mConsumer.setMessageListener(mConsume);
mConnection.setExceptionListener(mConsume);
mConnection.start();
System.out.println("JMS is set to accept sent message.....");
System.out.println("Exiting from JMS Queue Consumer ........");
close();
} // closes main method
@SuppressWarnings("oracle.jdeveloper.java.insufficient-catch-block")
public void onMessage(Message message) {
try {
System.out.println("Message is " + ((TextMessage) message).getText());
} catch (JMSException e) {
}
}
@SuppressWarnings("oracle.jdeveloper.java.unchecked-conversion-or-cast")
public static Context getInitialContext() throws JMSException, NamingException {
Hashtable htb = new Hashtable();
htb.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
htb.put(Context.PROVIDER_URL,"t3://localhost:7101");
Context ctx= new InitialContext(htb);
return ctx;
}
public static void close() throws JMSException {
mSession.close();
mConnection.close();
mConsumer.close();
}
public void onException(JMSException exception)
{
System.err.println("an error occurred: " + exception);
}
}
onMessageメッセージリスナーをコンシューマに添付しましたか? – Shashi
はいシャーシ。私はそれを付けました。上記のコードを参照してください。ありがとう。 – TheGood