`

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
分享到:
评论

相关推荐

    EJB中ejb-jar——xml文件说明.pdf

    <home>元素用于描述EJB组件的Home接口信息,该元素包含了多个子元素,如等。 元素用于描述EJB组件的远程接口信息,该元素包含了多个子元素,如<EJB-CLASS>等。 <EJB-CLASS>元素用于描述EJB组件的实现类信息,例如...

    在PowerBuilder中呼叫EJB元件-以mail EJB為例

    - **生成的Proxy对象**:PowerBuilder会生成两个Proxy对象,即`mailserver`和`mailserverhome`,分别对应远程接口和Home接口。其中,Home接口提供了create()函数,供客户端调用来获取远程接口实例。 #### 3. 声明...

    经典的EJB模式——门面模式

    在这一模式下,客户端首先通过JNDI(Java Naming and Directory Interface)查找EJB的Home接口,JNDI允许将分布式对象与逻辑名称绑定,使得客户端能通过名称找到EJB。然后,客户端使用Home接口创建远程接口实例,...

    实战角度比较EJB2和EJB3的架构异同

    EJB2中的对象创建过程通常涉及JNDI查找和工厂方法(如home.create())。EJB3则引入了依赖注入(Dependency Injection,DI)的概念,使用@EJB注解实现对象的自动装配,使得代码更加简洁和松耦合。比如: ```java @...

    java源码:EJB中JNDI的使用源码例子.zip

    客户端首先通过JNDI查找EJB的Home接口,然后通过Home接口创建远程或本地的Session Bean实例。EJB的JNDI名称通常由服务器配置,包括企业bean的名称、模块名称以及服务器提供的前缀。 3. **EJB的部署**: 当EJB被...

    面向对象方法EJB组件.pdf

    在给定的【部分内容】中,首先介绍了实现EJB组件的一般过程,包括编写业务逻辑Bean类、定义远程接口和home接口以及编写ejb-jar.xml部署描述文件。然后,将这些组件和描述文件打包成一个ejb-jar文件,并使用服务器...

    EJB API中文版

    客户端通过JNDI查找EJB Home接口,进而创建或查找EJB实例,最终使用EJB实例完成具体的业务操作。 #### 三、EJB组件类型 EJB组件可以分为以下三种主要类型: 1. **会话Bean(Session Bean)** - **会话Bean**是非...

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

    2. **本地Home接口**:在EJB 2.x中,本地Home接口是创建和管理bean实例的主要方式。它提供了创建bean实例(通常是通过`create()`方法)和移除bean(通过`remove()`方法)的方法。在EJB 3.x中,这种接口不再需要,...

    EJB实例工程代码

    对于实体bean,可能有home接口(Home Interface)和远程接口。 4. **部署描述符**(Deployment Descriptor):这是XML文件,包含了EJB组件的配置信息,如组件的名称、接口、安全设置等。在EJB 3.0及以上版本,可以...

    EJB教程,EJB参考书

    首先,需要安装EJB容器如Apusic Application Server,接着定义远程接口和Home接口,编写EJB类,创建部署描述符`ejb-jar.xml`,最后编译、部署并编写客户端调用程序。 通过上述过程,我们可以看到EJB为开发者提供了...

    ejb2.0与ejb3.0的区别

    - **EJB 2.0**:需要为每个实体Bean定义一个Home接口,用于创建和查找Bean实例。 - **EJB 3.0**:取消了Home接口的需求,简化了实体Bean的创建和查找过程。 #### 五、其他变化 - **EJB 3.0**:提供了轻量级的支持,...

    ejb接口

    1. **Home Interface**(家接口):这是客户端用来创建和管理EJB实例的接口。它提供了查找、创建和移除EJB实例的方法。例如,`create()`方法用于实例化EJB,而`remove()`方法则用于销毁实例。 2. **Remote ...

    Eclipse开发EJB_3.0

    在 EJB 3.0 中,需要创建会话 Bean(Session Bean),该 Bean 实现了远程接口中的方法。在本例中,我们创建了一个名为 TestEJBActivityBean 的会话 Bean,该 Bean 实现了 SayHello 方法,该方法返回一个字符串。 五...

    ejb调用详解

    5. **客户端调用**:客户端通过JNDI查找EJB的Home接口,然后创建并调用Bean实例。 **三、WebSphere中调用EJB** 在WebSphere中,调用EJB需要注意以下几点: 1. **JNDI配置**:确保WebSphere服务器配置了正确的JNDI...

    EJB中JNDI的使用源码例子

    例如,如果EJB是一个远程接口,我们需要使用`((javax.ejb.EJBHome) ctx.lookup(jndiName)).create()`来获取EJB的home接口,然后调用`create`方法获取bean接口。 - **调用EJB方法**:最后,通过EJB的接口调用其业务...

    WTC暴露ejb服务说明

    - EJB的remote home接口类应继承自`weblogic.wtc.jatmi.TuxedoServiceHome`,这是创建和查找EJB实例的入口。 - EJB的bean类中至少有一个方法暴露为服务,例如上面代码中的`service`方法。这个方法会接收Tuxedo传递的...

    Eclipse对应EJB右键的自动完成插件

    然而,编写EJB代码时,手动输入HOME接口、remote接口以及EJBHandler等关键元素可能会消耗大量时间。为了解决这个问题,Eclipse提供了一个名为“Eclipse对应EJB右键的自动完成插件”。 该插件的主要功能是在Eclipse...

    LoadRunner在EJB自动化测试中的应用

    前者通过录制客户端GUI的测试脚本来测试EJB的HOME接口和REMOTE接口,但这种方法需要预先实现客户端,测试不够灵活且受限于特定环境。相比之下,基于RMI-IIOP(Internet Inter-ORB Protocol)的测试方法更加高效和...

    EJB集群EJB集群资料

    发布无状态会话Bean到集群中,开发者需要将Bean打包成JAR文件,并将其放置在集群中任意一个节点的`%JBOSS_HOME%\server\all\farm`目录下。JBOSS集群机制会自动将此JAR文件复制到其他节点,确保所有节点都有相同的...

    Java EJB简单例子.rar

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

Global site tag (gtag.js) - Google Analytics