維護客戶端跨方法調用的會話狀態。例:ATM 操作流程,驗證後連續多筆交易,狀態保留至取出卡片結束,Bean 隨之銷毀。
處理單一請求/商務流程,不保留前序請求狀態。例:密碼驗證,輸入密碼→驗證→回傳真/偽,流程結束 Bean 即結束。
EJB 運行於容器中,客戶端透過 EJBObject(Remote 介面)間接存取。需實作:
SessionBean 介面EJBHome,定義 create()EJBObject,定義商務方法public class sailorsy implements SessionBean {
private SessionContext ctx = null;
public void setSessionContext(SessionContext ctx) { this.ctx = ctx; } // 容器互動入口
public void ejbCreate() {} // 初始化,可多載不同參數,至少需一個
public void ejbPassivate() {} // 容器釋放資源時呼叫(釋放佔用資源)
public void ejbActivate() {} // 容器重新激活時呼叫
public void ejbRemove() {} // 容器移除 Bean 時呼叫
// 自訂商務方法
public String showname() { return "Hello, my name is sailorsy"; }
}
public interface sailorsyHome extends EJBHome {
public sailorsyRemote create() throws RemoteException, CreateException;
}
public interface sailorsyRemote extends EJBObject {
public java.lang.String showname() throws RemoteException;
}
public class sailorsyTestClient1 {
private sailorsyHome sailorsyHomeObject = null;
public sailorsyTestClient1() {
try {
Context ctx = new InitialContext();
Object ref = ctx.lookup("sailorsy"); // JNDI 定位 Home
sailorsyHomeObject = (sailorsyHome) PortableRemoteObject.narrow(ref, sailorsyHome.class);
} catch (Exception e) { e.printStackTrace(); }
}
public static void main(String[] args) throws Exception {
sailorsyTestClient1 client = new sailorsyTestClient1();
sailorsyRemote sr = client.getHome().create(); // 建立 Remote 參考
String s = sr.showname(); // 呼叫商務方法
System.out.print(s);
}
}
Win2000 + JBuilder 5/6 + BAS 4.5 測試通過。