- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找一种通过 Spring/JTA 将两个数据源的 CRUD 放入一个事务中的方法,但有以下问题:
数据源
由org.apache.commons.dbcp.BasicDataSource
而不是JNDI组成可以吗?启动 JtaTransactionManager 有两个参数:
public JtaTransactionManager(UserTransaction userTransaction,
TransactionManager transactionManager)
来自Spring document :
userTransaction - the JTA UserTransaction to use as direct reference
transactionManager - the JTA TransactionManager to use as direct reference
如果我有一个数据源 DS_A
和另一个数据源 DS_B
,两者都需要在同一个事务管理器中,那么哪个应该是 UserTransaction
以及如何定义 TransactionManager
,因为我只是创建 JtaTransactionManager,这是否意味着另一个 JtaTransactionManager?而且看起来这两个参数都不是必需的,因此 JtaTransactionManager 如何检测它们:
<context:annotation-driven/>
<tx:jta-transaction-manager/>
如果应用程序上下文中的所有内容都定义良好,那么如果有两个数据源,则应在 @Transactional
注释中引用哪个事务管理器 Bean?
最佳答案
- Is it ok that the datasource is is made oforg.apache.commons.dbcp.BasicDataSource instead of JNDI?
JNDI只是访问数据源的一种方式。要跨数据库进行分布式事务,您需要使用事务数据源。例如microsoft sql server jdbc 驱动程序有一个事务数据源 - com.microsoft.sqlserver.jdbc.SQLServerXADataSource
。
- If I have a datasource DS_A and another datasource DS_B, which both requires within the same transaction manager, then which should be the UserTransaction and how to define the TransactionManager, as I am just creating the JtaTransactionManager, does it mean another JtaTransactionManager?
JtaTransactionManager 是 JTA 的实现,委托(delegate)给后端 JTA 提供者。因此,您需要一个实现分布式事务的 JTA 提供程序。 Bitronix就是这样的 JTA 提供商之一。需要进行各种配置
a. hibernate 属性
<prop key="hibernate.transaction.factory_class">
<prop key="hibernate.transaction.manager_lookup_class">
<property name="useTransactionAwareDataSource" value="true"/>
b.定义事务管理器和用户事务bean
<bean id="BitronixTransactionManager" factory-method="getTransactionManager"
class="bitronix.tm.TransactionManagerServices" depends-on="bitronixConfiguration"
destroy-method="shutdown">
</bean>
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager" ref="BitronixTransactionManager"/>
<property name="userTransaction" ref="BitronixTransactionManager"/>
<property name="allowCustomIsolationLevels" value="true"/>
</bean>
c.事务拦截器和注释支持
<bean id="annotationTransactionSource"
class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/>
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref local="transactionManager"/>
</property>
<property name="transactionAttributeSource">
<ref local="annotationTransactionSource"/>
</property>
</bean>
Spring 3.1还引入了@EnableTransactionManagement
注释,因此另一种配置方式是
@Configuration
@EnableTransactionManagement
public class PersistenceJPAConfig{
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(){
...
}
@Bean
public PlatformTransactionManager transactionManager(){
//configure JTA transaction manager
return transactionManager;
}
}
- If everything is well defined in application context, then which transaction manager bean should referred in @Transactional annotation, if there are two datasources?
我想上面的解释应该可以回答这个问题。只有一个事务管理器管理两个数据源上的事务。这些称为分布式事务,它们使用两阶段提交协议(protocol)。浏览this有关 XA 事务的介绍性文章的链接。
关于java - 关于 JtaTransactionManager 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27408647/
我将使用数据库和 JMS 队列,因此我决定使用 JTATransactionManager(多个资源)。 我正在使用 Spring Framework 3.2.3.RELEASE Hibernate
我正在使用多个数据库进行设置,技术堆栈的 spring 和 hibernate 在 tomcat 6 上运行。跨数据库的事务不是必需的,每个数据库都有自己的数据源、sessionFactory 和 t
我想知道 Spring 如何为给定的带注释的事务申请资源。假设我有 3 个启用 XA 的数据源 D1、D2 和 D3。有时事务可能发生在 D1 和 D2 之间,有时可能发生在 D2 和 D3 之间,有
我正在寻找一种通过 Spring/JTA 将两个数据源的 CRUD 放入一个事务中的方法,但有以下问题: 数据源由org.apache.commons.dbcp.BasicDataSource而不是J
我在 Tomcat7 中使用 spring3 和 Hibernate4。 我必须使用 JTATransactionManager 并且我有以下配置。 在上面的配置中,java:com
我正在使用 Spring Data JPA (SDJ),在我的集成测试期间,我遇到了一个奇怪的情况——我可能错误地配置了一些东西,但我看不到那可能是什么。 简而言之 - SDJ 似乎根本无法调用 Sp
更新: 我正在使用 Bitronix TM 对其进行测试,它可以完美回滚,因此问题出在 JBoss TM (arjuna) 或我的配置中。 更新 2: 看起来事务不是全局的,我尝试了不同的数据源,Bi
我需要管理我的应用程序中的多个资源,例如 jms 和 database 在查看可以管理多个资源的事务管理器时,我遇到了 2 个事务管理器 JtaTransactionManager 和 Chained
我正在开发一个使用 Spring Integration 框架和atomikos 进行分布式事务构建的项目。最近,我们一直在尝试运行集成测试,以验证消息是否正确通过我们的系统发送。在执行其中一项集成测
Spring JtaTransactionManager 和 HibernateTransactionManager 之间有什么区别,何时在我的应用程序中使用它们?我知道 HibernateTrans
我想集成 Spring 和 Hibernate 并使用 JTA 来管理事务。我还想将事务处理委托(delegate)给 App 服务器,在我的例子中是 JBoss。我对 Spring 中“transa
我正在使用 Spring 并与 hibernate 4 集成作为持久化提供程序,这里我尝试的是进行增删改查操作关于学生实体, 我的所有选择操作都工作正常,但添加和更新操作不起作用, 我的 persis
我需要使用org.springframework.transaction.jta.JtaTransactionManager作为SpringService中的TransactionManager。但是
我正在尝试将 JtaTransactionManager 与 Spring Batch 一起使用。 transactionManager 是依赖项目中已经定义好的 Jta 事务管理器。 这是我的 Sp
我是一名优秀的程序员,十分优秀!