《主讲人王廷蔚.ppt》由会员分享,可在线阅读,更多相关《主讲人王廷蔚.ppt(54页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训主讲人王廷蔚 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训EJB是是J2EE规约中最重要的部分。规约中最重要的部分。EJB提供了提供了让客户端使用远程分布式对象的框架,极大地让客户端使用远程分布式对象的框架,极大地简化了具有良好的可扩充性的企业级应用的开简化了具有良好的可扩充性的企业级应用的开发。发。EJB规约规定了规约规定了EJB构件
2、(指符合构件(指符合EJB规约的构规约的构件)如何与件)如何与EJB容器(容器(container)进行交互,)进行交互,而而EJB 容器则提供诸如目录服务、事务管理、容器则提供诸如目录服务、事务管理、安全、连接池管理、容错等服务。安全、连接池管理、容错等服务。2 2J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训EJB的概念的概念 EJB不不是是一一种种产产品品,而而是是为为开开发发和和使使用用基基于于事事务务和和分分布布对对象象应应用用的的服服务务器器端端构构件件而而定定义义的的一一种种技技术术规约。规约。(1)符合符合EJB规约的构件是一组分布式的对象,它规约的构件是一组
3、分布式的对象,它们通过所谓们通过所谓EJB容器的控制,为分布式用户提供远程容器的控制,为分布式用户提供远程服务。服务。EJB规约保证了规约保证了EJB构件的可复用性。构件的可复用性。(2)EJB规规约约定定义义了了EJB构构件件与与EJB容容器器之之间间的的交交互互机机制制,描描述述了了EJB构构件件和和EJB容容器器在在运运行行时时的的行行为为,保证了保证了EJB构件在容器间的易移植性。构件在容器间的易移植性。(3)EJB规约定义了规约定义了EJB容器和容器和EJB服务器的标准模型,服务器的标准模型,各软件厂商可开发实现该模型的各种各软件厂商可开发实现该模型的各种EJB服务器产品。服务器产品
4、。3 3J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训EJB目标目标 EJB的的目目标标是是为为服服务务器器端端构构件件系系统统定定义义一一个个技技术规范。术规范。该规范能提供一个标准的、分布的、基于该规范能提供一个标准的、分布的、基于OO的体系结构的体系结构能屏蔽复杂的系统级功能需求能屏蔽复杂的系统级功能需求能兼容能兼容CORBA标准标准,有与非有与非 Java 应用之间的应用之间的互操作能力互操作能力 4 4J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训 EJB的特点的特点(1)清晰的体系结构清晰的体系结构支持多层应用体系结构和基于构件开发。支持多层应用
5、体系结构和基于构件开发。(2)简化的编程模型简化的编程模型EJB构构件件的的开开发发者者只只需需关关注注业业务务服服务务实实现现,一一些些复复杂杂的的任任务务如如生生命命周周期期管管理理、持持久久性性、事事务务处处理理、安安全全、一致性及资源管理等等都是由一致性及资源管理等等都是由EJB容器负责。容器负责。(3)通用的编程模型通用的编程模型提供各种服务的高层提供各种服务的高层API,Java是其编程语言。是其编程语言。(4)易移植性易移植性可以部署到任何兼容的可以部署到任何兼容的EJB容器中。容器中。(5)支持事务处理支持事务处理可以通过在代码外的描述来定义事务处理。可以通过在代码外的描述来定
6、义事务处理。5 5J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训(6)可扩展性可扩展性可可以以根根据据应应用用的的增增长长而而扩扩展展,EJB服服务务器器往往往往还提供了负载平衡。还提供了负载平衡。(7)安全性安全性由由EJB服务器提供资源的访问权限控制。服务器提供资源的访问权限控制。6 6J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训EJB体系结构体系结构 7 7J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训EJB体系结构体系结构 EEJB服务器服务器EJB服务器的主要功能服务器的主要功能:(1)管理管理EJB容器容器(EJB容器则管理容
7、器则管理Bean)(2)提供对操作系统服务的存取提供对操作系统服务的存取(3)提供提供Java相关的服务,特别是相关的服务,特别是(A)通过通过JNDI访问命名空间访问命名空间 (B)基于基于 OTS 的事务处理服务的事务处理服务 8 8J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训EJB容器容器EJB构构件件并并不不在在EJB服服务务器器的的顶顶部部直直接接执执行行。一一个个称称为为EJB容容器器的的中中间间件件在在EJB服服务务器器环环境境中中运运行行,EJB容容器器为为EJB构构件件提提供供操操作作环环境境。主主要要来来说说,EJB容器管理了以下的系统级问题:容器管理了
8、以下的系统级问题:(1)持久性(持久性(Persistence):):容器决定何时载入储存状态,又可分为容器决定何时载入储存状态,又可分为CMP(Container-ManagedPersistence)和和BMP(Bean-ManagedPersistence)。(2)生命周期管理(生命周期管理(LifeCycleManagement):):容器管理容器管理EJB构件的实例,使构件的实例,使EJB构件实现最大的效构件实现最大的效能和内存利用率。容器能够激活和钝化能和内存利用率。容器能够激活和钝化EJB构件、管构件、管理实例池等等。理实例池等等。安全性(安全性(Security):):9 9J
9、2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训(3)事务管理(事务管理(TransactionManagement):):容器负责管理分布式事务处理的复杂问题。容器负责管理分布式事务处理的复杂问题。部署描述文件定义了客户能够访问的不同的应部署描述文件定义了客户能够访问的不同的应用函数。容器只允许授权的客户访问这些受保用函数。容器只允许授权的客户访问这些受保护的函数。护的函数。远程连接(远程连接(RemoteConnectivity):):容器为远程连接,管理底层的通信问题,而且容器为远程连接,管理底层的通信问题,而且对对EJB构件的开发者和客户都隐蔽了通信问题。构件的开发者和客
10、户都隐蔽了通信问题。1010J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训EJB客户端客户端EJB客户端是指请求客户端是指请求EJB构件服务的应用程序。构件服务的应用程序。EJB规约为创建规约为创建EJB构件的客户接口定义了一套标准。这构件的客户接口定义了一套标准。这套标准主要包括:套标准主要包括:(1)EJBHome接口:接口:EJB Home接接口口为为客客户户机机创创建建、删删除除、查查找找EJBRemote接接口口对对象象的的句句柄柄提提供供了了相相应应的的操操作作。EJB客客户机使用户机使用JNDI来查找对来查找对EJBHome接口的引用。接口的引用。(2)EJBR
11、emote接口:接口:EJB客客户户机机通通过过EJBRemote接接口口调调用用EJB构构件件的的业业务务方法。方法。1111J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训EJB的组成的组成 EJB并不是一个单独的文件,它由一些类、接口、描并不是一个单独的文件,它由一些类、接口、描述文件和其他一些资源文件组成。述文件和其他一些资源文件组成。1)EJB类类Bean的第一部分是实现基本方法的类,这个类封的第一部分是实现基本方法的类,这个类封装了需要实现的商务逻辑。这个类需要遵循一些规装了需要实现的商务逻辑。这个类需要遵循一些规范,并要与一些严格定义的接口保持一致。不同类范,并要
12、与一些严格定义的接口保持一致。不同类型的型的Bean的要求也不一样。对于会话的要求也不一样。对于会话Bean,这个类,这个类主要包含一些商务逻辑;对于实体主要包含一些商务逻辑;对于实体Bean则主要包含则主要包含一些数据逻辑;而对于消息驱动一些数据逻辑;而对于消息驱动Bean,则主要包含,则主要包含一些消息处理逻辑。一些消息处理逻辑。1212J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训2)EJB对象对象EJB对对象象运运行行在在EJB容容器器中中,EJB容容器器通通过过Bean提提供供的的方方法法来来管管理理Bean。当当客客户户端端需需要要调调用用EJB时时,并并不不直直
13、接接与与Bean类类提提供供的的方方法法打打交交道道,客客户户端端的的调调用用被被EJB容容器器截截获获,而而EJB对对象象则则充充当当了了Bean类类实实例例的的代代理理。EJB对对象象是是根根据据Bean类类、某某些些接接口口和和某某些些描描述述文文件件,并并通通过过专专门门的的工工具具来来生生成成的的,它它负负责责和和一一些些中中间间层层API打打交交道道。EJB容容器器是是客客户户端端和和Bean类类之之间间的的中中间间层层,这这个个中中间间层层负负责责管管理理一一个个能能处处理理底底层层网络通信的对象,这个对象就是网络通信的对象,这个对象就是EJB对象。对象。EJB对象复制了对象复制
14、了Bean类的商业方法,并代表类的商业方法,并代表Bean类类来响应客户端的调用。来响应客户端的调用。EJB对象在物理上是对象在物理上是EJB容器容器的一部分。的一部分。1313J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训3)Remote接口接口Bean的的客客户户端端直直接接与与EJB对对象象打打交交道道,而而不不是是直直接接调调用用Bean类类的的方方法法,所所以以EJB对对象象必必须须复复制制 Bean类类 提提 供供 的的 每每 一一 个个 方方 法法,RemoteInterface告告诉诉EJB对对象象自自动动生生成成工工具具需需要要复复制制Bean类的哪些方法。
15、类的哪些方法。实现实现Remote接口的对象是接口的对象是EJB对象对象(javax.ejb.EJBObject),EJB对象首先要实现对象首先要实现EJBObject接口中定义的方法,然后还需要实接口中定义的方法,然后还需要实现用户定义的现用户定义的Remote接口中的方法。接口中的方法。1414J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训4)Local接口接口有有的的时时候候Bean的的调调用用并并不不没没有有经经过过网网络络,比比如如在在同同一一个个容容器器中中不不 同同 Bean之之 间间 的的 调调 用用,则则 不不 需需 要要 经经 过过stubskeleton
16、EJBObject中中间间层层APIBean实实例例返返回回的的过过程程,用用户户可可以以使使用用Local对对象象来来调调用用Bean实实例例。Local接接口是从口是从javax.ejb.EJBLocalObject继承的。继承的。5)Home对象和对象和Home接口接口Home对对象象的的主主要要功功能能是是:创创建建、查查找找、删删除除EJB对对象象。Home对对象象在在物物理理上上是是EJB容容器器的的一一部部分分,由由专专门门的的工工具具自自动动生生成成的。的。Home接口提供了容器自动生成接口提供了容器自动生成Home对象所需要的信息。从对象所需要的信息。从而使而使Home对象能
17、提供给对象能提供给EJB对象的初始化方法对象的初始化方法。1515J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训(3)RMI/IIOP或或RMI/JRMP协议:协议:RMI/IIOP或或RMI/JRMP是是EJB客户机与客户机与EJB服务器进行通信的标准协议,这些底层的分布服务器进行通信的标准协议,这些底层的分布式通信机制对于式通信机制对于EJB客户机和客户机和EJB构件开发者构件开发者都是透明的。都是透明的。1616J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训EJB的分类的分类EJB2.0定义了定义了3种类型的种类型的Bean。(1)会话会话(Sessi
18、on)Bean会会话话Bean用用于于描描述述商商业业处处理理过过程程,会会话话Bean可可以以作作为其他为其他Bean的客户端,调用其他的客户端,调用其他Bean的方法。的方法。(2)实体实体(Entity)Bean实实体体Bean用用于于描描述述数数据据,它它是是数数据据信信息息的的Java缓缓冲冲对对象象。实实体体Bean提提供供了了持持久久数数据据的的操操作作与与表表示示。可可以以同同时时与与多多个个客客户户机机进进行行交交互互,系系统统结结束束时时其其运运行行状态仍能保留。状态仍能保留。(3)消息驱动消息驱动(Message-driven)Bean消消息息驱驱动动Bean集集成成了了
19、Java消消息息服服务务(JMS)和和企企业业Bean的的功功能能。不不能能由由客客户户端端直直接接获获得得其其引引用用而而调调用用其方法,只能由系统消息来启动。其方法,只能由系统消息来启动。1717J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训开发一个开发一个EJB组件,必须创建以下四个文件:组件,必须创建以下四个文件:(1)EJBHome接口接口EJBHome接接口口定定义义了了一一些些方方法法供供EJB客客户户端端创创建建和和查找查找EJB对象。对象。(2)EJBRemote接口接口EJBRemote接接口口定定义义了了EJB的的业业务务方方法法,EJB所所有有的的业业
20、务务方方法法必必须须在在Remote接接口口定定义义才才能能够够被被客客户户端端访问。访问。(3)EJB类类EJB类实现了类实现了EJBRemote接口中定义的业务方法。接口中定义的业务方法。(4)Ejb-jar.xmlEjb-jar.xml包含了该包含了该EJB组件的配置信息。组件的配置信息。1818J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训EJB开发步骤开发步骤(1)声明远程接口声明远程接口(2)声明本地接口声明本地接口(3)实现实现Bean类类(4)部署部署J2EE应用应用(5)客户端编程客户端编程(6)编译及运行编译及运行 1919J2EEJ2EE快速进阶培训快速
21、进阶培训快速进阶培训快速进阶培训企业企业Bean的优点的优点首先首先EJB容器给企业容器给企业Bean提供了系统级服务,使提供了系统级服务,使Bean开发者可以专注于商务问题的解决。开发者可以专注于商务问题的解决。其次因为企业其次因为企业Bean而不是客户端实现商务逻辑,客而不是客户端实现商务逻辑,客户端开发者就可以致力于客户端表述的开发,而不户端开发者就可以致力于客户端表述的开发,而不必为实现商务规则或者数据库访问的日常处理而编必为实现商务规则或者数据库访问的日常处理而编码了。码了。最后,因为企业最后,因为企业Bean是可移植的,应用程序组装者是可移植的,应用程序组装者可以用现有的企业可以用
22、现有的企业Bean建立新的应用程序。这些应建立新的应用程序。这些应用程序可以在任何兼容的用程序可以在任何兼容的J2EE服务器上运行。服务器上运行。2020J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训何时需要使用企业何时需要使用企业Bean你的应用程序需要不断的升级。为了适应不断增长你的应用程序需要不断的升级。为了适应不断增长的用户,你可能需要将你的应用程序组件分布在多的用户,你可能需要将你的应用程序组件分布在多台不同的机器上运行。虽然并不仅仅是企业台不同的机器上运行。虽然并不仅仅是企业Bean可可以在不同的机器上运行,但企业以在不同的机器上运行,但企业Bean的运行位置对的
23、运行位置对于客户端始终是透明的。于客户端始终是透明的。需要用事务机制来保证数据完整性。企业需要用事务机制来保证数据完整性。企业Bean支持支持事务机制以提供对共享资源并发访问的管理。事务机制以提供对共享资源并发访问的管理。应用程序需要支持众多不同类型的客户端。只需要应用程序需要支持众多不同类型的客户端。只需要极少的几行代码,远程客户端就可以很容易的访问极少的几行代码,远程客户端就可以很容易的访问到企业到企业Bean。这些客户都可以很。这些客户都可以很“瘦瘦”并且在理论上并且在理论上可以是任意数量不同类型的客户端。可以是任意数量不同类型的客户端。企业企业Bean的分类的分类2121J2EEJ2E
24、E快速进阶培训快速进阶培训快速进阶培训快速进阶培训会话会话Bean 会话会话Bean表现连接到表现连接到J2EE服务器的一个单独的服务器的一个单独的客户端。客户端通过调用会话客户端。客户端通过调用会话Bean的方法来访的方法来访问部署在服务器上的应用程序。会话问部署在服务器上的应用程序。会话Bean完成完成客户端的请求,从而对客户端隐藏了服务器内客户端的请求,从而对客户端隐藏了服务器内复杂商务逻辑的执行过程。复杂商务逻辑的执行过程。状态管理模式状态管理模式:有状态会话有状态会话Bean 无状态会话无状态会话Bean 2222J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训有状态
25、会话Bean 一个对象的状态由它的成员变量(数据成员)一个对象的状态由它的成员变量(数据成员)的状态决定。有状态会话的状态决定。有状态会话Bean的成员变量描述的成员变量描述一个唯一的客户端一个唯一的客户端-会话会话Bean的关联状态。因的关联状态。因为客户端要与对应的会话为客户端要与对应的会话Bean进行对话,所以进行对话,所以这种状态通常被叫做会话状态。这种状态通常被叫做会话状态。2323J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训无状态会话Bean 无状态会话无状态会话Bean并不为客户端保留会话状态。并不为客户端保留会话状态。在客户端调用无状态会话在客户端调用无状态
26、会话Bean的方法时,对应的方法时,对应会话会话Bean的数据成员会描述这个调用状态,但的数据成员会描述这个调用状态,但仅仅只在该方法调用期间保持这个状态。当方仅仅只在该方法调用期间保持这个状态。当方法调用结束,状态就被清除。除了在方法调用法调用结束,状态就被清除。除了在方法调用期间,所有同一个无状态会话期间,所有同一个无状态会话Bean实例是等价实例是等价的,可以被容器分配给任一客户端。的,可以被容器分配给任一客户端。2424J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训有时,有时,EJB容器会在没有请求的时候把有状态容器会在没有请求的时候把有状态会话会话Bean保存在内存
27、(二级存储器保存在内存(二级存储器Second Storage)中。不管什么时候,没有请求时无状)中。不管什么时候,没有请求时无状态会话态会话Bean都不会被保存中。所以,无状态会都不会被保存中。所以,无状态会话话Bean会比有状态会话会比有状态会话Bean有更高的性能。有更高的性能。2525J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训何时需要会话何时需要会话Bean 通常,在出现以下几种情况时你需要用会话通常,在出现以下几种情况时你需要用会话Bean:在任何给定时间,只有一个客户端访问这在任何给定时间,只有一个客户端访问这个个Bean的实例。的实例。Bean的状态并不需要
28、持久保存,只在一个的状态并不需要持久保存,只在一个时间段(可能是几小时)内保持时间段(可能是几小时)内保持 2626J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训何时需要会话何时需要会话Bean在以下情况下,建议采用有状态会话在以下情况下,建议采用有状态会话Bean:Bean需要描述一个于特定客户端的会话状态需要描述一个于特定客户端的会话状态 Bean需要在客户端的多个方法调用之间保存调需要在客户端的多个方法调用之间保存调用信息用信息 Bean作为应用程序的其他组件和客户端的中介作为应用程序的其他组件和客户端的中介者,呈现一个简单化的视图给客户端者,呈现一个简单化的视图给客户
29、端2727J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训如果你的应用符合以下特性,为了得到更高的如果你的应用符合以下特性,为了得到更高的性能你应该选择无状态会话性能你应该选择无状态会话Bean:Bean的状态不包含客户端相关的数据的状态不包含客户端相关的数据在一个单一方法调用中,在一个单一方法调用中,Bean已经可以为客户已经可以为客户端完成所需要的工作。例如你可以用无状态会端完成所需要的工作。例如你可以用无状态会话话Bean发一封邮件确认网络订单。发一封邮件确认网络订单。Bean需要从数据库获取一些客户端经常访问需要从数据库获取一些客户端经常访问的只读数据。你可以用这样的的
30、只读数据。你可以用这样的Bean来访问数据来访问数据表中代表这个月已经卖出的产品的行。表中代表这个月已经卖出的产品的行。2828J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训EntityBean 一个一个EntityBean描述一个持久存储的商业对象。描述一个持久存储的商业对象。商业对象的例子如:消费者,订单和产品等。商业对象的例子如:消费者,订单和产品等。在在J2EE SDK中持久存储设备是一个关系型数据中持久存储设备是一个关系型数据库。最典型的情况是一个库。最典型的情况是一个EntityBean又一个在又一个在底层数据库中有一个表相对应,而底层数据库中有一个表相对应,而E
31、ntityBean的每一个实例对应表中的一行数据。的每一个实例对应表中的一行数据。2929J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训EntityBean和会话和会话Bean的不同之处的不同之处持久性持久性 共享访问共享访问 主键主键 关系关系 3030J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训持久性持久性 因为因为EntityBean的状态保存在存储设备中,所的状态保存在存储设备中,所以它具有持久性。以它具有持久性。持久性是指持久性是指EntityBean的状的状态跨越应用程序和态跨越应用程序和J2EE服务器处理过程的生存服务器处理过程的生存期期 3
32、131J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训共享访问共享访问 EntityBean可以被多客户端所共享。由于多个可以被多客户端所共享。由于多个客户端可能同时去修改同一数据,所以在调用客户端可能同时去修改同一数据,所以在调用过程中事务机制非常重要。典型情况下过程中事务机制非常重要。典型情况下EJB容容器都支持事务机制。在这种情况下,可以在器都支持事务机制。在这种情况下,可以在Bean的部署描述符中确定它的事务属性。开发的部署描述符中确定它的事务属性。开发者不必为事务界限编码者不必为事务界限编码容器会自动划分事容器会自动划分事务界限。务界限。3232J2EEJ2EE快速进
33、阶培训快速进阶培训快速进阶培训快速进阶培训主键主键 每一个每一个EntityBean实例都有一个唯一对象标识。实例都有一个唯一对象标识。例如一个特定的例如一个特定的EntityBean实例可能用一个特实例可能用一个特定的数字来标识。这个唯一标识就是主键,可定的数字来标识。这个唯一标识就是主键,可以让客户端找到对应的以让客户端找到对应的EntityBean实例。实例。3333J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训关系关系 象关系数据库中的一个表一样,象关系数据库中的一个表一样,EntityBean之之间也会有关系。例如在一个学校登记系统中,间也会有关系。例如在一个学校登
34、记系统中,表示学生的表示学生的StudentEJB和表示课程的和表示课程的CourseEJB因为学生必须登记上课而产生关系。因为学生必须登记上课而产生关系。3434J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训容器管理的持久性(容器管理的持久性(CMP)容器管理的持久性(容器管理的持久性(CMP)是指)是指EJB容器负责容器负责处理所有的数据库访问。处理所有的数据库访问。EntityBean的代码不的代码不包含任何数据库访问语句(包含任何数据库访问语句(SQL)。所以)。所以Bean的代码不会受到低层存储机制(数据库)的约的代码不会受到低层存储机制(数据库)的约束。由于这样的
35、灵活性,即使把束。由于这样的灵活性,即使把EntityBean部部署到使用不同数据库的不同的服务器上,也不署到使用不同数据库的不同的服务器上,也不需要修改代码和重新编译。需要修改代码和重新编译。3535J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训抽象数据模式抽象数据模式 持久性字段持久性字段 EntityBean的持久性字段都存储在底层的数据存储设的持久性字段都存储在底层的数据存储设备中。它们共同组成了备中。它们共同组成了Entity Bean的状态。在运行时,的状态。在运行时,EJB容器自动地在数据库和容器自动地在数据库和EntityBean之间同步这些状之间同步这些状态
36、。在部署的时候,典型情况容器会把态。在部署的时候,典型情况容器会把EntityBean映映射为数据库中的一张对应表而持久性字段映射为表射为数据库中的一张对应表而持久性字段映射为表的字段(的字段(column列)。列)。关系关系 一个关系字段就像数据库的一个外键,它识别一个一个关系字段就像数据库的一个外键,它识别一个关联的关联的Bean。3636J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训何时需要何时需要EntityBeanBean代表一个商务实体而不是一个过程。例如代表一个商务实体而不是一个过程。例如表示信用卡的表示信用卡的CreditCardEJB要做成要做成Entity
37、Bean,而信用卡核实的,而信用卡核实的VerifierEJB就只能做成会话就只能做成会话Bean。Bean的状态是需要持久存储的。如果的状态是需要持久存储的。如果Bean的实的实例例结束了或者结束了或者J2EE服务器关闭,它的状态依然存服务器关闭,它的状态依然存在,只是回到向数据库这样的存储设备睡觉去在,只是回到向数据库这样的存储设备睡觉去了。了。3737J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训Message-Driven Bean Message-DrivenBean是一种可以让应用程序异是一种可以让应用程序异部处理消息的企业部处理消息的企业Bean。它以。它以JM
38、S消息监听者消息监听者的方式工作,很像一个事件监听者,只是用消的方式工作,很像一个事件监听者,只是用消息代替了事件。消息的发送者可以是任意息代替了事件。消息的发送者可以是任意J2EE构件构件应用程序客户端、别的企业应用程序客户端、别的企业Bean或者或者Web应用应用或者一个或者一个JMS应用程序或者别的非应用程序或者别的非J2EE系统。系统。3838J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训与会话与会话Bean、EntityBean的不同之处的不同之处Message-DrivenBean与另外两种企业与另外两种企业Bean最明最明显的区别是客户端访问显的区别是客户端访问
39、Message-DrivenBean不不需要通过接口需要通过接口(接口定义将在下一节介绍接口定义将在下一节介绍)。就。就是说它只需要一个是说它只需要一个Bean类文件。类文件。3939J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训特点特点Message-DrivenBean在有些方面和在有些方面和无状态会话无状态会话Bean相相似:似:它的实例不保持数据或者与特定客户端的会话状态它的实例不保持数据或者与特定客户端的会话状态 一个一个Message-DrivenBean的所有实例都是等价的,容的所有实例都是等价的,容器可以把消息分给任何一个实例处理。容器可以通器可以把消息分给任
40、何一个实例处理。容器可以通过实例池实现同时处理多个消息流。过实例池实现同时处理多个消息流。单个单个Message-DrivenBean可以处理多个客户端发送的可以处理多个客户端发送的消息消息4040J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训何时需要何时需要Message-DrivenBean用会话用会话Bean和和EntityBean也可以发送和接收也可以发送和接收JMS消息,但它们是同步的。而很多时候同步并不消息,但它们是同步的。而很多时候同步并不是必要的,这时候同步反而会强占很多服务器是必要的,这时候同步反而会强占很多服务器资源,这样我们可以采用异步方式来处理以减资源
41、,这样我们可以采用异步方式来处理以减少资源消耗。需要异步消息处理就是用少资源消耗。需要异步消息处理就是用Message-DrivenBean。4141J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训定义客户端访问接口定义客户端访问接口 远程远程本地访问本地访问 4242J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训远程访问远程访问 它可以运行在一个与它访问的企业它可以运行在一个与它访问的企业Bean不同的不同的机器和一个不同的机器和一个不同的Java虚拟机虚拟机(Java virtual machine JVM)环境中。但并不是必须的。环境中。但并不是必须的。
42、它可以是一个它可以是一个Web应用或者一个应用或者一个J2EE的应用程的应用程序客户端,也可以是其他的企业序客户端,也可以是其他的企业Bean。对于远程客户端,企业对于远程客户端,企业Bean的位置是透明的。的位置是透明的。4343J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训4444J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训本地接口本地接口它必须和被调用的企业它必须和被调用的企业Bean在同一个在同一个java虚拟虚拟机环境中。机环境中。它可以是它可以是Web应用或者其他的企业应用或者其他的企业Bean。对于本地客户端,企业对于本地客户端,企业Bean
43、的位置是不透明的。的位置是不透明的。它们通常是访问它们通常是访问CMP的其他的其他EntityBean 4545J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训CMR可以分为四类可以分为四类 Container-ManagedRelationships一一对对一一:一一个个EntityBean的的实实例例对对应应另另一一个个EntityBean的的单单个个实实例例。例例如如,对对于于一一个个存存储储箱箱存存放放一一个个小小部部件件的的物物资资仓仓库库模模型型,StorageBinEJB和和WidgetEJB的关系就是一对一。的关系就是一对一。一一对对多多:一一个个EntityB
44、ean实实例例对对应应另另一一个个EntityBean的的多多个个实实例例。例例如如,一一张张订订单单可可以以有有很很多多的的明明细细项项目目,在在order应应用用中中,OrderEJB和和LineItemEJB的关系就是一对多。的关系就是一对多。多对一:多对一:多多对对多多:两两个个EntityBean中中任任一一EntityBean的的单单个个实实例例都都可可能能对对应应另另一一个个的的多多个个实实例例。例例如如:在在学学校校里里,一一门门课课有有很很多多学学生生上上,而而每每一一个个学学生生都都不不会会只只上上一一门门课课。因因此此在在enrollment应应用用中,中,CourseE
45、JB和和StudentEJB的关系就是多对多。的关系就是多对多。4646J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训CMR的方向的方向只有两种可用的方向:单向或者双向。在双向只有两种可用的方向:单向或者双向。在双向的关系中,每一个的关系中,每一个EntityBean都有对另一个都有对另一个EntityBean引用的关系字段。通过关系字段,引用的关系字段。通过关系字段,EntityBean可以访问相关的可以访问相关的EntityBean对象。对象。如果一个如果一个EntityBean有关系字段,我们通常会有关系字段,我们通常会说它说它“知道知道”它的关联对象。它的关联对象。该
46、关系的靶子。该关系的靶子。4747J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训两种访问方式的抉择两种访问方式的抉择CMR:如果一个企业:如果一个企业Bean是是CMR的靶子,那么它必须的靶子,那么它必须实现本地访问。实现本地访问。企业企业Bean之间的关系是紧耦合还是松耦合:最好考之间的关系是紧耦合还是松耦合:最好考虑在紧耦合的企业虑在紧耦合的企业Bean之间使用本地访问,会大大之间使用本地访问,会大大的提高性能。的提高性能。客户端的类型:如果企业客户端的类型:如果企业Bean是被是被J2EE应用程序客应用程序客户端访问,那么它必须允许远程访问。户端访问,那么它必须允许远程
47、访问。组件部署:在分布式场景下,企业组件部署:在分布式场景下,企业Bean必须允许远必须允许远程访问。程访问。4848J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训企业企业Bean的的“内容内容”部署描述符文件:一个描述企业部署描述符文件:一个描述企业Bean的持久性类型的持久性类型和事务属性等信息的和事务属性等信息的XML文件。文件。企业企业Bean的类文件:实现接口中定义的方法。的类文件:实现接口中定义的方法。接口:对于远程调用需要实现接口:对于远程调用需要实现Remote和和Home接口,接口,而本地调用需要实现而本地调用需要实现Local和和Local Home接口。
48、而这些接口。而这些Message-DrivenBean是例外,它不需要任何接口。是例外,它不需要任何接口。辅助类:企业辅助类:企业Bean类需要的其他类文件,像异常类类需要的其他类文件,像异常类和工具类等等和工具类等等 4949J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训企业企业Bean的命名约定的命名约定 企业名的命名约定项目约定实例企业Bean命名(DD)EJBAccountEJBEJB的存档文件JAR命名(DD)JARAccountJAR企业Bean主类命名BeanAccountBeanHome接口命名HomeAccountHomeRemote接口命名AccountL
49、ocalhome接口命名LocalHomeLocalAccountHomeLocal接口命名LocalLocalAccount抽象数据模式命名(DD)Account5050J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训企业企业Bean的生存周期的生存周期 有状态会话有状态会话Bean的生命周期的生命周期5151J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训无状态会话无状态会话Bean的生命周期的生命周期 5252J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训Entity Bean的生命周期的生命周期5353J2EEJ2EE快速进阶培训快速进阶培训快速进阶培训快速进阶培训Message-Driven Bean的生命周期的生命周期5454