2

我在 Camel 2.10.4 路由中配置 JMS 事务。当我运行我的应用程序时,javax.persistence.TransactionRequiredException: no transaction in progress会抛出一个。从我的研究中,我发现当没有方法被标记时会抛出这个异常@Transactional。我的应用程序上下文 XML 配置文件中的相关部分如下所示:

<bean id="txMgr" class="org.springframework.jms.connection.JmsTransactionManager">
    <property name="connectionFactory" ref="pooledConnectionFactory" />
</bean>

<bean id="REQUIRED" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
    <property name="transactionManager" ref="txMgr" />
    <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED" />
</bean>

<bean id="pooledConnectionFactory" 
   class="org.apache.activemq.pool.PooledConnectionFactory" init-method="start" destroy-method="stop">
   <property name="maxConnections" value="8" />
   <property name="connectionFactory" ref="jmsConnectionFactory" />
</bean>

<bean id="jmsConnectionFactory" 
   class="org.apache.activemq.ActiveMQConnectionFactory">
   <property name="brokerURL" value="tcp://localhost:61616" />
</bean>

<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="configuration" ref="jmsConfig" />
</bean>

<bean id="jmsConfig" 
   class="org.apache.camel.component.jms.JmsConfiguration">
   <property name="connectionFactory" ref="pooledConnectionFactory"/>
   <property name="transacted" value="true" />
   <property name="transactionManager" ref="txMgr" />
   <property name="concurrentConsumers" value="3"/>
</bean>

除了 JMS 特定的配置,我还有 JPA 配置,如下所示:

<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
    <property name="transactionManager">
        <bean class="org.springframework.orm.jpa.JpaTransactionManager">
            <property name="entityManagerFactory" ref="entityManagerFactory" />
        </bean>
    </property>
</bean>

<bean id="jpaTemplate" class="org.springframework.orm.jpa.JpaTemplate">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="fileRecord" />
</bean>

如果我禁用事务,则配置有效。但是,当我启用它时,所有其他步骤都会成功,除了将数据插入数据库的位(在 JPA 端点)。

任何关于我需要更改或添加的建议将不胜感激。

4

0 回答 0