首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >容器管理的事务

容器管理的事务
EN

Stack Overflow用户
提问于 2013-04-05 13:44:20
回答 2查看 5.1K关注 0票数 2

只是澄清一下我对容器管理事务(CMTs)在JPA中是如何工作的理解:

CMTs使应用程序不必显式地开始和提交事务,对吗?

CMTs只能应用于会话和消息驱动的bean,而不能应用于pojos?

我回答上述问题的基本原理是--我想知道如何从java-se应用程序以及java-ee访问实体。我需要两个独立的持久化单元吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-05 15:18:29

我允许自己完全重写我的答案,因为它根本不清楚,更糟糕的是,有些东西根本就是错误的。

事实是,您(和我)混淆了EJB和JPA术语。

JPA只是在谈论实体bean。会话bean (包括CMT和BMT)是EJB规范的一部分。

在JPA中,我们将讨论链接到JTA或资源本地存储单元的容器管理和应用程序管理的实体管理器。

以下是JPA规范的相关部分:

JTA容器管理的实体管理器必须是

实体管理器。JTA实体管理器仅指定在Java容器中使用。应用程序管理的实体管理器可以是JTA实体管理器或资源本地实体管理器。

..。

JTA实体管理器和资源本地实体管理器都需要在Java web容器和

容器中得到支持。在EJB环境中,通常使用JTA实体管理器。通常,在Java SE环境中,只支持资源本地实体管理器。

..。

是一个JTA实体管理器,它的事务通过JTA进行控制。JTA实体管理器参与当前JTA事务,该事务在实体管理器外部开始和提交,并传播到底层资源管理器。

..。

使用容器管理的实体管理器时,持久性上下文的生命周期始终是自动管理的,对应用程序是透明的,并且持久性上下文随JTA事务一起传播

因此,只有当您想要在java应用程序中使用JTA (天气或非容器管理)实体管理器时,才需要定义2个持久性单元。

票数 4
EN

Stack Overflow用户

发布于 2013-04-05 18:56:43

CMT是使用注释以声明方式定义的,这些注释由Java容器求值,然后该容器将透明地提供所需的事务处理。Pojos不是由容器管理的,因此不能应用CMT。

至于你关于实体的问题。您应该创建一个DAO层来抽象持久化逻辑的技术细节。您基本上可以使用一个通用的dao实现来支持JPA。这基本上是这两个环境中唯一需要不同的部分。在容器中,您将按照注释中的定义免费获取事务。如果在标准java se中运行,则必须自己开始/提交/回滚事务。

我建议您创建一个通用的dao实现,它以声明方式定义事务,并期望在容器内运行。为了在java se中使用,您有一个针对此dao的装饰器,它负责正确的事务处理,以模拟容器实际要做的事情。

我认为你不需要修改persistence.xml中的任何东西,但也许我错了

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15826759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档