`

EJB2.x

    博客分类:
  • EJB
阅读更多

一、普通的javaBean:
 1.对象生命周期的管理
 2.事务的管理
 3.安全性的管理
 4.远程方法的调用

二、为什么要使用EJB?
 1.使用EJB可以比较简单地开发分布式系统
 2.开发EJB组件可以通过声明的方式使用服务器提供的一些企业级的服务,
    如事务管理可以全部交给服务器管理
 3.使用EJB开发的业务逻辑对象和持久层的对象可以全部交给EJB容器管理
 
 servlet类----->在web.xml中进行描述------>.war------>web容器------>web容器管理servlet的生命周期(包括创建和销毁)
 ejb类----->在ejb-jar.xml中进行描述------>.jar------>ejb容器------>ejb容器管理ejb的生命周期(包括创建和销毁)

三、什么是EJB?
 1.ejb是j2ee的一个标准,适合开发大型的分布式系统,是一个分布式的组件架构。
 2.ejb是一个可扩展的、可靠的、安全的组件架构
 3.使用ejb开发的组件可以被部署到任何j2ee服务器上

四、ejb和javaBean的比较
 1.相同点
  1)都可以提供getter和setter方法
  2)都是可重用的组件
  3)都可以有属性和方法
  4)都可以进行组装构建一个java系统
 2.不同点
  1)javaBean要比ejb要小(ejb比javaBean复杂)
  2)javaBean是开发组件不是部署组件,而ejb是部署组件

五、ejb的角色
 1.封装业务逻辑
 2.完成数据持久(访问数据库)
 3.访问其他的已有系统(JCA)

六、ejb的种类
 1.session bean(会话bean):封装业务逻辑
 2.entity bean(实体bean):访问数据库
 3.message bean(消息驱动bean):处理消息

七、RMI:java中提供的一种于远程调用机制
      RMI/IIOP:是RMI的一个扩展版本,适合用于intenet上
      注意:在调用ejb的时候不会涉及到底层的远程方法的调用过程

八、Proxy pattern(代理模式):两个对象实现共同接口或者继承共同父类,调用其中一个对象的方法等同于调用另外一个对象的方法。stub和ejb对象之间采用的代理模式

九、ejb的组成:可以包含四个接口和一个实现类,以及一个描述文件:ejb-jar.xml

 1.javax.ejb.EJBLocalObject
 2.javax.ejb.EJBObject
 3.javax.ejb.EJBLocalHome
 4.javax.ejb.EJBHome

   其中四个接口可以分为两组:
 1.EJBLocalObject和EJBLocalHome:ejb组件只能通过本地方式访问,指的是ejb客户端和ejb是通过引用来操纵的
 2.EJBObject和EJBHome:ejb组件只能通过远程方式访问,指的是通过stub和skeleton来相互调用

 jbuilder中一个project可以包含多个ejbmodel,一个model可以包含多个ejb组件
十、ejb的部署描述文件包含两个:
 1.标准的部署描述文件:ejb-jar.xml,描述ejb组件的相关信息
 2.根容器相关的部署描述文件:weblogic-ejb-jar.xml,描述根ejb容器相关的信息,如ejb组件的jndi的名字

十一、1.the remote interface :===>the EJB Object
  public interface Hello extends javax.ejb.EJBObject
  作用:1).容器根据这个接口创建EJB Object对象
        2).如果bean类中的商业方法需要被以远程的方式调用,那么这些方法必须在这个接口中定义,
          并且抛出RemoteException

  2. the home interface:===>the Home Object
  public interface HelloHome extends javax.ejb.EJBHome
  作用:1).容器根据这个接口创建Home对象,这个接口中定义的方法必须要抛出RemoteException
          通过远程方式使用。
    2).这个接口中定义的create方法创建EJB Object对象

  3. the local interface:===>the Local Object
  public interface HelloLocal extends javax.ejb.EJBLocalObject
  作用:1).容器根据这个接口创建Local Object对象
    2).如果bean类中的商业方法需要被以本地方式调用,那么这些方法必须在这个接口中定义

  4.the local home interface:===>the Local Home Object
  public interface HelloLocalHome extends javax.ejb.EJBLocalHome
  作用:1).容器根据这个接口创建Local Home对象,这个接口中定义的方法只能通过本地方式访问。
    2).这个接口中定义的create方法创建Local Object对象
  5.the enterprise bean class :===>
  public class HelloBean implements javax.ejb.SessionBean
         作用:提供业务逻辑方法的真正实现

 本地调用的步骤:
  client:1).创建InitialContext对象
      2).查找Local Home 对象,返回Local Home 对象的引用
      3).调用Local Home对象的create方法,返回Local Object的引用
      4).调用Local Object中声明的商业方法
 远程调用的步骤:
         client:1).创建InitialContext对象
             2).查找Home stub
      3).调用Home stub的create方法,返回EJB Object stub对象
      4).调用EJB Object stub对象中声明的商业方法

十二、EJB2.x中使用到的模式
 1.proxy(代理模式)
  home stub 和home object
  ejb object stub 和ejb oject
 2.factory-method(工厂模式)
  home对象采用这个模式,他作为一个工厂,生产的产品是EJBObject
 3.delegate (委托模式)
  ejb object和bean 对象之间
十三、EJB中的异常
 1.应用级别的异常
  这种级别的异常能直接抛给ejb客户端,如:javax.ejb.CreateException
 2.系统级别的异常
  这种级别的异常不能直接抛给EJB客户端,ejb容器将这种异常包装成RemoteException或者它的子类型,然后再抛给客户端

 *EJBContext是EJB容器和Enterprise bean对象通讯的对象

 十四、EJB中间件
 1.隐式的中间件:通过声明的方式去使用的服务,称为隐式中间件,在EJBObejct中调用这些服务。
 优缺点:1.业务逻辑方法中只需要关注业务逻辑过程,不需要关注中间件服务的使用,容易维护。     
 2.所有使用中间件服务的过程都是由容器来决定的,不是很灵活。
 
 2.显式的中间件:通过编码的方式去使用的服务,称为显式中间件;在bean类中调用这些服务。
 优缺点:1.使用服务的过程是由开发人员决定的,使用起来比较灵活。
  2.在业务逻辑方法中除了有业务逻辑代码之外,还有使用中间件服务的代码,这样维护起来比较困难。

 EJBObject==Request Interceptor(EJBObject!=Enterprise bean class)
 作用:
  1.隐式的分布式事务管理
  2.隐式的安全管理
  3.隐式的资源管理和组件声明周期管理
  4.隐式的持久化
  5.隐式的远程访问
  6.隐式的组件位置透明

十五、stub和skeleton

 1.两者都是在服务器端创建,stub在客户端运行,skeleton在服务器端运行。

 2.在EJB中,bean对象是单线程访问的。
  优点:不用关心并发访问的问题
  缺点:影响性能

 3.池的配置:
       1)池的出示大小:在部署完毕EJB组件之后,创建bean对象的数量
       2)池的最大容量:池中放置bean对象的最大数量
 4.当EJB客户端一个会话跨多个方法调用,那么无状态的会话bean是不能保存客户端的状态。


 Home/LocalHome 接口                                                 bean类
    create()        ===>        ejbCreate();
           create(int val) ===>        ejbCreate(int val);

 5.无状态会话bean的bean对象是由容器来创建的,有状态的会话bean的bean对象是由Home/LocalHome对象来创建的

 LRU:最近最久未使用;
 NRU:最长时间未使用。

十六、有状态会话bean和无状态会话bean的比较
      1.无状态的会话bean的对象对于所有的客户端都是共享的,而有状态的会话bean只能由一个客户端调用,所以当客户端发起的一个请求跨多个方法调用的时候,无状态会话bean不能维护客户端状态,而有状态bean则可以。

      2.在并发请求比较多的时候,为了提高性能,无状态会话bean使用pool,而有状态会话bean为了限制内存当中bean对象的数量,从而提高性能,使用了cache。

      3.无状态的会话bean是由容器来决定是否被创建,并且也是由容器来创建的,而有状态的会话bean是由客   户端来决定是否被创建,只要客户端调用home对象的create方法,就会创建一个bean对象。

      4.ejbPassivate和ejbActivate对于无状态会话bean是无意义的,对于有状态的会话bean:当bean对象被钝化之前,会调用ejbPassivate(),用于释放一些无法被钝化的资源,如DataSource,当bean对象被重新激活之前,会调用ejbActivate(),用于恢复在ejbPassivate中被释放的资源。

十七、消息驱动bean
 1、发送消息的一方,称为消息生产者。
 2、接收消息的一方,称为消息的消费者。
 3、主题消息(topic)===>发布订阅式
 4、队列消息(queue)===>点对点式
        5、topic类型的消息有如下两种订阅者:
     1)、持久的订阅者:消息的生产者生产一个Topic消息,此时MDB没有运行,如果MDB是一个持久的订阅者,那么下一次MDB运行的时候,可以接收到此消息。
     2)、非持久的订阅者:消息的生产者生产一个Topic消息,此时MDB没有运行,如果MDB是一个持久的订阅者,那么下一次MDB运行的时候接收不到此消息。

十八、什么是jms?
 1、jms j2ee其中的一个标准,用于访问jms服务,接收和发送消息。
 2、JMS编程的步骤:
  1)通过jndi查找ConnectionFactory对象
  2)通过ConnectionFactory对象创建Connection对象
  3)通过Connection对象创建Session对象
  4)通过jndi查找Destination对象
  5)通过Session对象创建MessageSender或者MessageReceiver对象
  6)通过MessageSender对象发送消息或MessageReceiver对象接收消息
十九、什么是MDB
 1、MDB是一种特殊的EJB组件,用来接收jms消息,能够消费queue或topic消息
 2、Bean类实现了MessageDriverBean接口之外,还实现了MessageListener接口,提供了唯一的商业方法onMessage(),没有返回值。
 3、不能抛异常给客户端
 4、无状态的
 5、可以是持久或者非持久的订阅者。
 6、MDB的高级特性:
  1)MDB的客户端和MDB不可能运行在同一个事务中。
  2)MDB不能使用EJB容器提供的安全服务
  3)负载均衡
       在集群的环境中,MDB能很好的完成负载均衡。
  4)重复消息
       在集群的环境中,topic类型的消息很有可能被重复消费
       解决办法就是使用queue类型的消息替代topic类型的消息
  5)消息的无序
       生产者生产的消息不能保证消息是先进先出
  6)ejbRemove()方法有可能被调用
              当发生系统级别的异常或系统崩溃的时候
  7)毒消息:当MDB在处理消息的时候出现食物回滚,从而导致消息没有被正常消费,JMS Server
       会将同一个消息重复进行发送,出现一个死循环。
       a、在onMessage中不要抛出系统级别的异常
                     b、使用bean管理事务代替容器管理事务
       c、有些服务器本身提供了处理毒消息的功能,比如同一个消息被重发若干次就自动删除

分享到:
评论

相关推荐

    EJB2.X 的使用例子

    EJB2.X 的使用例子,讲解了EJB2.X Entity Bean如何映射数据至表中, Session Bean如何使用,客户端调用Session Bean 中的业务方法. 有问题,请联系本人: QQ:343827585 (注:源码下载后,请删除后缀名为 .java的相应...

    ejb2.x 的教程

    ### EJB 2.x 教程知识点概览 #### 一、EJB 2.x 基本原理 ##### 1.1 Stateless Session EJB - **定义**: Stateless Session EJB 是一种没有状态的会话组件,每个客户端请求都会创建一个新的实例来处理,因此它不会...

    使用eclipse通过jboss开发简单的ejb应用(jboss7.x & ejb3.x)

    在本文中,我们将深入探讨如何使用Eclipse IDE与JBoss应用程序服务器(版本7.x)来开发和部署一个基于EJB 3.x的简单企业级Java应用程序。EJB(Enterprise JavaBeans)是Java平台上的核心组件,它提供了一种标准的...

    ejb3.x 简单小 demo

    标题中的“ejb3.x 简单小 demo”指的是一个关于企业级JavaBeans(EJB)3.x版本的示例项目。EJB是Java平台上的一个组件模型,主要用于构建可部署在Java应用服务器上的分布式、面向服务的企业级应用程序。EJB 3.x是一...

    基于Java的实例开发源码-ejbCreate函数用于初始化一个EJB实例.zip

    2. **依赖注入**:虽然EJB 2.x不支持注解注入,但开发者可以在这里手动创建并设置依赖的对象。 3. **异常处理**:`ejbCreate`是容器调用的方法,如果抛出非`EJBException`类型的异常,容器会自动销毁刚创建的Bean...

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

    在EJB 2.x版本中,`ejbCreate`是标准的生命周期方法之一,而在EJB 3.x及更高版本中,推荐使用注解(@PostConstruct)来替代,以符合更现代的Java编程实践。 ### EJB生命周期方法的演变: 1. **EJB 2.x**: - 实体...

    基于Java的ejbCreate函数用于初始化一个EJB实例.zip

    ejbCreate函数是EJB 2.x时代的传统生命周期方法之一,用于在Bean实例创建时进行初始化。在EJB 3.x及更高版本中,这种特定的方法已经被注解和依赖注入(Dependency Injection)机制所取代,但理解ejbCreate对于理解...

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

    2. **EJB的实现类**:实现了接口并包含`ejbCreate`(如果基于EJB 2.x)或`@PostConstruct`方法。 3. **部署描述符**(`ejb-jar.xml`):EJB的配置文件,用于指定EJB的元数据,如Bean的类型、接口、事务属性等。 4. *...

    EJB3.x+JSF入门工程

    **EJB 3.x 和 JSF 入门工程详解** EJB(Enterprise JavaBeans)是Java平台企业版(Java EE)的一部分,它提供了一种标准的方式来创建可部署在服务器端的组件,主要用于处理业务逻辑。EJB 3.x 版本引入了许多改进,...

    基于Java的源码-ejbCreate函数用于初始化一个EJB实例.zip

    ejbCreate函数是EJB 2.x版本中Bean类的一个特殊方法,它在容器创建一个新的EJB实例时被调用。在EJB 3.x及更高版本中,ejbCreate已被废弃,取而代之的是无状态会话bean(Stateless Session Bean)的构造函数或有状态...

    使用eclipse通过weblogic开发简单的ejb应用(weblogic 10.x & ejb3.x)

    在本文中,我们将深入探讨如何使用Eclipse IDE与WebLogic Server 10.x版本结合,开发基于EJB 3.0规范的应用程序。EJB(Enterprise JavaBeans)是Java EE平台的核心组件,用于构建可扩展、可靠且安全的企业级应用程序...

    ppt课件-第10章 EJB编程.zip

    它们有两种形式:旧式的实体bean(EJB 2.x)和Java Persistence API(JPA)中的实体bean(EJB 3.x及以后版本)。 - **消息驱动bean(Message-Driven Beans, MDB)**:用于处理消息队列中的JMS(Java Message ...

    EJB-api.rar

    9. **EJB 2.x与EJB 3.x的区别**: - EJB 2.x以XML配置为主,编程模型较为复杂;EJB 3.x引入了注解,简化了API,提高了开发效率。 10. **EJB与微服务**: - 随着微服务架构的兴起,EJB作为传统的服务组件化方式,...

    基于java的ejbCreate函数用于初始化一个EJB实例.zip

    在EJB 2.x版本中,`ejbCreate`是必须实现的,而在EJB 3.x及更高版本中,由于注解驱动的特性,`ejbCreate`不再是强制性的,开发者可以选择使用构造函数或者`@PostConstruct`注解的方法来进行初始化。 EJB有多种类型...

    Entity-EJB3.0.rar_EJB3.0

    EJB 3.0是这个技术的一个重要版本,它在EJB 2.x的基础上进行了许多改进,使得开发过程更为简化,更易于理解和使用。在这个"Entity-EJB3.0.rar"压缩包中,我们很可能找到了关于EJB 3.0实体Bean(Entity Beans)的示例...

    EJB.rar_ejb_site:www.pudn.com

    在EJB 2.x时代,EJB主要包括三种组件:会话Bean(Session Beans)、实体Bean(Entity Beans)和消息驱动Bean(Message-Driven Beans)。会话Bean用于处理客户端请求,通常代表业务逻辑;实体Bean则用于持久化数据,...

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

    在旧版的EJB规范(EJB 2.x)中,开发者可以自定义`ejbCreate`方法来执行初始化逻辑。但是,在EJB 3.x及更高版本中,推荐使用构造函数和setter方法来进行初始化,`ejbCreate`方法已经不再被鼓励使用。 3. EJB 3.x及...

    EJB3.rar

    4. **有状态会话Bean(Stateful Session Beans)**:虽然有状态会话Bean在EJB2.x版本中已经存在,但在EJB3.0中,其管理方式得到了优化,使其更易于使用和管理会话状态。 5. **实体Bean(Entity Beans)**:实体Bean...

    ejb27.rar_petstore

    4. **Container-managed Persistence (CMP)**:在EJB 2.x时代, CMP是一种常见的持久化机制,它将数据持久化的工作交由容器管理,开发者只需关注业务逻辑。PetStore的Entity Bean可能采用了CMP,简化了开发过程。 5...

Global site tag (gtag.js) - Google Analytics