2009-12-06 43 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)。你所做的一些簡化代碼將極大地幫助你指出你的錯誤。