2009-02-20 51 views

回答

2

下面是關於這個我的刺:

強制性: 一個EJB可以提供假定/依賴於呼叫者的交易已經運行的一些內部功能,如果不是這樣,由於種種原因,不能啓動一個,所以它會拋出一個EJB錯誤。所以這裏真正的問題是爲什麼這會成爲一個需求,我可以設計的唯一場景是在事務啓動時必須執行的特定事務相關操作,以及一些EJB沒有爲這些操作配備的情況下被強制標記。我想你也可以使用這個屬性來確保一致和正確排序的鎖定獲取,如果不這樣做可能導致死鎖。

決不: 這迫使你的EJB如果調用EJB當一個事務運行拋出一個異常,並再次,真正的問題是什麼樣的情況下會需要這個。參考Mastering EJB Third Edition,Ed Roman聲稱這個屬性在減少客戶端編碼錯誤方面很有用,它可以防止錯誤地假設EJB將參與到一個ACID過程中。

也許其他人可以爲這些屬性提供更具體的場景。

1

我有在強制性屬性是有用的一個案例:

我有一顆豆,有被許多應用程序調用。取決於調用應用程序,我希望有可能加入調用事務,或者在新事務中運行。所以我定義了兩個bean,一個是RequiresNew,一個是Required。第二個可以使用強制性的,以確保有一個調用交易,但它不是必需的。

6

我最近和一個項目一起工作,堅持所有事務都在應用程序層(服務類)標記出來,並且數據訪問對象不能直接調用。

這是爲了確保在沒有調用關聯應用程序邏輯(通常,數據庫操作與發送到隊列的消息配對)的情況下,數據庫不會被寫入。

MANDATORY在每個DAO EJB上的應用確保了它們在事務中運行時,調用者的任務就是啓動一個EJB。由於DAO由服務類(默認爲REQUIRED)調用,這意味着它們工作得很好,但任何人不小心直接調用它們都會得到例外。

1

強制性決不在該情況下使用時,要明確地被告知該客戶端是不是一個事務範圍內運行,拋出異常的事實。

強制性拋出TransactionRequiredException同時決不拋出的RemoteException

例如,如果客戶端運行內/外交易並調用企業Bean的方法,這也將運行內/外交易,則沒有異常將被拋出SUPPORTS。但是,如果您使用MANDATORY,對於以外的情況,將引發TransactionRequiredException。

相關問題