EJB是J2EE中最重要的技術之一,它是支持分布式事務的分布式組件,我們以Hello World為例,編寫第一個名為Hello的最簡單的session Bean。
根據EJB2.1規范,編寫一個Session Bean需要以下幾個類和接口:
遠程接口Hello,客戶端使用這個接口來訪問EJB:
// Hello.java
// 遠程接口:EJBObject
import javax.ejb.*;
import java.rmi.*;
public interface Hello extends EJBObject {
// 業務方法,必須拋出RemoteException:
public String say() throws RemoteException;
}
Home接口HelloHome,客戶端使用這個接口來創建EJB并在稍后調用其業務方法:
// HelloHome.java
// Home接口,負責創建EJB:
import java.io.*;
import java.rmi.*;
import javax.ejb.*;
public interface HelloHome extends EJBHome {
// create方法需要拋出RemoteException和CreateException:
Hello create() throws RemoteException, CreateException;
}
實現業務邏輯的類HelloBean,客戶端永遠無法直接訪問它,只能通過遠程接口來間接訪問它,HelloBean只有一個業務方法:
// HelloBean.java
// 實現真正業務方法的Bean,由容器管理,
// 客戶端通過遠程接口間接訪問它:
import java.rmi.*;
import javax.ejb.*;
public class HelloBean implements SessionBean {
PRivate SessionContext ctx;
public String say() {
return "Hello, world.";
}
public void setSessionContext(SessionContext ctx) {
this.ctx = ctx;
}
public void ejbCreate() {}
public void ejbRemove() {}
public void ejbActivate() {}
public void ejbPassivate() {}
}
從上面可以看到,為了編寫一個Bean,需要額外的兩個接口支持,并且,由于HelloBean不實現Hello接口,這些方法申明和實現如果不一致,只有在部署時才能發現問題。某些工具(如XDoclet)可以根據特定的注釋自動生成Remote和Home接口。在EJB 3.0規范中,開發者就只需要編寫Bean,剩下的Remote和Home接口都由工具根據EJB 3的注釋自動生成,因此大大簡化了開發。
為了提高EJB的調用速度,如果客戶端和EJB容器位于同一個JVM內(例如運行在同一個JVM中的jsp和EJB),還可以使用本地接口,但是這兩個接口不是必需的,因此我們不去實現它。
現在我們一共有3個文件:Hello.java,HelloHome.java,HelloBean.java,放在C:/example目錄下,然后開始編譯:
C:/example>javac *.java
在當前目錄下可以找到編譯后的Hello.class,HelloHome.class和HelloBean.class三個文件。
下載源碼:點擊下載
(出處:http://www.companysz.com)
新聞熱點
疑難解答