Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JMS和JDBC之间是否需要单独的事务管理器?_Java_Spring_Spring Jdbc_Spring Transactions_Spring Jms - Fatal编程技术网

Java JMS和JDBC之间是否需要单独的事务管理器?

Java JMS和JDBC之间是否需要单独的事务管理器?,java,spring,spring-jdbc,spring-transactions,spring-jms,Java,Spring,Spring Jdbc,Spring Transactions,Spring Jms,当JDBC事务中的错误导致将JMS消息返回队列时,我遇到了一个问题,我想是的。这意味着某些消息正在被再次处理 我的应用程序具有下一个配置: 我已将JtaTransactionManager配置为: 在我的例子中,当我收到JMS消息时,在我的代码逻辑中发生org.springframework.dao.DataIntegrityViolationException。我通过try-catch块处理异常,我希望一切都会好起来。但在这一次,正如我所看到的,消息返回到队列并再次被处理。如果在我的代码中发生

当JDBC事务中的错误导致将JMS消息返回队列时,我遇到了一个问题,我想是的。这意味着某些消息正在被再次处理

我的应用程序具有下一个配置:

  • 我已将JtaTransactionManager配置为:
  • 在我的例子中,当我收到JMS消息时,在我的代码逻辑中发生org.springframework.dao.DataIntegrityViolationException。我通过try-catch块处理异常,我希望一切都会好起来。但在这一次,正如我所看到的,消息返回到队列并再次被处理。如果在我的代码中发生其他异常,例如IllegalStateException/RuntimeException,则不会重现此行为

    我假设JDBC事务中的错误导致JMS事务中断,尽管我处理异常

    让我知道,我对JPA和JDBC使用一个事务管理器是否正确? 或者我需要为我的数据源和JMS DefaultMessageListenerContainer提供两种不同的实现

    而且,如果我能提供更多的信息,我会的


    谢谢

    创建异常的代码在哪里?您如何处理您的异常?您是如何配置JDBC和数据源的?您使用JDBC模板吗?创建异常的代码在哪里?您如何处理您的异常?您是如何配置JDBC和数据源的?您使用JDBC模板吗?
    ...
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                              http://www.springframework.org/schema/beans/spring-beans.xsd
                              http://www.springframework.org/schema/jee
                              http://www.springframework.org/schema/jee/spring-jee.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
    
        <tx:jta-transaction-manager/>
    ....
    
    @Bean
    public DefaultMessageListenerContainer jmsContainer(ConnectionFactory connectionFactory, PlatformTransactionManager transactionManager, ....) throws NamingException {
        DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.setSessionTransacted(true);
        container.setTransactionManager(transactionManager);
        ....
        return container;
    }