web應用跨容器呼叫EJB的異常問題

chinee發表於2008-05-16
有兩個容器,一個是jboss,一個是websphere,
websphere裡放一個web應用,jboss裡放一個EJB,
web呼叫ejb,並試圖使用websphere的JTA事務,管理jboss那邊EJB的事務,
呼叫的ejb的事務型別 <transaction-type>Container </transaction-type>, <trans-attribute>Mandatory </trans-attribute>
報錯說:Transaction Required Exception
即表示呼叫EJB時,沒有啟用JTA事務,這是什麼原因呢???
請幫忙解答,謝謝了!

web側的部分程式碼如下:
//繫結websphere的Usertransaction
Properties h = new Properties();
h.put(Context.INITIAL_CONTEXT_FACTORY,
"com.ibm.websphere.naming.WsnInitialContextFactory");
h.put(Context.PROVIDER_URL, "iiop://10.80.12.124:2809/");
InitialContext ctx = new InitialContext(h);
tx = (UserTransaction) ctx.lookup("jta/usertransaction");
//啟用JTA事務
tx.begin();

//繫結jboss側的EJB
Properties env = new Properties();
env.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
env.setProperty(Context.URL_PKG_PREFIXES,
"org.jboss.naming:org.jnp.interfaces");
env.setProperty(Context.PROVIDER_URL, "jnp://10.80.12.124:1099");
Context enc = new InitialContext(env);
// 得到本地介面
UserServiceHome home = (UserServiceHome) enc
.lookup("ejb/UserService");
// 得到遠端物件
UserService userService = home.create();

String value = String.valueOf(System.currentTimeMillis());
// 呼叫遠端物件的方法
String msg = userService.listAllUsers(value);

// 提交JTA事務
tx.commit();
ctx.close();
enc.close();

相關文章