2012-07-20 114 views
0

我在我的Java EE應用程序中遇到問題 - 一般來說,我堅持一個對象,發送一個JMS,並在MDB上我試圖找到該對象 - 有時可用,但有時我在JPA find 。我懷疑交易沒有完成,但我找不到解決方案。JTA CMT交易界限 - 交易開始和結束的地方?

我不確定我是否理解正確 - 在CMT中,事務從@Local或@Remote接口調用會話Bean的方法時開始?如果我在這個會話Bean中有一系列方法,並且只有其中一個持久化了我的對象 - 所有鏈接的方法是否會在一個事務中被調用?如果他們中的一些也暴露在界面中呢?

發送JMS是鏈接方法之一 - 我是不是應該在接口中公開這個方法,並在繼承我的對象的方法後調用它?如果我不想在界面中公開該方法怎麼辦?

對不起,缺乏EJB知識。感謝您的任何幫助:)

回答

0

你堅持和找到你的對象具有相同的實體管理器?

如果您在之前持續存在對象的同一事務中,則始終可以找到您的對象。 如果您堅持並找到具有不同事務的對象,那麼在提交持久事務之前您無法看到該對象。

我的建議是:使用相同的事務,以便您始終可以找到您的對象。或者在Java EE應用程序中,只需使用相同的實體管理器即可。

0

我建議你不要在MDB bean中編寫邏輯,使用會話bean,然後將它注入到MDB中。關於方法調用,如果您要調用同一個類中的方法,並且即使通過給定@REQUIRES_NEW屬性,它也不會打開新的事務。爲了做到這一點,注入bean本身並調用注入的bean,這將打開新的事務。