作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想通过 JMS 使用 Oracle Advanced 队列。
我已经通过 plsql 创建了队列表和队列,如下所示:
BEGIN
DBMS_AQADM.CREATE_QUEUE_TABLE(
queue_table => 'QT3',
queue_payload_type => 'RAW');
END;
/
BEGIN
DBMS_AQADM.CREATE_QUEUE(
queue_name => 'Q3',
queue_table => 'QT3');
END;
/
然后我尝试发送这样的消息:
System.setProperty("oracle.jms.traceLevel", "6");
ConnectionFactory connectionFactory = AQjmsFactory.getConnectionFactory("x.x.x.x", "xxx", 1521, "thin");
Connection connection = connectionFactory.createConnection("xxx", "xxx");
connection.start();
Session session = connection.createSession(true, 0);
Queue queue = session.createQueue("Q3");
MessageProducer producer = session.createProducer(queue);
TextMessage message = session.createTextMessage("valami");
message.setJMSType("text");
producer.send(message);
session.commit();
上面的代码找到了队列(如果我将 Q3 替换为其他内容,那么它会说找不到队列,所以我猜基本的连接设置没问题),但是我在 Producer.send 处遇到了 NPE 异常。我设置了 aqapi 跟踪并得到了以下输出:
main [Fri Jun 20 14:22:51 CEST 2014] AQjmsProducer.send-1: entry
main [Fri Jun 20 14:22:51 CEST 2014] AQjmsProducer.send-main: entry
main [Fri Jun 20 14:22:51 CEST 2014] AQjmsProducer.send: queue: RISKOPALL.Q3
main [Fri Jun 20 14:22:51 CEST 2014] AQjmsProducer.send: dest_queue: RISKOPALL.Q3
main [Fri Jun 20 14:22:51 CEST 2014] AQjmsProducer.jdbcEnqueue: entry
main [Fri Jun 20 14:22:51 CEST 2014] AQjmsProducer.checkMessageType: adt type: null
main [Fri Jun 20 14:22:51 CEST 2014] AQjmsProducer.checkMessageType: message_class: oracle.jms.AQjmsTextMessage
main [Fri Jun 20 14:22:51 CEST 2014] AQjmsProducer.jdbcEnqueue: exit
Exception in thread "main" java.lang.NullPointerException
at oracle.jms.AQjmsProducer.checkMessageType(AQjmsProducer.java:2362)
at oracle.jms.AQjmsProducer.jdbcEnqueue(AQjmsProducer.java:823)
at oracle.jms.AQjmsProducer.send(AQjmsProducer.java:747)
at oracle.jms.AQjmsProducer.send(AQjmsProducer.java:517)
at aqjms.AqJmsTest.main(AqJmsTest.java:55)
反编译aqapi.jar,发现AQjmsProducer.checkMessageType处“adtType”参数为null,导致抛出NPE。
这个 ADT 类型是什么?我该如何正确设置它?
非常感谢!
最佳答案
设置队列的负载类型解决了问题:
BEGIN
DBMS_AQADM.CREATE_QUEUE_TABLE(
queue_table => 'QT3',
queue_payload_type => 'SYS.AQ$_JMS_TEXT_MESSAGE',
compatible => '8.1.0');
END;
/
关于java - 通过 JMS 使用 Oracle 高级队列 : NPE thrown at AQjmsProducer. jdbcEnqueue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24327389/
我想通过 JMS 使用 Oracle Advanced 队列。 我已经通过 plsql 创建了队列表和队列,如下所示: BEGIN DBMS_AQADM.CREATE_QUEUE_TABLE( que
我是一名优秀的程序员,十分优秀!