在JPA中使用XADatasource或非XA数据源进行基于JTA的事务

时间:2011-12-12 16:53:48

标签: jta

我们正在使用JPA 1.0进行基于ORM的操作,我们希望为我们的应用程序提供JTA数据源。我们只有一个数据库,我们的应用程序将连接到该数据库。 我们在控制器类中启动事务边界,直到DAO层控制器 - > BOImpl - > DAO。 在我定义数据源时,我应该使用非XA数据源或XA-Datasource。在/ web>

我的理解是,对于单个数据源,我不应该使用XADatasource。 请让我知道我应该使用什么。

2 个答案:

答案 0 :(得分:2)

对于单个资源(如单个数据库),您确实不需要XA数据源。

另一方面,请记住,大多数JTA / JTS实现实际上都认识到只有1个资源参与事务,因此XA的开销很小或者没有。您可能还没有想到的事务中还有其他参与者,例如发送JMS消息。

但如果您确定只有1个资源参与,那么您可以安全地选择非XA。

答案 1 :(得分:1)

我希望你现在可以清楚地表达你的怀疑,但是为了以防万一,这里有更多的信息。

典型的XA资源是数据库,消息传递排队产品(如JMS或WebSphere MQ),大型机应用程序,ERP软件包或可与事务管理器协调的任何其他内容。 XA用于协调通常称为two-phase commit (2PC) transaction的内容。 2PC事务的典型示例是需要以原子方式更新两个不同的数据库。大多数人认为银行拥有一个储蓄账户数据库,另一个用于支票账户。如果客户想要在他的支票账户和储蓄账户之间转账,两个数据库都必须参与交易,否则银行可能会失去一些钱。

问题是大多数开发人员认为,#34;嗯,我的应用程序只使用一个数据库,所以我不需要在该数据库上使用XA。" 这可能不是真的。应该问的问题是," Does the application require shared access to multiple resources that need to ensure the integrity of the transaction being performed? "例如,应用程序是使用Java 2连接器体系结构适配器还是Java消息服务(JMS)?的 If the application needs to update the database and any of these other resources in the same transaction, then both the database and the other resource need to be treated as XA resources.