EJB2.x

一、普通的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、有些服务器本身提供了处理毒消息的功能,比如同一个消息被重发若干次就自动删除

你可能感兴趣的:(EJB)