构建BEAN的五个步骤:
一)编写所有业务方法的bean。提供能够供客户端调用的具体业务方法。这里的bean有三种类型,会话bean,实体bean,消息驱动bean。每种bean需要实现各自的接口。
public class HelloWorld implements SessionBean{
//一堆来自sessionbean接口的方法
......
pubilc void sayHello(){System.out.print("Hello world");}
//不是来自sessionbean的方法,但是必须要有
public void ejbCreate(){}
}
二)为bean编写两个接口
一个是组件接口
public interface IHelloWorld extends EjbObject{
poblic void sayHello() throws RemoteException;
}
另一个是Home接口
public interface IHelloWorldHome extends EJBHome{
//返回值必须是组件类型
public IHelloWorld create() throws CreateException,RemoteException;
}
三)创建一个xml部署描述文件,告诉服务器你的bean是什么,以及如何管理它。
xml中描述的是你的bean结构,包括三个文件(组件接口,home接口和bean类),服务器不会根据你的类或接口的名字来确定哪个是bean,哪个是home接口,当然,bean的描述符并不只是这点内容。
四)把bean,接口和部署描述文件都放在一个ejb-jar文件里。
myEjb.jar
/ \
/ \
/ \
META-INF headfirst
| / | \
| / | \
ejb-jar.xml Helloworld.class IHelloWorld.class IHelloWorldHome.class
五)用服务器开发商提供的工具,吧bean部署到服务器上
RMI相关知识
一)EJB使用了RMI,从而使客户端可以访问bean
二)远程客户是指在另外一个JVM中运行的对象。
三)远程对象一直呆在它自己的堆里,客户调用的是这个远程对象的的代理的方法,而这个代理成为桩(stub)
四)桩对象处理和远程对象通信的所有底层网络细节
五)客户想要调用远程对象的一个方法,实际上是在桩上调用的这个方法,而这个桩与客户在一个jvm中也就是堆中
六)对于客户来说,调用远程对象方法和调用本地方法是一样的,只不过远程对象方法可能跑出一个RemoteExcepion
七)桩吧参数包装起来,并把调用的相关信息放松给服务器上的一个骨架。骨架本身是可选的,不过服务器上必须有人来做骨架,我们不用关系是谁来做骨架。
八)参数和返回值必须是一下类型:基本类型,serializable对象,基本类型或者serializable对象组成的一个集合对象或数组对象,或者是一个Remote对象。如果不在以上范围,就会跑出一个运行时异常。
九)如果把一个对象作为参数或者返回值进行传递,那么这个对象会按照串行化副本发送,并在远程对象的堆里逆串行化这个对象。
十)如果把一个远程对象作为参数或者返回值进行传递,实际上传递的是这个对象的桩。