一個事務處理的屬性有:Required,RequiresNew,Mandatory,NotSupported,Supports,Never.
1、Required:當客戶端運行一個事務處理并調用EJB的一個方法,這個方法執行客戶端的事務處理;當客戶端沒有啟動一個事務處理,則EJB容器在執行這個方法之前啟動一個新的事務處理.
2、RequiresNew:當客戶端運行一個事務處理并調用EJB的一個方法時,容器管理器做如下操作:
(1) 懸掛客戶端的事務處理;
(2) 開始一個新的事務處理;
(3) 調用方法;
(4) 當方法結束,恢復客戶端的事物處理.
當客戶端沒有啟動一個事務處理,容器管理器在執行這個方法之前啟動一個新的事務處理.
3、Mandatory: 當客戶端運行一個事務處理并調用EJB的一個方法,這個方法在客戶端的事務處理范圍內被執行; 當客戶端沒有啟動一個事務處理,容器管理器將會拋錯(TransactionRequiredException);
4、NotSupported: 當客戶端運行一個事務處理并調用EJB的一個方法,容器管理器在調用方法之前終止客戶端的事務處理,當方法執行完,再恢復客戶端的事務處理; 當客戶端沒有啟動一個事務處理,容器管理器在調用方法時不啟動事務處理.
5、Supports: 當客戶端運行一個事務處理并調用EJB的一個方法,在運行方法時執行客戶端的事務處理; 當客戶端沒有啟動一個事務處理,容器管理器在調用方法時不啟動事務處理.
6、Never: 當客戶端運行一個事務處理并調用EJB的一個方法,容器管理器將拋出一個錯誤(RemoteException); 當客戶端沒有啟動一個事務處理,容器管理器在調用方法時不啟動事務處理.
在jbuilder中,缺省是Required;
第一個ejb可以是 Required,這個ejb調用的那個ejb方法如果想在一個
事務上下文中,我覺得可能采用Mandatory,方式比較好。如果它們不在一個事務上下文中,就會拋錯(TransactionRequiredException),是一個上下文,就沒有問題