Java springjms和oracleaq
有人使用SpringJMS来处理Oracle AQ队列吗 我正试图根据这篇文章连接到AQ 但我现在得到了这个错误 JMS-137:必须为具有ADT有效负载的目标指定有效负载工厂 非常感谢您的帮助 谢谢Java springjms和oracleaq,java,oracle,spring,Java,Oracle,Spring,有人使用SpringJMS来处理Oracle AQ队列吗 我正试图根据这篇文章连接到AQ 但我现在得到了这个错误 JMS-137:必须为具有ADT有效负载的目标指定有效负载工厂 非常感谢您的帮助 谢谢 Damien该错误向我表明它实际上正在工作,但您没有给它一个有效负载工厂来创建队列中的对象。当您创建接收器时,您可以执行此操作。在本例中,我的负载是XMLTYPE,所以我只使用它的负载工厂: queueReceiver = ((AQjmsSession) queueSession). cr
Damien该错误向我表明它实际上正在工作,但您没有给它一个有效负载工厂来创建队列中的对象。当您创建接收器时,您可以执行此操作。在本例中,我的负载是XMLTYPE,所以我只使用它的负载工厂:
queueReceiver = ((AQjmsSession) queueSession).
createReceiver(queue, XMLType.getORADataFactory());
当您想要对任何数据类型或用户定义的有效负载进行排队或解排队时,必须提供JDBC类型映射 在您发布的链接中,最好的位置是OracleQDestinationFactoryBean.getObject 在我的例子中,我想对XMLType的Oracle LCR进行解队列,因此我必须在getObject中执行以下操作
public Object getObject() throws Exception {
QueueConnection queueConnection = connectionFactory.createQueueConnection();
AQjmsSession session = (AQjmsSession) queueConnection.createQueueSession(true,
Session.SESSION_TRANSACTED);
Map map = session.getTypeMap();
map.put("SYS.XMLTYPE", Class.forName("oracle.xdb.XMLTypeFactory"));
return session.getQueue(queueUser, queueName);
}
记住,对于任何数据类型负载,都必须使用OCI JDBC驱动程序,因为瘦驱动程序不会这样做
有关自定义有效负载的更多信息,请点击此处
如果使用Spring,您可以这样解决: 在一个“无弹簧”的环境中,只需创建您自己的消息消费者,如上面博客文章所述