3
中遠程EJB方面,我有以下情況:關閉管理的事務
- 客戶端調用無狀態本地EJB - 管理的事務開始這個調用
- 本地EJB構建的InitialContext並查找遠程EJB
- 本地EJB調用遠程EJB上的方法
- 本地EJB關閉上下文並連接到遠程EJB
- 容器嘗試提交事務
分佈式事務不能被提交,因爲連接到事務的遠程EJB無法聯繫,因爲連接到它已關閉。
我的問題是:是否有可能在事務處於活動狀態時使用遠程EJB調用?我應該如何關閉用於查找遠程EJB的上下文?
下面的僞代碼說明我的問題:
@Stateless
public class LocalEjb {
public void localEJBMethod() {
//transaction starts before this method execution
Context ctx = //create initial context
RemoteEjb remoteEjb = (RemoteEjb) ctx.lookup("jndi name");
remoteEjb.remoteMethod(); //remote EJB takes part in distributed transaction
ctx.close();
//error occurrs when container tries to commit distributed transaction after
//this method returns
}
}
public class ClientClass { //a CDI component, for example
@EJB
private LocalEjb localEjb;
public void clientMethod() {
localEjb.localEjbMethod();
}
}