我需要管理应用程序中的多个资源,例如jms和数据库。在查看可以管理多个资源的事务管理器时,我发现有两种事务管理器:JtaTransactionManager和ChainedTransactionManager,它们几乎声称可以管理多个资源。有人能解释一下它们之间的主要区别吗?我应该在什么情况下使用哪个?
这意味着您可以通过向其传递多个transactionmanager来创建ChainedTransactionManager。如果一个transaction manager发生异常,那么将以相反的顺序生成所有transaction managers的回滚。 JtaTransactionManager doc:这是一个PlatformTransactionManager实现,它将事务的创建、提交和回滚委托给一系列的代理。使用此实现需要假定导致事务回滚的错误通常发生在事务完成之前或在最内部PlatformTransactionManager的提交期间。 配置的实例将按给定的顺序启动事务,并以相反的顺序提交/回滚,这意味着最有可能破坏事务的PlatformTransactionManager应该是配置列表中的最后一个。在提交期间抛出异常的PlatformTransactionManager会自动导致其余的事务管理器回滚而不是提交。
您可以使用此transaction manager来管理多个资源的分布式事务。这是一个用于JTA的PlatformTransactionManager实现,委托给后端的JTA提供程序。这通常用于委托给Java EE服务器的事务协调器,但也可以配置一个嵌入在应用程序中的本地JTA提供程序。 此事务管理器适用于处理分布式事务,即跨多个资源的事务,并且通常用于控制应用程序服务器资源(例如,在JNDI中可用的JDBC数据源)。对于单个JDBC数据源,DataSourceTransactionManager是完全足够的,而对于使用Hibernate访问单个资源(包括事务性缓存),例如HibernateTransactionManager是适当的。