CSDN博客

img zlsunnan

EJB开发过程(原创)

发表于2004/10/10 21:47:00  1581人阅读

EJB开发过程

一般一个完整的基于EJB的分布式计算结构由6个角色组成
1.EJB组件提供者(Enterprise JavaBean Provider)
提供负责定义EJB的remote and home接口,编写执行商务逻辑的EJB CLASS,提供EJB的部署文体

2.应用程序组合者(Application Assembler)
 比如JSP,SERVLET
 
3.部署者(Deployer)

4.EJB服务器提供者(EJB Server Provider)

5.EJB容器提供者

6.系统管理员(System Administrator)

定义和编写EnterPrise JavaBean类:这是Enterprise JavaBean内部应用逻辑的实现
编写Enterprise JavaBean的远程remote接口
编写Enterprise JavaBean的本地home接口
说明主键类(只是对于Entity Java Bean才需要的)。在Enterprise JavaBean的配置描述器中需要指定主键的名称。
一.
Enterprise JavaBean 提供了定义远程(Remote)接口和本地(home)接口,实现了Enterprise JavaBean类本身,
Remote接口定义了客户调用EnterPrise JavaBean实现的应用逻辑函数的接口。
Bean的实现里面必须至少有一个create()方法,-ejbcreate()但是可以带有多个不同参数的create()方法
在home接口中也必须有相同的方法定义(参数的个数相同),ejbcreate()方法返回一个容器管理的持久对象
都返回一个容器管理持久性的主键值。但是在home的相应create()方法中返回的类型是remote接口

 home->javax.ejb.EJBHome
remote->javax.rmi.remote

SessionBean必须实现javax.ejb.SessionBean

二.
defined remote class
每一个Enterprise JavaBean多必须有一个remote接口,remote接口定义了应用程序规定客户可以调用的逻辑操作。
这是一些由客户调用的公共方法,通常由JavaBean来实现。

Enteprise JavaBean的客户并不是直接访问Bean,而是通过remote接口来访问。

public interface EJBObject extends ajva.rmi.Remote
{
 //允许你获得一个相关的home接口。
 public EJBHome getEJBHome() throws java.rmi.RemoteException;
 //对于实体Bean,用getPrimaryKey();方法获得Bean的主键值
 public Object getPrimaryKey() throws java.rmi.RemoteException;
 //remove()可以删除一个Enterpise JavaBean
 public void Remove() throws java.rmi.RemoteException,java.rmi.RemoveException
 //返回一个Enterprise JavaBean实例的持久句柄
 public Handle getHandle() throws java.rmi.RemoteException;
 //允许你去比较Enterprise JavaBean是否相同
 boolean isIdentical(EJBObejct p) throws java.rmi.RemoteException;
}


remote 方法必须为public的,且抛出java.rim.remoteException

三.定义home接口

Enterprise JavaBean接口掌管着Bean的生命周期。提供了Enterprise JavaBean对象 (也是对Enterprise JavaBean的实例)
的create(),fin(), remove()方法
home接口必须定义一个或多个create()方法。每一个这样的方法都必须命名为create,他的参数,
不管是类型还是数量都必须与Bean类里面的ejbcreate()方法对应。

如果是实体Bean的home接口还包含了find()方法
每一个home接口都扩展了javax.ejb.EJBhome接口,如下代码展示了javax.ejb.EJBHome接口的定义。

public interface EJBHome extends java.ami.Remote()
{
//这个是通过一个句柄来删除Enterprise JavaBean 的实例
void remove(Handle handle) throws java.rmi.RemoteException , RemoveException;
//第二个是通过删除主键来删除一个Enterprise JavaBean的实例
void remove(Object primaryker) throws java.rmi.RemoteException,RemoveException;
//返回了Enterprise JavaBeand对象的metadata接口,这个接口允许客户获得Enterprise JavaBean的metadata信息
EJBMetaDate getEJBMetaData() throws RemoteException;
//提供了获得javax.ejb.EJBHome接口,home类,remote接口,还有主键的方法。
HOmehandle getHomeHandle() throws RemoteException;
}

因为home接口包括了一个或多个的create()方法的定义。成为会话Bean的工厂,对每一个create()方法,EJB都定义了如下的命名规定
1 他的返回值是会话 Bean 的 remote 接口类型
2 方法的名字只能是create()
3 会话Bean类中的每一个ejbcreate()方法都必须有一个create()与之相对应,而且参数的类型和数量也必须一致
4 必须抛出java.rmi.remoteException 和 javax.rmi.createException异常
5 create()方法的参数是用来初始化新的会话Bean对象的

以下是一个会话Bean对象的不同create()方法
public interface AddHome extends javax.ejb.EJBHome{

add create() throws java.rmi.RemoteException,javax.ejb.CreateException;
add create(Profile preferredProfile)
Throws java.rmi.RemoteException , javax.ehrows java.rmi.RemoteException , RemoveException;
EJBMetaData getEJBMetaData() throws RemoteException
Homehandle getHomeHandle() throws RemoteException;
}

会话Bean的home接口
在前面我们说过,一个会话Bean只有一个客户,这就是说当一个客户创建一个会话,这个会话Bean就是为这个创建的客户而
存在的。
会话Bean的home接口的create()方法,EJB规范定义了一个或多个create()方法的定义
1 他的返回值是会话 Bean 的 remote 接口类型
2 方法的名字只能是create()
3 会话Bean类中的每一个ejbcreate()方法都必须有一个create()与之相对应,而且参数的类型和数量也必须一致
4 必须抛出java.rmi.remoteException 和 javax.rmi.createException异常
5 create()方法的参数是用来初始化新的会话Bean对象的

============================================================================================================

会话Bean的home接口并没有定义finder方法来定位对象,因为有状态的会话Bean只能给创建他的客户使用,如果不是客户
自己创建的会话Bean 没有必要也不允许这样去定位一个会话Bean

=============================================================================================================

实体Bean的home接口
实体Bean 跟会哈Beande home接口是一样的,只不过多了一个finder()方法,
这样客户就能够定位和使用实体Bean的对象,finder的操作是必须的,因为实体Bean是长时间存在的,可以被
多个客户使用,对于大多数的应用程序而言,实体Bean的实例是存在的,客户只需要找到一个用来使用就可以了


定义主键:
一个Entity Bean的home接口必须提供一个默认的finder方法:finderByPrimaryKey,这个方法允许客户通过主键
来定位Entity Bean方法只有一个唯一的参数:那就是“主键”, 方法的返回值类型是实体Beanz的remote接口类型
主键的类型扩展了Java Object类型的任何Java类型,在配置描述器中,你必须告诉容器主键的类型

*==============================================================================================================

根据定义,findByPrimaryKey()方法总是返回一个单个的Entity对象,而其他的finder()方法可以返回Entity对象的
集合

*==============================================================================================================

下面是一个findByPrimary()方法
findByPrimary(key)
  throws java.rmi.RemoteException.FinderException;
  
home接口里面还可以定义别的finder()方法,每一个finder()方法都必须在Enterprise JavaBean类里面有一个对应的实现。
每一个finder方法都必须符合如下约定

1 返回类型是remote接口类型
2 必须以前缀是find开头,在实体Bean类里面以前缀ejbFind开头
3 必须抛出java.rmi.remoteException and javax.ejb.FinderException
4 在home接口中的throws 子句与实体Bean类的ejbcreate()方法的throws子句也必须对立。
阅读全文
0 0

相关文章推荐

img
取 消
img