另外就是, 如果你是不同的EJB package 採用 resource inject 方式, 那如果被引用的 EJB shutdown. 引用別人的 EJB or web 在 jboss 6 上面會掛掉, 得重新啟動才有辦法繼續運作. 所以. 建議方式是採用 InitialContext 方式去 引用外部的 EJB resource, 不然一天到晚你要記得去 restart .
在 Session Bean 部份的寫法
package test;
import javax.ejb.Stateless;
@Stateless(name="test/TestSessionBean")
public class TestSessionBean implements TestSessionBeanRLocal,TestSessionBeanRemote {
@Override
public void test() {
System.out.println("Hello Test Bean");
}
}
引用 共用 SessionBean 的寫法(Resource Injection)
package test;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import test.TestSessionBeanLocal;
@Stateless
public class TestBean implements TestBeanLocal {
@EJB(mappedName = "test/TestSessionBean/remote")
TestSessionBeanRemote testBean;
@Override
public void testBean() {
testBean.test();
}
}
上面標注紅色字體部份, 就是在jboss 下面可以正常運做的 code.
主要在 引用共用session bean 那邊的設定, 需要多加一個 /remote , 這是跟local 不一樣的地方.
引用 共用 SessionBean 的寫法(jndi lookup)
package test;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import test.TestSessionBeanLocal;
import javax.naming.InitialContext;
@Stateless
public class TestBean implements TestBeanLocal {
TestSessionBeanRemote testBean;
@Override
public void testBean() {
InitialContext ctx = new InitialContext();
testBean = (TestSessionBeanRemote)ctx.lookup("
test/TestSessionBean/remote
");
testBean.test();
}
}