韩伟力内容业务逻辑层处理技术平台技术展示层接口处理数据层接口处理业务逻辑层处理技术业务封装技术业务组合技术安全技术业务封装技术将业务和数据封装成相对独立的、可集成的单元JavaBean/EJBSOA&WebServicesEJB概述EJB2.X•组成•编程模型•缺陷EJB3.0•组成•编程模型•测试EnterpriseJavaBeanEJB概述EnterpriseJavaBean基于Java的服务器端组件框架技术用于构建企业级、分布式组件应用EJB概述降低开发远程分布式应用程序的难度使开发人员专注于业务逻辑的开发提供组件级安全性快速、轻松构建服务器端组件便携性可重用性持久性良好的伸缩性(适应不同硬件资源)EJB的优势EJB2.xEJBJar文件Bean类EJB对象远程/本地/Home接口部署描述符容器厂商专有文件Bean类:组件主要业务逻辑实现EJB对象:拦截调用请求,隐式中间件服务,提供客户视图远程/本地接口:暴露给远程/本地用户Home接口:EJB对象生命周期接口(创建销毁)部署描述符:XML文档,声明中间件服务需求容器厂商专有文件:EJB服务器提供的专有特性EJB-Jar:包含构成EJB组件的所有内容EJB2.x开发构成EJB组件的Java源文件:远程和本地接口、企业Bean类、Home接口手工完成部署描述符通过具体EJB容器的部署建议完成EJB-Jar的部署配置EJB服务器测试代码EJB2.x编程模型本地客户EJBHomeEJB对象EJBBean类隐式中间件服务本地接口1.创建EJB对象2.获得EJB对象3.返回EJB对象引用4.通过本地接口调用方法5.调用隐式中间件API6.调用Bean类方法7.返回结果8.调用隐式中间件API9.返回调用结果一.开发复杂性强制要求每个会话Bean在Home接口中提供create()方法开发者需要分别实现本地接口和远程接口开发者需要在SessionBean接口实现挂起和激活Bean实例的容器回调方法开发者需要直接同JNDI(Java命名和目录接口)API交互EJB2.x的缺陷二.部署复杂性XML文档不利于开发者编辑破坏EJB组件在EJB容器之间的可移植性三.测试复杂性在容器中测试,需要将测试脚本部署到JavaEE容器中在容器外测试,要求EJB组件已经实现远程接口EJB2.x的缺陷EJBJar文件Bean类远程/本地业务接口(可选)标准部署描述符(可选)容器厂商专有文件EJB3.0无状态会话Bean1.会话Bean有状态会话Bean2.消息驱动Bean(MDB)3.实体BeanBean类含有业务逻辑的可重用组件,用于业务过程存活短暂的内存对象,其存活期由客户会话的持续期决定不是持久化对象,不保存到永久化存储源不能够在多客户之间共享,不表示数据库中的数据会话Bean服务的业务过程只需单个业务方法即可完成,EJB组件不需维护方法调用期间的状态变更信息EJB容器维护Bean实例池所有的实例对于客户而言都是等效的,是可重用的无状态会话Bean无状态会话Bean生命周期Bean实例不存在Bean实例池(所有实例全部等效)1.实例化新的实例2.根据部署描述符注入实例上下文依赖(可选)3.执行PostConstruct回调,进行初始化(可选)4.客户调用业务方法5.执行PreDestroy回调(可选)服务的业务过程能够延伸到多个方法请求或事务中的Bean,需要为单个客户保存状态信息具体实现:不是为一个会话一直保留一个Bean实例,而是在实例池中维护若干个处于不同状态的Bean实例,并在必要时挂起或激活某个会话的状态有状态会话Bean(1)以购物网站为例,顾客需要把商品添加到购物篮中,每次往购物篮中添加新商品,都会触发新的请求操作,Bean必须保留用户的状态但是,如果客户长时间没有进行下一步动作,EJB容器为了节省资源,将调用Bean实例的回调方法,释放该实例占有的资源,将状态序列化,然后挂起到永久存储源上。需要时再反序列化并激活状态有状态会话Bean(2)有状态会话Bean生命周期Bean实例不存在就绪态挂起1.实例化新的实例2.注入上下文(可选)3.初始化(可选)客户调用业务方法调用PrePassivate(可选)调用PostActivate(可选)超时达到实例池上限或客户要求实现某种类型的消息监听接口不存在远程或本地业务接口,客户不能直接与其交互,只能借助消息提供者(例如JMS=JavaMessageService)的API无状态单线程,单个实例仅能处理单个消息支持异步消息通信和持久化订阅(即使发布消息时订阅者不处于运行态,也能够收到消息)消息驱动Bean(1)用户调用基于JMS的消息驱动Bean消息驱动Bean(2)客户EJB服务器消息驱动Bean实例池Bean实例JMS目的地发送消息消息驱动Bean生命周期Bean实例不存在就绪态1.实例化新的实例2.根据部署描述符注入实例上下文依赖(可选)3.执行PostConstruct回调,进行初始化(可选)容器调用onMessage()5.执行PreDestroy回调(可选)用于建模业务数据,是缓存数据库信息的Java对象实体Bean包含用于访问数据的代码,容器自动生成数据访问调用持久化对象,即使应用程序结束依然存在允许多客户端同时访问,需结合事务处理使用可重用性高实体Bean实体Bean生命周期不存在实例池就绪态setEntiryContext()ejbAcivate()ejbPassivate()Remove()unsetEntityContext()Bean提供给客户的调用接口,使得客户可以针对接口编程会话Bean必须提供,实体Bean可选,消息驱动Bean不能直接同客户交互可以单独实现或者根据注释自动生成。如果自动生成,Bean所有的公共方法都将包含在内彻底消除了Home接口、对象接口和组件接口,简化开发远程/本地业务接口请求容器厂商所提供的标准容器服务(隐式中间件服务,如事务、安全性、并发等)的XML文档1.0和2.x中必不可少,3.0定义了部署元数据(注释)来替代部署描述符,部署工作可以用Java元数据来完成但是,EJB3.0仍然保留部署描述符,当部署描述符和元数据冲突的时候,部署描述符会覆盖元数据的配置信息标准部署描述符请求EJB容器厂商所提供的增值服务(如负载均衡、群集等)的部署描述符或元数据部署描述符或元数据的格式、命名都依赖于容器厂商容器厂商专有文件编写业务接口代码、Bean类提供部署描述符创建EJB-Jar文件并部署到容器中测试代码EJB3.0编程模型本地客户业务接口本地客户视图1.调用方法EJB容器生成的包裹类2.调用包裹类中相应的方法EJBBean类隐式中间件服务3.调用业务逻辑前调用中间件服务4.调用Bean类中对应的业务方法5.调用业务逻辑后调用中间件服务6.从方法调用中返回代码测试:测试特定代码,确保代码行为同预想一致。可通过单元测试实现。回归测试:修改旧的代码后,重新测试确保没有引入新的错误或导致其他代码出错功能测试:即黑盒测试,测试软件功能负载测试:测试数据在超负荷环境下运行,程序是否能够承担测试EJBJUnit框架扩展JUnit提供的基类来完成测试代码Mock对象框架Mock对象模拟真实对象的外在行为来替代接口或类,通过观察其他对象同Mock对象的交互,来比较调用结果和预期结果。EJB常用单元测试框架SOA&WebServices2023/3/6服务的概念W3C在其SOA规范中,对服务的定义如下一个服务是一个动作的集合,这个集合从另一个角度构成了服务的提供者和服务的请求者。♦一个服务运行一个或多个任务♦一个服务拥有一个服务描述♦一个服务拥有一个或多个服务提供者♦一个服务对应零个或多个服务请求者♦一个服务有一个标识符♦一个服务有一个服务语义♦一个服务有一个服务接口♦一个服务有一个或多个表现为服务提供者的智能代理实现♦一个服务通过消息交换而调用♦一个服务有一个服务运行模型2023/3/637关键技术的发展历程2023/3/638SOA的基本特征服务的封装(encapsulation)将服务封装成用于业务流程的可重用组件的应用程序函数服务的重用(reuse)服务只工作在特定处理过程的上下文(context)中,独立于底层,实现和客户需求的变更服务的互操作(interoperability)在SOA中,通过服务之间既定的通信协议进行互操作服务是自治的(Autonomous)功能实体服务是由组件组成的组合模块,是自包含和模块化的2023/3/639SOA的基本特征服务之间的松耦合(LooslyCoupled)服务请求者不知道提供者实现的技术细节,服务请求者往往通过消息调用操作,请求消息和响应,使会话一端的软件可以在不影响另一端的情况下发生改变,前提是消息模式保持不变服务都是粗粒度分布不必进行多次的通讯,提高了服务通讯的效率从事务控制的角度来说,包含若干细粒度的请求的单一事务更加容易进行提交和回滚2023/3/640SOA的基本特征服务间的通讯和调用通过请求/相应、单向异步、发布/订阅等模式实现服务是位置透明的(locationtransparency)服务是针对业务需求设计的。需要反应需求的变化,即所谓敏捷(agility)设计。要想真正实现业务与服务的分离,就必须使得服务的设计和部署对用户而言是完全透明的2023/3/641SOA的优势SOA带给IT界的快速应用集成自动化业务流程支持多渠道服务(multi-channelaccess)的应用面向服务开发的优点重用效率:通过组合现有的服务与技术的松耦合职责的划分:业务人员和技术人员2023/3/642面向对象与面向服务面向对象方法的构型抽象层次低细粒度耦合性较紧程序对象为单元面向执行环境面向服务交换的消息抽象层次高粗粒度松耦合服务为单元面向业务2023/3/643IT架构概况ProcessOrchestrationBusinessIntelligenceServicesServiceRegistryB2BInteractionsCollaborationToolsPortalServiceApplications&DataApplicationfunctionsarebuiltascomponents(orservices)thatareloosely-coupledandwell-definedtosupportinteroperability,andtoimproveflexibilityandre-useIBM’sESBGraphicSOA的基础-ESB(EnterpriseServiceBus)将现存的企业信息系统标准化为web服务接口具有集成多种中间件和多种技术标准的能力开放式的,组件化,基于配置的模型高度的可分布性和高性能简化开发,插件式结构对基于标准的高性能的复杂应用的可靠支持AnEnterpriseServiceBus(ESB)isanewkindofmiddlewarethatcombinesfeaturesfromseveralprevioustypesofmiddlewareintoonepackage.ESBsprovidethefabricofservicesrequiredforenterprisesysteminteroperabilityandbuildingnewapplications.2023/3/645企业服务总线ESB软件领域中的总线一词指的是一种架构模式,它允许多个应用程序以一种去耦合或者松散耦合的方式结合在一起。可以被认为是一种消息路由器,它解决了应用程序间消息的路由选择问题ESB将事件驱动的方法和面向服务的方法结合使用,以简化业务单元的集成,从而在异类平台和环境间建立联系ES