gpt4 book ai didi

java - 将 JMS TopicSession 转换为 AQjmsSession 时遇到问题

转载 作者:行者123 更新时间:2023-11-30 06:38:26 25 4
gpt4 key购买 nike

我正在尝试使用 TopicBrowser 浏览主题中的消息。要调用将返回 TopicBrowser 对象的正确 createBrowser 方法,我需要将 topicSession 变量转换为 AQjmsSession .

private InitialContext initialContext;
private TopicConnection topicConnection;
private TopicSession topicSession;
private Topic topic;

private TopicConnectionFactory topicFactory;

private TextMessage message;

private void initTopic(Context context, String topicName) throws NamingException, JMSException {
System.out.println("initializing the queue...");
topicFactory = (TopicConnectionFactory) context.lookup(JMS_FACTORY);
topicConnection = topicFactory.createTopicConnection();

//queueConnection.setExceptionListener(this);
topicSession = topicConnection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
System.out.println("session created, lookup queue: " + topicName);

topic = (Topic)context.lookup(topicName);
System.out.println("done...");
}

private void readTopicMessage() throws JMSException {
int counter = 0;
System.out.println("Starting the subscriber");
TopicBrowser topicBrowser = ((AQjmsSession) topicSession).createBrowser(topic, SUBSCRIBER);
Enumeration msgs = topicBrowser.getEnumeration();
//topicConnection.start();
System.out.println("Topic started\n");
if (!msgs.hasMoreElements()) {
System.out.println("No messages in topic");
} else {
while (msgs.hasMoreElements()) {
System.out.println(">>> message count: " + ++counter);

Message message = (Message) msgs.nextElement();
System.out.println("MessageID: " + message.getJMSMessageID() + "\tPriority: " + message.getJMSPriority() + "\tDeliveryMode: " + message.getJMSDeliveryMode());
System.out.println("Timestamp: " + message.getJMSTimestamp() + "\tJMSDestination: " + message.getJMSDestination() + "\tReplyTo: " + message.getJMSReplyTo());
if (message instanceof TextMessage)
System.out.println("Data: " + ((TextMessage) message).getText());

System.out.println("\n");

if (counter >= 5) break;
}
}

System.out.println("stopping the topic");
topicConnection.stop();
}

尝试进行此转换会出现此错误:

java.lang.ClassCastException: weblogic.jms.client.WLSessionImpl cannot be cast to oracle.jms.AQjmsSession

最佳答案

您无法将其转换为该类型,因为您的应用程序使用的客户端不是来自您认为的提供者。根据异常,TopicSession 是 WebLogic JMS 客户端提供的类型,因此强制转换注定会失败。您应该查看您的 JNDI 配置,看看它是否按照您认为的配置方式进行配置。

您的 JNDI 属性告诉代码从何处创建 ConnectionFactory,这将为您提供 WebLogic 客户端位,您似乎需要 Oracle AQ 位,因此在 JNDI 步骤中查找的 ConnectionFactory 需要是 Oracle 的。

关于java - 将 JMS TopicSession 转换为 AQjmsSession 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44834908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com