零、概述
本示例中包括三个J2EE组件:
1)企业Bean
2)J2EE客户端
3)Web组件
一、企业Bean
它有三部分组成:
a)远程接口 - 声明客户可调用的业务方法
b)Home接口 - 声明客户端创建、查找或删除一个企业Bean的方法
c)企业Bean类 - 实现业务方法
1.1 远程接口
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
import java.math.*;
public interface Converter extends EJBOjbect {
public BigDecimal dollarToYen(BigDecimal dollars)
throws RemoteException;
public BigDecimal yenToEuro(BigDecimal yen)
throws RemoteException;
}
1.2 Home接口
import java.io.Serializable;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
public interface ConverterHome extends EJBHome {
Converter create() throws RemoteException, CreateException;
}
1.3 企业Bean类
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
import java.math.*;
public class ConverterBean implements SessionBean {
BigDecimal yenRate = new BigDecimal ("121.6000");
BigDecimal euroRate = new BigDecimal ("0.0077");
public BigDecimal dollarToYen(BigDecimal dollars) {
BigDecimal result = dollars.multiply (yenRate);
return result.setScale (2, BigDecimal.ROUND_UP);
}
public BigDecimal yenToEuro(BigDecimal yen) {
BigDecimal result = yen.multiply(euroRate);
return result.setScale (2, BigDecimal.ROUND_UP);
}
public ConverterBean() {}
public void ejbCreate() {}
public void ejbRemove() {}
public void ejbActivate() {}
public void ejbPassivate() {}
public void setSessionContext(SessionContext sc) {}
}
二、J2EE客户端
J2EE客户端需要执行的基本任务是:
1) 定位Home接口
2) 创建企业Bean的实例(远程接口)
3) 执行业务方法
<ConvertClient类的源代码>
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import java.math.BigDecimal;
public class ConvertClient {
public static void main (String[] args) {
try {
/*创建初始化的命名上下文空间,initialContext类的一个实例对象实现了Context接口,提供了名字处理的入口 */
Context initial = new InitialContext();
/* 取得上下文环境并绑定一个企业Bean的引用:其中
ejb/SimpleConverter绑定了一个企业Bean的引用,也就是企业Bean的Home接口的逻辑名,必须在部署时指定它和
ConverterHome的对应关系*/
Object objref = initial.lookup ("java:comp/env/ejb/SimpleConverter");
/*把绑定在ejb/SimpleConverter上的对象转型为ConverterHome对象 */
ConverterHome home =
(ConvertHome)PortableRemoteObject.narrow(objref, ConverterHome.class);
/* 创建远程接口类型的对象*/
Converter currencyConverter = home.create();
/* 调用Converter中的业务方法
EJB容器会调用运行在J2EE服务器上的ConverterEJB实例中(部署时,指定ConverterBean对应的Enterprise
Bean Name为ConverterEJB)的相应的方法*/
BigDecimal param = new BigDecimal("100.00");
BigDecimal amount = currencyConverter.dollarToYen(param);
System.out.println(amount);
amount = currencyConverter.dollarToEuro(param);
System.out.println(amount);
} catch (Exception ex) {
System.err.println("Caught an unexpected exception!");
ex.printStackTrace();
}
}
}
三、Web客户