⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 16. ejb note.txt

📁 在达内培训java笔记
💻 TXT
📖 第 1 页 / 共 4 页
字号:
EJB 3.0
Sun App/JBoss/Weblogic
-----------------------------------------------------------
Day1

1. What is EJB
   EJB(Enterprise JavaBean)是JavaEE应用的业务层技术标准, 以这项技术开发的组件叫做EJB组件,常常简称EJB
   EJB架构是一个用于开发和部署基于组件的分布式业务应用的组件架构。
   采用EJB架构编写的应用是可伸缩的、事务性的、多用户安全的。
   可以一次编写这些应用,然后部署到任何支持EJB规范的应用服务器平台上。

   特点(和JavaBean比较):
    1)提供远程访问的能力
    2)可扩展、可插拔的能力
    3)必须在EJB服务器上运行, 可享受服务器提供的事务、安全等服务
      (Jboss, Weblogic, Websphere, Sun Application server) 

名词解析:
   1.分布式计算:
       1)把大任务分成小块,分发给大家分别地做,再把每个人的计算结果汇总。
         特点:分解工作,减轻成员的负担,成员之间做到职责分明。
       2)充分利用网络上空闲的计算机的计算能力。
     分布式组件:
       1)分布对象技术是伴随网络而发展起来的一种面向对象的技术。
         以前的计算机系统多是单机系统,多个用户是通过联机终端来访问的,没有网络的概念。
         网络出现后,产生了C/S、B/S的计算服务模式。
       2)分布式对象技术主要使用了面向对象技术的封装性,组件可以分布在网络的任何位置。
         对外界来说,它所需关心的只是组件的界面(接口),至于内部是如何实现的则无需考虑,
         远程客户通过方法调用来访问它。这是分布式对象技术和传统的面向对象技术的最大不同点。
   2.组件:可独立发布的二进制单元
   3.框架,即framework。其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统;
         代表:Struts,Spring,Hibernate…
   4.中间件,是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源;
         代表:Weblogic,WebSphere,Sun App Server…
   5.容器:
     EJB的家。 离开容器,EJB就失去了它的生命和意义

   EJB分布式对象的基础
       JRMI(Java Remote Method Invocation) (远程方法调用) 
           --- 使用远程消息交换协议JRMP(Java Remote Messaging Protocol) 进行通讯
       CORBA对象调用
           --- 使用IIOP(Internet Inter-ORB Protocal) 


2. Why EJB
   简化大型分布式系统的开发过程。
     1)利用网络中多台计算机的计算能力,构建瘦客户端(简化分布式访问) 
     2)使用EJB服务器提供的系统级的企业服务(事务、安全、对象池....),开发人员需要写业务组件
     3)EJB组件具有热部署的能力(可插拔) 
     4)可以扩展现有系统的JavaBean
   优点:可维护性、重用性、可扩展性、可插拔性
    1)缩短开发时间:  编程人员可将先行开发的部件装配到新的程序中,从而加速了新程序的开发
    2)降低集成费用:  在将组件集成为一个完整的方案时,不同开发商采用了一致的标准接口,减少了特殊的定制工作
    3)开发更具灵性:  只需简单调整全部应用的一些组件,即可为企业不同领域的应用提供特定的解决方案
    4)降低维护费用:  各组件的软件功能是相对独立的,在维护和升级一个组件时,不必变动整个应用。维护简便


3. When to use EJB
   少量的需要分布式技术支持的大型项目,比如:
   1)应付巨大的客户访问量     2)和已有的系统做集成

   EJB可以做什么?
    1)服务器端的业务层框架    2)遵循EJB规范的标准组件    3)分布式组件
    4)持久化数据支持         5)事务性支持             6)支持并发多用户安全

技术选择:
    表现层技术:Servlet, JSP     MVC框架:Struts,Tapestry,MyFaces...
    业务层组件:JavaBean         集成层: Spring,EJB 
    持久层技术:JDBC             ORM框架:Hibernate,TopLink,OpenJPA,EJB JPA...
常见技术组合:
    Struts/MyFaces + EJB(JDBC) 
      需要分布式技术的大型项目,大并发访问量,性能要求高
    Struts/MyFaces + Spring + Hibernate
      多数中小型项目

EJB 3.0
   1)会话Bean:对业务逻辑建模
     分类: 有状态,能分辨不同的客户;无状态,不能分辨不同的客户
   2)实体(Entity)
        POJO
   3)消息Bean
     支持异步通信。没有直接的客户端,由消息触发(驱动)


4. First EJB开发步骤:
   EJB组件开发:
    1)安装JBoss,并启动
      默认端口:8080;可以修改 %jboss_home%/server/default/deploy/jboss-web.deployer 的server.xml
      把 <Service name="jboss.web"> 的 <Connector port="8080" ... 改成想要的就行
    2)开发一个普通的Java组件
    3)classpath加上Java EE 5 Libraries(MyEclipse自带类库) 
    4)加EJB的标注,声明为EJB组件
      IHello.java (接口标注:@Remote ) 
      HelloBean.java (无状态会话bean标注:@Stateless ) 
    5)编译,在 FirstEJB/bin 运行命令: jar cvf HelloEJB.jar .
    6)拷贝HelloEJB.jar到%jboss_home%/server/default/deploy目录下
      这是正常发布方法。需要启动%jboss_home%/bin/run.jar (win下用run.bat,linux用run.sh启动) 
    7)确认组件已部署(控制台没有异常) 

   EJB客户端开发:
    1)classpath加上jbossall-client.jar(这个包在 %jboss_home%/client/ 下) 
      引入这个jar包之后才可以初始化上下文(context) 
    2)引入IHello.class
    3)Client.java

5. JNDI(Java 命名和目录服务接口) 
   JNDI为JavaEE平台提供了一个通过名字查找网络中一切对象的标准机制
   是一套为开发者提供通过名字方便查找用户、机器、网络、对象和服务的 Java API
   JNDI实现了EJB对象位置的透明性,客户端只要能访问JNDI服务,便可以调用EJB服务。
   1) 部署ejb的时候,容器将会把EJB对象绑定到命名服务
   2) 像JDBC可以访问不同的数据库,可以通过JNDI访问不同的JNDI服务
      a.设置上下文工厂
      b.设置JNDI服务提供者的url
   3) JNDI的API的使用
      初始化上下文(Context ctx = new InitialContext() ) 
          --- 不同的应用服务器初始化上下文的工厂类是不同的,协议也可能不一样!!!查文档吧
      三种方式初始化上下文:
        a)设置系统属性(Test.java中)
          System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
                org.jnp.interfaces.NamingContextFactory.class.getName());
          上句也可以这样写: System.setProperty("java.naming.factory.initial",
                "org.jnp.interfaces.NamingContextFactory");
          System.setProperty(Context.PROVIDER_URL, "localhost"); 
                //"localhost" 也可以写: jnp://127.0.0.1:1099
        b)通过命令行设置
        c)在类路径下添加jndi.properties  ---名字不能修改!! 
         jboss中:
          java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
          java.naming.provider.url=jnp://localhost:1099
         Sun App Server 9.0 中:
          java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory
          java.naming.provider.url=iiop://127.0.0.1:3700
   4) JNDI API(javax.naming.Context接口) 主要方法的使用
      void bind(String name, Object object);   //将名称绑定到对象。如果已经存在,则抛出异常。
      void rebind(String name, Object object); //将名称绑定到对象。如果存在,重写所有绑定。
      void rename(String oldName,String newName); //把某一个已经绑定的旧名称改新名字
      void unbind(String name); //取消指定对象的绑定。
      Object lookup(String name); //查找指定的对象。
      注意:这4个方法都 throws NamingException;
   5) JBoss下配置JNDI名称
      在jboss下配置bean的JNDI名可以采取三种方式: 
      第一种:也是默认的,"beanname/remote" 
      第二种:使用@RemoteBinding注释。(导入jboss-annotations-ejb3.jar)
             @RemoteBinding(jndiBinding="jndiName")  --- 这种方式不好,与JBoss耦合!!!
      第三种:使用jboss.xml文件,此文件要放在src\META-INF目录下。具体内容见下面:
<jboss>   
   <enterprise-beans>   
      <session>   
         <ejb-name>BeanName</ejb-name>   
         <jndi-name>jnidname</jndi-name>   
      </session>     
   </enterprise-beans>   
</jboss> 


6. 远程调用的原理
   1)使用Socket进行网络通信
   2)使用代理模式,使得调用服务器端的远程对象,看起来像调用本地对象一样
   3)客户端的代理叫做Stub(桩) 
   4)服务端的Skeleton(框架) 
   5)调用过程: Client -> Stub(远程接口) -> Skeleton -> EJB Object(也叫远程对象)

   RMI简介
    1)RMI(Remote Method Invocation,远程方法调用)是用Java在JDK1.1中实现的,它增强了开发分布式应用的能力。
    2)Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。
    3)RMI目前使用Java远程消息交换协议JRMP(Java Remote Messaging Protocol)进行通信。
    4)用Java RMI开发的应用系统可以部署在任何支持JRE(Java Run Environment,Java运行环境)的平台上。但由于JRMP是专为Java对象制定的,因此,RMI 对于用非Java语言开发的应用系统的支持不足。不能与用非Java语言书写的对象进行通信。

   RMI架构
    1) Stub/Skeleton层
       该层提供了客户程序和服务程序彼此交互的接口。
    2) 远程引用层(Remote Reference) 
       中间层,负责处理远程对象引用的创建和管理。
    3) 传输协议(Transport Protocal) 
       提供了数据协议,用以通过线路传输客户程序和远程对象间的请求和应答。

   编写RMI的程序
    1) 定义远程接口
       通过扩展 java.rmi.Remote 接口,并定义所需的业务方法实现
       远程方法必须声明抛出 java.rmi.RemoteException 异常;或者这异常的父类
       远程方法的参数和返回值必须是实现序列化接口的类(基本类型也可以) 
    2) 定义远程接口的实现类
       即实现上一步所定义的接口,给出业务方法的具体实现逻辑。
    3) 编写运行 Skeleton 引导程序注册RMI服务 (定义协议,并等待客户端调用) 
    4) 编写客户端 Stub;(遵守协议的端口、读取发送信息的方式;供调用) 
       使用动态类加载机制(反射机制) 
    5) 编写客户端Client,调用远程对象


7. Local接口和EJB组件的依赖注入
   1)本地接口: @Local
   2)EJB组件的依赖注入:@EJB(mappedName="EJB Name/remote") 

  ejb客户端开发步骤:
    1)引入ejb远程接口(a方式.引入ejb工程, b.把远程接口直接Copy过来) 
    2)引入jbossall-client.jar
    3)保证src目录下面有一个jndi.properties
    4)客户代码,如:Test.java

8. Remote 和 Local
    Local(默认方式)            Remote
    使用@Local标注             使用@Remote标注
    只能本地调用,远程不行        既可以本地调用,也可以远程调用
    避免网络交换过程             无法避免网络交换过程,性能差
    允许传递未序列化的参数        不允许传递未序列化的参数

    注意:要调用实现Local接口的sessionbean,客户端程序和EJB必须在同一JVM的服务器环境。
    远程客户端也可以通过 与EJB在同一JVM的代理去访问(如Stub/Skeleton;或者用一个@Remote的Bean间接调用) 

-----------------------------------------------------------
Day2

1. EJB的Web客户
   在web项目中调用EJB
   web项目在tomcat部署:
     web项目中必须包含远程接口
     web项目必须导入jbossall-client.jar
   web项目在jboss部署: (在同一台服务器上部署) 
     web项目: 不需要 远程接口和jbossall-client.jar(注意: 一个JBoss中不能出现两个相同的类) 

2. EJB编程模型

3. EJB的分类(2.X分类) 
   1)Session Bean(会话Bean)  (Stateless和Stateful)       --- 对业务逻辑建模
   2)Entity Bean(实体Bean,3.0使用JPA替代)  -- POJO        ---对领域模型建模
   3)Message Driven Bean(消息驱动Bean)                   --- 支持异步通讯,没有直接的客户端,由消息驱动

4.EJB的系统服务
   1)事务
   2)安全
   3)对象池


5. 部署描述符和标注
   早期版本使用配置文件开发EJB, EJB3.0使用Annotation简化开发
   1)开发阶段:开发人员使用Annotation开发
   2)部署阶段:部署人员使用部署描述符部署(将覆盖annotation配置) 

   部署描述符:
    1) 标准部署描述符:ejb-jar.xml
       <ejb-jar version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd ">

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -