ejb 是不是提交连接?
Posted
技术标签:
【中文标题】ejb 是不是提交连接?【英文标题】:does ejb commits on connection?ejb 是否提交连接? 【发布时间】:2009-12-06 12:33:19 【问题描述】:我在我的应用程序中使用会话 bean,事务仅在 EJB 层进行控制。我面临的问题是一些承诺。我正在使用与 EJB 相同的连接插入到一个表中,但是如果事务已提交,则该插入不会提交到数据库中。任何人都可以帮助我解决这个问题。
【问题讨论】:
您的问题不清楚。你只使用会话 Beans 吗?您使用 BMT 还是 CMT?您如何获得您所指的连接?请添加一些细节,给我们看一些代码。 【参考方案1】:我不是 EJB 专家,我通常使用普通的旧 java 对象,但是...
您的问题可能与 EJB 不在连接级别进行事务管理这一事实有关。他们使用 Java 事务服务来创建可以使用多个连接的事务。因此,要使您的插入成为 EJB 事务的一部分,您必须从事务服务器获取该事务并使您的插入成为该事务的一部分。 我相信你如何做到这一点完全取决于你拥有什么样的 EJB 环境(EJB2 或 3 等等)
但是,如果您在 EJB 环境中并希望在 EJB 执行其工作的同一事务中插入内容,那么为您要插入的表创建一个 EJB 并让应用程序服务器也没有意义弄明白了吗?
【讨论】:
【参考方案2】:一般,简化,对您的问题的回答是肯定的,在提交 EJB 时会调用 Connection.commit()。
EJB 的实际作用取决于数据源的定义方式(事务性与否)以及是否允许最后的资源优化。
我正在使用与 EJB 相同的连接
你怎么知道?一些连接包装器(例如,Weblogic 之一,如果我没记错的话)无法比较两个连接是否相等。为此,需要使用供应商 API。因此,即使您认为两个连接相同,也不一定如此。
您是如何获得这种联系的?从哪里?根据 EJB 版本,您应该只从事务数据源 (EJB2) 获取连接,或者使用持久性上下文和 JPA (EJB3)。您所做的一些简化代码将极大地帮助您指出您的错误。
【讨论】:
以上是关于ejb 是不是提交连接?的主要内容,如果未能解决你的问题,请参考以下文章
当容器管理的 tx EJB 提交时,如何捕获和包装 JTA 抛出的异常?
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 何时提交?