Java ADT有效负载的JmsTemplate.receiveAndConvert()问题
我正在尝试使用Spring的JmsTemplate从队列同步接收消息。我的设置非常简单,并且基于文章。无论何时调用receiveAndConvert(),我都会收到以下错误: JMS-137:必须为具有ADT的目标指定有效负载工厂 有效载荷 我知道这与将有效负载转换为对象实例的过程有关。然而,正如您可以在下面检查的,我已经设置了弹簧基准转换器。另外,使用相同的设置发送消息也可以正常工作。 配置:Java ADT有效负载的JmsTemplate.receiveAndConvert()问题,java,spring,Java,Spring,我正在尝试使用Spring的JmsTemplate从队列同步接收消息。我的设置非常简单,并且基于文章。无论何时调用receiveAndConvert(),我都会收到以下错误: JMS-137:必须为具有ADT的目标指定有效负载工厂 有效载荷 我知道这与将有效负载转换为对象实例的过程有关。然而,正如您可以在下面检查的,我已经设置了弹簧基准转换器。另外,使用相同的设置发送消息也可以正常工作。 配置: <beans xmlns="http://www.springframework.org/sc
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:lang="http://www.springframework.org/schema/lang" xmlns:orcl="http://www.springframework.org/schema/data/orcl"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/lang
http://www.springframework.org/schema/lang/spring-lang.xsd
http://www.springframework.org/schema/batch
http://www.springframework.org/schema/batch/spring-batch.xsd
http://www.springframework.org/schema/data/orcl
http://www.springframework.org/schema/data/orcl/spring-data-orcl-1.0.xsd">
<!-- This job processes transactions in the pending queue and create entries
in the processed transactions table. -->
<!-- Enables communicating with the database -->
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>database.properties</value>
</property>
</bean>
<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource"
destroy-method="close">
<property name="URL" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="connectionCachingEnabled" value="true" />
</bean>
<!-- Basic Spring Batch classes -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="jobRepository"
class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
<property name="transactionManager" ref="transactionManager" />
</bean>
<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
</bean>
<!-- Beans used by the job -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg index="0" ref="dataSource" />
</bean>
<!-- Connection Factory used by the JmsTemplate -->
<orcl:aq-jms-connection-factory id="connectionFactory"
data-source="dataSource" use-local-data-source-transaction="true" />
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="sessionTransacted" value="true" />
<property name="connectionFactory" ref="connectionFactory" />
<property name="defaultDestinationName" value="SPRINGBATCH.PENDING_TRAN_ITEM_QUEUE" />
<property name="receiveTimeout" value="100"/>
<property name="messageConverter">
<bean
class="org.springframework.data.jdbc.jms.support.converter.oracle.MappingAdtMessageConverter">
<constructor-arg>
<bean
class="org.springframework.data.jdbc.jms.support.oracle.StructDatumMapper">
<constructor-arg index="0"
value="SPRINGBATCH.PENDING_TRANSACTION_ITEM" />
<constructor-arg index="1"
value="com.sbe.jobs.createPendingTransactionsAndLoadQueue.PendingTransactionKey" />
</bean>
</constructor-arg>
</bean>
</property>
</bean>
数据库.properties
我最终发现了问题所在。似乎JmsTemplate
不支持ADT类型,因此:
自定义高级数据类型(ADT)(创建类型xxx作为对象):
这个
负载类型需要一个名为
AdtMessageListenerContainer。此侦听器容器还可以使用
带有Oracle AQ ADT特定消息转换器的MessageListenerAdapter
指定为MappingAdtMessageConverter。此转换器与
DatumMapper接口的实现。有关详细信息,请参见下文
配置详细信息
您可以发布完整的堆栈跟踪和引发异常的代码吗?