JMS 1.1 持久订阅 - 无法设置客户端 ID

JMS 1.1 durable subscription - can't set Client ID

我正在尝试使用 JMS 1.1 设置持久订阅,但我遇到了第 22 条军规:

我该如何解决这个问题?如何建立连接 'unused'? 或者 - 如异常消息所示 - 在使用连接之前如何设置 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 连接工厂,而不是来自应用程序服务器的池化连接工厂。