Websphere Application Server 7.x 버전을 사용하고 있습니다.Websphere Application Server의 setMessageListener jms 메소드는 javax.jms.IllegalStateException을 생성합니다. setMessageListener 메소드가 허용되지 않습니다.
아래와 같이 JMS API를 사용하여 MQ에서 버퍼링 된 메시지를 읽으 려합니다. 내가 link1에서 언급 , link2
@Resource(lookup = "jms/ConnectionFactory")
private static ConnectionFactory connectionFactory;
@Resource(lookup = "jms/Queue")
private static Queue queue;
public void readMessagesFromQueue() {
try {
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer consumer = session.createConsumer(queue);
MyListener myListener = new MyListener();
consumer.setMessageListener(myListener); // Error here
connection.start();
} catch (JMSException e) {
throw new RuntimeException(e);
}
}
MyListener
클래스 :
public class MyListener implements MessageListener {
@Override
public void onMessage(Message message) {
try {
String text=((TextMessage)message).getText();
System.out.println(text);
}
catch (JMSException e) {
throw new RuntimeException(e);
}
}
}
나는 예외 무엇입니까 실행 시간 중 :
javax.jms.IllegalStateException: Method setMessageListener not permitted
내가 link 점에서 볼 수를 asyn의 메소드 setMessageListener
chronous 메시징을 사용하는 경우 WebSphere Application Server에서이 메소드를 사용하는 것이 금지됩니다.
질문 1 :
이 setMessageListener
방법은 WAS에서 사용할 수 없습니다?
그렇지 않은 경우 위의 필수 기능을 달성하기위한 해결 방법은 무엇입니까?
질문 2 :
내가 즉 필요성을 설명 할 수있다 :
은 JMS의 청취자가 즉시 메시지가 큐에 도착 메시지를 받아 봐하지 않아야합니다. 하지만 청취자는 내가 원하는 시간에만 듣기를 바랍니다.
나는 위에서 언급 한 접근법을 시도했다. 하지만 예외 때문에 차단되었습니다.
다른 방법으로이 작업을 수행 할 수 있습니까?
비동기 메시지는 다음 MDB를 만들 받으려면, 그렇지 않으면 메시지를 읽을 수 consumer.receive()'방법'전화 . – Gas
@Gas, MDB를 사용하여 비동기 적으로 메시지를받을 수 있습니다. 그러나 MDB를 언젠가는 비활성 상태로 만들어 언젠가는 활성화시켜야합니다. –