如何解决JMS 1.1持久订阅-无法设置客户端ID
我正在尝试使用JMS 1.1设置持久订阅,但我遇到了Catch 22:
- 如果未设置clientID,则会收到“ clientID不能为空”错误...
- 如果我尝试设置它,则会得到: com.ibm.msg.client.jms.DetailedIllegalStateException:JMSCC3031:使用连接后无法设置客户机ID。 连接的客户端ID只能设置一次,并且只能在使用连接之前设置。 使用连接之前,请设置客户端ID。
我该如何解决?如何使连接“未使用”? 或者-如异常消息所示-在使用连接之前如何设置ID?
我的代码段:
public class BbsListener implements MessageListener {
...
public BbsListener(BbsListenerConfig config) {
try {
Context context = new InitialContext();
TopicConnectionFactory topicConnectionFactory = (TopicConnectionFactory) context.lookup(config.getConnectionFactoryName());
TopicConnection topicConnection = topicConnectionFactory.createTopicConnection();
topicConnection.setClientID("ID");
TopicSession topicSession = topicConnection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);
Topic topic = (Topic) context.lookup(config.getTopicName());
topicSubscriber = topicSession.createDurableSubscriber(topic,"EAMPtestSubscriber");
topicSubscriber.setMessageListener(this);
topicConnection.start();
}
...
谢谢
解决方法
您的应用程序似乎在Java EE应用程序服务器上运行。如果是这种情况,您需要注意使用哪种连接工厂以及在何处调用setMessageListener()
。首先,“出站”连接工厂将用于发送消息(因此名称为“出站”)。这是JCA的一部分。其次,您不能在EJB中调用setMessageListener()
,这是规范不允许的。我建议您只使用普通的JMS连接工厂,而不要使用来自应用程序服务器的共享工厂。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。