2012-02-14 14 views
9

我們正在開發一個有兩個主要邏輯的系統;一個是非常輕的管理邏輯;另一個是處理邏輯,它非常耗費資源(RAM + CPU)。可以在Weblogic中的不同應用程序的EJB之間傳播事務嗎?

我們決定讓一臺機器運行管理邏輯,一臺(或多臺)其他機器運行處理邏輯。
爲了將邏輯分成不同的機器,我們爲每個邏輯創建了一個應用程序(EAR),這給了我們兩個獨立的應用程序。

現在,我們使用Weblogic作爲我們的應用服務器,並且我們還沒有配置我們的域來在不同的機器上運行應用程序。

在我們這樣做之前,我們想知道;當來自管理應用程序的EJB將從處理應用程序調用EJB時​​,事務是否會傳播?如果管理EJB將回滾它的事務,那麼處理EJB是否也會回滾它?此功能是否需要域的特殊配置?

回答

6

是的。如果您遵循最佳做法,不要嘗試任何愚蠢的做法,事務和回滾都會傳播。這正是EJB設計的目的!如果您需要關於如何使用@EJB正確注入EJB的幫助,一個很好的指導是掌握EJB3.1或JavaLobby的簡短EJB3.0 refcard。

EJB的聲明式事務管理,所以你需要確保你把你的Bean正確聲明:

@Stateless 
@Remote({MyService.class}) 
@TransactionAttribute(TransactionAttributeType.REQUIRED) 
public class MyServiceBean implements MyService { 
    ...awesome code here 
} 

編輯

一個重要的說明是,你需要有一個頂層EJB爲您啓動事務並將所有調用鏈接到其他EJB,或者您需要在調用多個EJB之前手動啓動事務。

如果您在一個servlet中,並且調用6個EJB註釋REQUIRED,那麼您將獲得6個事務,因爲事務邊界在每次調用EJB時​​開始,並且以存在的方法結束。

如果您在一個EJB中,並且調用另外6個用REQUIRED註解的EJB,那麼您將獲得一個事務,因爲事務邊界已經啓動。

+0

起初我假設它會工作,但是當我正在尋找答案時(現在找不到鏈接),我發現規格對這個主題非常模糊。我想我只需要嘗試一下。附註:我提出難題;我沒有得到答案/我得到了錯誤的答案/我得到的答案告訴我們沒有解決辦法。 – wafwaf 2012-02-27 16:19:51

+0

這是可以理解的:) – 2012-02-27 17:08:50

相關問題