当前位置: 代码迷 >> J2EE >> J2EE-EJB
  详细解决方案

J2EE-EJB

热度:389   发布时间:2016-04-17 23:16:54.0
J2EE--EJB
一、EJB基础:
        EJB是sun的JavaEE服务器端组件模型,设计目标与核心应用是部署分布式应用程序。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。EJB (Enterprise JavaBean)是J2EE(javaEE)的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。 在J2EE里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。    -------------来自百度百科
        先看一下EJB的官方解释。

        商务软件的核心部分是它的业务逻。业务逻抽象了整个商务过程的流程,并使用计算机语言将它们实现。

        J2EE对于这个问题的处理方法是将业务逻从客户端软件中抽取出来,封装在一个组件中。这个组件运行在一个独立的服务器上,客户端软件通过网络调用组件提供的服务以实现业务逻,而客户端软件的功能单纯到只负责发送调用请求和显示处理结果。在J2EE中,这个运行在一个独立的服务器上并封装了业务逻的组件就是EJB(Enterprise Java Bean)组件。

        用通俗话说,EJB就是:"把你编写的软件中那些需要执行制定的任务的类,不放到客户端软件上了,而是给他打成包放到一个服务器上了"。

        EJB的三种类型:
        1.Session Bean用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个Session Bean来为客户端服务。Session Bean可以直接访问数据库,但更多时候,它会通过Entity Bean实现数据访问。
        2.Entity Bean是域模型对象,用于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个Entity Bean对象相当于新建一条记录,删除一个Entity Bean会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。
        3.MessageDriven Bean是EJB2.0中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。MDB实际上是一个异步的无状态Session Bean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间的等待一个方法调用直到返回结果。

二、EJB实现原理:
        EJB是运行在独立服务器上的组件,客户端是通过网络对EJB对象进行调用的。在Java中,能够实现远程对象调用的技术是RMI,而EJB技术基础正是RMI。通过RMI技术,J2EE将EJB组件创建为远程对象,客户端就可以通过网络调用EJB对象了。
        EJB在系统中的位置:
            
    

三、使用EJB
        EJB运行机制:
        服务器端:在EJB组件部署到容器上后,容器会自动生成三个对象,这三个对象是:Home对象、Remote对象或Local对象、Enterprise Bean对象。
  客户端调用流程:使用JNDI机制绑定与定位EJB,Context.lookup找回是Home对象,然后在使用Home接口的create方法创建Remote对象;调用Remote接口中的业务方法;使用完EJB应该调用remove方法删除。如下:
    (1)发现EJB
       客户端需要调用ejb的本地接口,所以需要取得本地接口的远程引用,在J2EE环境中,可以通过JNDI访问这类命名服务,也就是可以使用JNDI来获取EJB本地接口的引用,这是因为EJB容器使用部署中指定的JNDI名字注册了本地接口。(部属EJB时可以设置JNDI名字,客户端就通过JNDI名字来查找到这个EJB)
    Try
    {
        InitialContext ic = new InitialContext();
        Object lookup = ic.lookup(“java:comp/env/ejb/Agency”);
        AgencyHome home=(AgencyHome)PortableRemoteObject.narrow(lookup,AgencyHome.class);
    }
    (2)使用
    Try
    {
        Agency agency = home.create();
        //向新创建的EJB返回一个 远程引用
        System.out.println(agency.getAgencyName());
    }
    (3) 删除
    Agency =null
    当本地RMI允许检测到远程对象不再有任何本地引用时,将为这个对象触发远程垃圾箱,意味着远程引用超时了,这会导致在服务器端再次引用对象,然后变销毁bean

总结:EJB实现原理,就是把原来放到客户端实现的代码放到服务器端,并依靠RMI进行通信。


  相关解决方案