一個簡單的HELLO例子
1、安裝Weblogic:
使用的EJB服務是BEA的weblogic8.1,下載BEA的weblogic8.1,然后安裝。安裝步驟省略。
2、定義EJB遠程接口(Remote Interface):
任何一個EJB都是通過Remote Interface被調用,EJB開發者首先要在Remote Interface中定義這個EJB可以被外界調用的所有方法。執行Remote Interface的類由EJB生成工具生成。
以下是HelloBean的Remote Inteface程序:
package com.leo;
import java.rmi.RemoteException;
import java.rmi.Remote;
import javax.ejb.*;
public interface Hello extends EJBObject, Remote {
//this method just get "Hello EJB" from HelloEJB.
public String getHello() throws RemoteException;
}
3、定義Home Interface
EJB容器通過EJB的Home Interface來創建EJB實例,和Remote Interface一樣,執行Home Interface的類由EJB生成工具生成。以下是HelloEJB 的Home Interface程序:
package com.leo;
import javax.ejb.*;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.*;
/**
* This interface is extremely simple it declares only
* one create method.
*/
public interface HelloHome extends EJBHome {
public Hello create() throws CreateException,
RemoteException;
}
4、寫EJB類
在EJB類中,編程者必須給出在Remote Interface中定義的遠程方法的具體實現。EJB類中還包括一些 EJB規范中定義的必須實現的方法,這些方法都有比較統一的實現模版,編程者只需花費精力在具體業務方法的實現上。
以下是HelloEJB的代碼:
package com.leo;
import javax.ejb.*;
public class HelloEJB implements SessionBean{
public void ejbCreate(){}
public void ejbRemove(){}
public void ejbActivate(){}
public void ejbPassivate(){}
public void setSessionContext(SessionContext ctx){}
public String getHello() {
return new String("Hello,EJB");
}
}
5、創建ejb-jar.xml文件
ejb-jar.xml文件是EJB的部署描述文件,包含EJB的各種配置信息,如是有狀態Bean(Stateful Bean) 還是無狀態Bean(Stateless Bean),交易類型等。ejb-jar.xml文件的詳細信息請參閱EJB規范。以下是HelloBean的配置文件:
<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems Inc.//DTD Enterprise JavaBeans 1.2//EN" "
http://java.sun.com/j2ee/dtds/ejb-jar_1_2.dtd">
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>Hello</ejb-name>
<home>com.leo.HelloHome</home>
<remote>com.leo.Hello</remote>
<ejb-class>com.leo.HelloEJB</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
6、創建weblogic-ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-ejb-jar>
<description><![CDATA[Generated by XDoclet]]></description>
<weblogic-enterprise-bean>
<ejb-name>Hello</ejb-name>
<stateless-session-descriptor>
</stateless-session-descriptor>
<reference-descriptor>
</reference-descriptor>
<jndi-name>Hello</jndi-name>
<local-jndi-name>HelloLocal</local-jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
7、部署和編譯
EJB的jar包是由class文件和描述文件組成,對于weblogic服務器來說還要增加weblogic-ejb-jar.xml描述文件。編譯Java源文并將編譯后class和ejb-jar.xml、weblogic-ejb-jar.xml打包到Hello.jar
7.1:創建目錄build。
7.2:在build下新建目錄META-INF,把文件ejb-jar.xml、weblogic-ejb-jar.xml拷到META-INF下。
7.3:把編譯好的class文件拷到build目錄下(此時為com/leo/Hello.class,HelloEJB.class,HelloHome.class)。
7.4:打包成jar文件: jar -cvf hello.jar *.* 。
7.5:再將hello.jar文件部署到weblogic服務器中。
8、寫客戶端調用程序
您可以從Java Client,JSP,Servlet或別的EJB調用HelloBean。
調用EJB有以下幾個步驟:
通過JNDI(Java Naming Directory Interface)得到EJB Home Interface
通過EJB Home Interface 創建EJB對象,并得到其Remote Interface
通過Remote Interface調用EJB方法
以下是一個從Java Client中調用HelloBean的例子:
package ejb.hello;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Hashtable;
import javax.ejb.*;
import java.rmi.RmoteException;
/**
* @author Copyright (c) 2000 by Apusic, Inc. All Rights Reserved.
*/
public class HelloClient {
public static void main(String args[]){
String url = "rmi://localhost:7100";
Context initCtx = null;
HelloHome hellohome = null;
try {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.apusic.jndi.InitialContextFactory");
env.put(Context.PROVIDER_URL, url);
initCtx = new InitialContext(env);
} catch(Exception e){
System.out.println("Cannot get initial context: " + e.getMessage());
System.exit(1);
}
try {
Object obj=ctx.lookup("Hello");
HelloHome home=(HelloHome)PortableRemoteObject.narrow(obj,HelloHome.class);
Hello hello = hellohome.create();
String s = hello.getHello();
System.out.println(s);
}catch(Exception e){
System.out.println(e.getMessage());
System.exit(1);
}
}
}
運行HelloClient,可得到以下輸出:
Hello EJB