栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

“ jta数据源”和“本地资源”数据源之间的区别?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

“ jta数据源”和“本地资源”数据源之间的区别?

术语“ jta-datasource”和“ resouce-local datasource”对我来说有点模糊。

我猜您实际上是指

jta-datasource
non-jta-datasource
元素。简而言之:

  • 如果持久性单元的事务类型为 JTA ,则该
    jta-datasource
    元素用于声明将用于获取连接的JTA数据源的JNDI名称。这是常见的情况。
  • 如果持久性单元的事务类型是 资源本地的
    non-jta-data-source
    则应使用声明非JTA数据源的JNDI名称。
  • 可以将同一数据库称为jta数据源或资源本地数据源

这是对的。而且我没有在上面提到过,但是一些提供程序甚至允许声明a

jta-datasource
a,
non-jta-datasource
并使用后者来通过非JTA连接优化读取(即不会与正在进行的JTA交易相关联)。

  • 如果提到为jta-datasource,那么Bean /其他类可以使用JTA。因此,UserTransaction接口。

第一部分是正确的,最后一部分不是完全正确的。从EJB 3.0规范中,第 13.3.4 节“ 使用容器管理的事务划分的企业Bean”

企业bean的业务方法不得尝试获取或使用该

javax.transaction.UserTransaction
接口。

以及第 16.12UserTransaction接口

容器不得使该

UserTransaction
接口可用于不允许使用该接口的企业bean。

换句话说,该

UserTransaction
接口不适用于CMT企业bean。

  • 如果数据源是本地资源,则无法使用CMT / BMT

这里的措辞有点令人困惑,但我会说这并不是严格正确的。根据JPA 1.0规范,第 §5.5“控制事务”

应用程序管理的实体管理器可以是JTA实体管理器,也可以是资源本地实体管理器。

Java EE Web容器和EJB容器都需要同时支持JTA实体管理器和资源本地实体管理器。在EJB环境中,通常使用JTA实体管理器。

6.2.1.2节的交易类型

transaction-type
属性用于指定实体管理器工厂为持久性单元提供的实体管理器必须是JTA实体管理器还是资源本地实体管理器。该元素的值是
JTA
RESOURCE_LOCAL
。JTA的事务类型假定将提供JTA数据源-由
jta-data-source
元素指定或由容器提供。在一般情况下,在Java EE环境,一个
transaction-type
RESOURCE_LOCAL
假设非JTA的数据源将提供。在Java EE环境中,如果未指定此元素,则默认值为JTA。

因此,您可以使用 应用程序管理的实体管理器 ,该 应用程序 可以是 资源本地的实体管理器

EntityManagerFactory
在这种情况下,您必须注入来从中获取EM),并且它不属于JTA事务。看到这个(非常有趣的)讨论。

  • 如果提到作为资源本地数据源,则事务不支持JTA。代码可以使用EntityTransaction接口,但不能使用UserTransaction接口

再次,措辞有点令人困惑,但我会说这是正确的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/419091.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号