`

EJB中的Home接口

    博客分类:
  • EJB
阅读更多
EJB涉及两个接口,Home接口(扩展自EJBHome)和组件业务接口(扩展自EJBObject),这两个接口都是远程接口,但还有两个对应的本地接口EJBLocalHome和EJBLocalObject接口。

客户有一个目标,就是在bean上调用一个业务方法!!
客户想得到的是bean的一个引用,但是最多只能得到bean的组件接口的一个引用(即EJB对象)的一个引用。如果想得到一个EJB对象引用,客户必须得到bean home接口的一个引用。

首先必须得到一个home接口的引用,换句话说,必须得到home对象的桩。。。我们要用它来调用create(),这是你必须在home接口中定义的一个方法,用于返回一个组件业务接口的对象,这才能得到我们真正想要的东西----EJB对象桩。

想要得到一个home接口的引用,需要通过JNDI。JNDI(Java name and directory interface)java命名和目录接口。是一个用于访问命名与目录服务的API。

Context ct = new InitialContext(); //InitialContext是Context的一个子类型,是你访问JNDI树的入口点。这其实是你的第一个上下文,就像访问文件的最前面的一级目录。

Object o = ct.lookup("Advisor"); //查找
AdviceHome home = (AdviceHome) PortableRemoteObject.narrow(o,AdviceHome.class); //强制类型转换
Advice advisor = home.create();  //得到组件接口,相当于得到EJB对象的桩

我怎么知道是哪个开发人员给bean起的名字呢?
bean的开发人员(即bean的提供者)只负责编写这个bean,让它作为一个可重用组件,这个bean在哪使用如何使用,他一无所知。部署人员会用一个逻辑名来注册bean。
为甚不能直接AdviceHome home = (AdviceHome )o,这样强制类型转换呢?
对于一个远程home接口,强制类型转换还不够。
窄化(narrowing)会强制JNDI查找返回的对象肯定实现Home接口。这样才能进行强制类型转换。


为会话bean编写远程Home接口
你自己编写的Home接口,必须扩展自EJBHome,并且声明一个create()方法,这个方法返回组件接口,必须声明一个RemoteException和CreateException异常。还可以声明其他的受检查异常。
注意:对于无状态会话bean,只能有一个create()方法,而且不能有参数。
有状态bean,可以重载create()方法,而且并不一定需要有一个无参数的create()方法。
有状态bean中的创建方法,必须以create开头。其参数要求是serializable对象,基本类型,远程对象或其组合。
注意:任何实现了AdviceHome的对象,不仅仅实现了其定义的create方法,还有实现EJBHome中的方法,该对象是由容器创建的。
EJBHome中的方法有:
 
public abstract void remove(javax.ejb.Handle arg0) throws java.rmi.RemoteException, javax.ejb.RemoveException; //告诉home,你已经用完了一个会话bean。也可以用于实体bean,但不便
 
  public abstract void remove(java.lang.Object arg0) throws java.rmi.RemoteException, javax.ejb.RemoveException; //告诉home,删除一个实体bean,即永久从数据库中除去记录,只能用于实体bean。
  
  public abstract javax.ejb.EJBMetaData getEJBMetaData() throws java.rmi.RemoteException; //客户一般不会调用
  
  public abstract javax.ejb.HomeHandle getHomeHandle() throws java.rmi.RemoteException;

不管什么类型的bean,都只有一个home接口,即EJBHome接口,没有EJBSessionHome或EJBEntityHome
组件接口
注意:必须扩展EJBObject接口,声明一个或多个业务方法,这些方法必须抛出java.rmi.RemoteException异常。可以有重载方法。
EJBObject接口中一共有5个方法,所有实现了组件接口的对象,必须实现业务方法和这五个方法。
  public abstract javax.ejb.EJBHome getEJBHome() throws java.rmi.RemoteException;//    得到bean的home,在建立多个bean时会高效。
  public abstract java.lang.Object getPrimaryKey() throws java.rmi.RemoteException; // 得到实体bean的主键,不能用于会话bean。因为会话bean没有一个唯一身份要展现给客户。
  public abstract void remove() throws java.rmi.RemoteException, javax.ejb.RemoveException;
   // 告诉bean,已经用完了,这样容器可以释放这个bean为你保留的资源。这里只针对会话bean。
  public abstract javax.ejb.Handle getHandle() throws java.rmi.RemoteException; // 保存EJBObject的一个引用
  public abstract boolean isIdentical(javax.ejb.EJBObject arg0) throws java.rmi.RemoteException;// 比较两个EJB对象,查看它们是否引用同一个bean


获取home的流程如下面的图形所示:














  • 大小: 22.3 KB
  • 大小: 21.9 KB
  • 大小: 18.8 KB
  • 大小: 25.1 KB
  • 大小: 19.3 KB
  • 大小: 25.3 KB
  • 大小: 28.8 KB
  • 大小: 34.6 KB
分享到:
评论

相关推荐

    Java EJB简单例子.rar

    Java EJB简单例子,这是HelloWorldBean的Home接口,它是EJB对象的生成库,无状态会话(将在下一个实例中具体讲解)Bean,这个接口是客户端与EJB对象相互作用的中间途径,通过Client触发调用Bean方法:  try {  //...

    ejb3.0培训教程与源码(绝对精品)

    Home接口是用来创建和查找EJB Object 接口; 组件接口是不同类型的EJB要求实现的指定的接口; 比如: 会话Bean, 实现SessionBean, 导致 Bean类依赖容器; 2) 可以使用注释来代替配置文件; 3) 简化访问EJB容器...

    Java EJB模型模拟完整代码.rar

    Java EJB模型模拟完整代码,实现部分操作的远程接口和本地Home接口,还有各个模块功能的具体实现,是一个有利于学习的EJB模型实例。

    Java 简单的ejb实例代码.rar

    创建一个访问EJB的客户端应用程序,通过强制转型得到Home接口,同时还分享了一个函数,用于使用本地接口产生一个远程接口的应用。  其应用扩展展现的是一个简单的Stateless Session Bean的实现过程,希望能够对...

    EJB 为了满足架构的目标,规范中描述了   服务器 (Server)   容器 (Container)   类 (Class) 和实例 (Instance)   Home 和 Remote 接口   客户端 (Client)

    为了满足架构的目标,规范中描述了 服务器 (Server) 容器 (Container) 类 (Class) 和实例 (Instance) Home 和 Remote 接口 客户端 (Client)

    Java B-S结构EJB用法例子.rar

    Java B-S结构EJB用法例子,在JSP页面中,为初始化上下文获得一个系统属性对象,初始化并得到一个上下文,查询jndi名,通过强制转型得到Home接口,得到远程接口的引用,JSP调用EJB的例子。

    EJB 3.0学习之实体Bean

    在EJB3.0中开发实体Bean非常简单,你可以象开发一般的java bean一样编程,只需做少量的注释。一个实体bean不需要实现Home接口或者Remote、Local接口。

    ejbCreate函数用于初始化一个EJB实例

    ejbCreate函数用于初始化一个EJB实例,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的get...

    Java ejbCreate初始化EJB代码实例.rar

    Java ejbCreate函数初始化EJB的一个代码实例,代码将创建一个EJB测试客户端程序,演示... 代码通过强制转型得到Home接口,用client的getHome()函数调用Home接口函数得到远程接口的引用,用远程接口的引用访问EJB。

    Java C-S结构EJB实例.rar

    Java C-S结构EJB实例,在...创建一个访问EJB的客户端应用程序,得到名字上下文,查询jndi名,通过强制转型得到Home接口,用client的getHome()函数调用Home接口函数得到远程接口的引用 ,用远程接口的引用访问EJB。

    EJB概述(下) Java数据库 操作

    Application Assembler程序组装器 Beans提供者在应用领域方面是专家 义了beans的romote和home接口,还定义了beans的配置描述器。

    EJB在企业级电子商务开发中的应用 (2007年)

    简要介绍了EJB的概念和特性,举例说明如何利用本地接口和本地Home接口来防止本地客户端访问 EJB组件时产生附加的网络通信量.接下来对新的CMP组件模型进行了详尽阐述,通过实例解释了持久性管理器在提高系统可移植性...

    一个简单的EJB代码例子

    内容索引:Java源码,初学实例,EJB 一个简单的Java EJB例子代码,以经典的HelloWorld程序为例,介绍通过Client触发调用Bean方法、...EJB对象把调用委派给Bean以及介绍HelloWorldBean的Home接口,它是EJB对象的生成库。

    ejbmode_java_HomeHome_

    EJB模型模拟完整代码,实现部分操作的远程接口和本地Home接口,还有各个模块功能的具体实现

    EJB核心技术及其应用入门

    录 EJB(Enterprise java bean)核心技术及其应用.........................EJB中各角色的分析..............................................................................................2 1.1.1 EJB组件...

    java面试宝典

    243、remote接口和home接口主要作用 56 244、客服端调用EJB对象的几个基本步骤 56 245、 如何给weblogic指定大小的内存? 56 246、如何设定的weblogic的热启动模式(开发模式)与产品发布模式? 57 247、如何启动时不需...

    JAVA上百实例源码以及开源项目源代码

    得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口函数得到远程接口的引用,用远程接口的引用访问EJB。 EJB中JNDI...

    JAVA上百实例源码以及开源项目源代码 java开源包2

    得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口函数得到远程接口的引用,用远程接口的引用访问EJB。 EJB中JNDI...

    Java 泛型(Generics)使用说明

    比如,在EJB 2.0开发客户端应用时,如果使用范型和反射,可以把EJB 2.0的标准使用动作--“从远程home接口得到远程接口过程”--可以简化为:使用者可以直接得到远程接口,从而呼叫远程接口定义的业务逻辑方法。...

Global site tag (gtag.js) - Google Analytics