EJB 規範定義兩類企業 Bean:
客戶端與服務器建立連接時創建。按狀態管理分類:
客戶端不直接調用 Bean 類,而是通過EJB 容器生成的代理對象:
EJBObjectSessionBean/EntityBean 接口package examples;
import java.rmi.*;
import javax.ejb.*;
public class SailorsyBean implements SessionBean {
private SessionContext ctx = null;
// 1. 設置會話上下文(容器回調)
public void setSessionContext(SessionContext ctx) {
this.ctx = ctx;
}
// 2. 創建初始化(可重載多個 ejbCreate)
public void ejbCreate() {
// 初始化邏輯
}
// 3. 鈍化:容器釋放資源前回調
public void ejbPassivate() {
// 釋放非持久資源
}
// 4. 激活:容器恢復實例時回調
public void ejbActivate() {
// 重新獲取資源
}
// 5. 移除:客戶端調用 remove 或超時銷毀前回調
public void ejbRemove() {
// 清理工作
}
// 業務方法
public String showName() {
return "Hello, my name is sailorsy";
}
}
package examples;
import java.rmi.*;
import javax.ejb.*;
public interface SailorsyHome extends EJBHome {
public SailorsyRemote create() throws RemoteException, CreateException;
}
package examples;
import java.rmi.*;
import javax.ejb.*;
public interface SailorsyRemote extends EJBObject {
public String showName() throws RemoteException;
}
public class SailorsyTestClient {
private SailorsyHome home = null;
public SailorsyTestClient() {
try {
Context ctx = new InitialContext();
Object ref = ctx.lookup("sailorsy"); // JNDI 查找 Home
home = (SailorsyHome) PortableRemoteObject.narrow(ref, SailorsyHome.class);
} catch (Exception e) { e.printStackTrace(); }
}
public static void main(String[] args) throws Exception {
SailorsyTestClient client = new SailorsyTestClient();
SailorsyRemote bean = client.getHome().create(); // 創建 EJB 對象
String result = bean.showName(); // 調用業務方法
System.out.println(result);
}
}
create() 請求創建 EJB 對象測試環境:Windows 2000 + JBuilder 5/6 + BES 4.5。部署時需編寫 ejb-jar.xml 描述符,定義 Bean 類型、事務屬性、安全角色等。