2009-12-06 68 views
0

我在我的应用程序中使用会话bean,事务仅在EJB层进行控制。我面临的问题是一些承诺。我使用的是相同的连接使用EJB插入到一个表,但是如果事务被提交则该插件没有提交到数据库中..任何一个可以帮助我的问题..ejb提交连接吗?

+0

你的问题不清楚。你只使用Session Bean吗?你使用BMT还是CMT?你如何获得你所指的连接?请添加一些细节,向我们展示一些代码。 – 2009-12-06 16:28:56

回答

2

我不是EJB专家,我一般用普通Java对象的工作,但...

你的问题可能是与事实是EJB不上的连接水平做事务管理办。他们使用Java Transaction Service来创建可以使用多个连接的事务。因此,为了让您的插入成为EJB事务的一部分,您必须从事务服务器获取该事务,并使其成为该事务的插入部分。 我相信你如何做到这一点完全取决于你拥有什么样的EJB环境(E​​JB2或3等)

但是,如果你在一个EJB环境中想要插入和EJB相同的事务它的东西,是否也为你想要插入的表创建一个EJB并让应用程序服务器知道它是没有意义的?

0

通用,简化的,回答你的问题是肯定的,Connection.commit()当EJB致力于被调用。

什么EJB实际执行依赖于数据源是如何定义的(交易或没有),如果最后的资源优化是允许的。

我使用的是相同的连接使用EJB

你怎么知道的?有些连接包装(例如,如果我记得是正确的话,就是Weblogic包装)无法比较两个连接是否相等。要做到这一点,需要使用供应商API。所以即使你认为两个连接是相同的,情况并非必要。

你是怎么得到这方面?来自哪里?根据EJB版本,您应该只从事务性数据源(EJB2)获得连接,或者使用持久性上下文和JPA(EJB3)。你所做的一些简化代码将极大地帮助你指出你的错误。