第08讲:Java EE构件技术_第1页
第08讲:Java EE构件技术_第2页
第08讲:Java EE构件技术_第3页
第08讲:Java EE构件技术_第4页
第08讲:Java EE构件技术_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

哈尔滨工业大学计算机学院唐好选Email:tanghx@JavaEE的基本原理及

构件开发技术基本内容JavaEE概述EJB技术基于EJB构件的开发过程三种构件模型的关系J2EE概述J2SE(Java2Platform,StandardEdition)用于桌面程序和Java小程序开发称为J2SDK,简称JDKJ2EE(Java2Platform,EnterpriseEdition)用于企业级开发称为J2SDKEEJ2ME(Java2Platform,MicroEdition)用于手持设备的开发(手机和PDA)JRE(JavaRuntimeEnvironment)Java平台的发展Java平台的发展JavaEE的发展J2EE1.01999年发布J2EE1.22000年发布J2EE1.32001年发布J2EE1.42003年发布J2EE1.52005年发布,即JavaEEJavaEE1.62009年发布JavaEE1.7-2013年发布,最新版JavaEE

1.7的核心组件JavaEE应用架构示例(1)JavaEE应用架构示例(2)JavaEE核心技术浏览器Applet应用程序客户机RMIWeb/HTTP服务器JSP/JSFServlet表示层应用服务器EJBEJBEJBEJBEJBEJBEJBJavaIDLJNDIJMSJPA专业服务层遗产系统数据库分布式CORBA对象后端系统JavaEE核心技术(1)EJB(EnterpriseJavaBean)提供了让客户端使用远程的分布式对象的框架规定了EJB构件如何与EJB容器进行交互EJB容器提供了目录服务、事务管理、安全、连接池管理和容错服务等RMI(RemoteMethodInvocation)和RMI-IIOP是EJB构件和客户端的通信API允许进程间通信并提供其它与通信相关的服务利用IIOP作为通信协议JNDI(JavaNamingandDirectoryInterface)是命名和目录服务的标准实现对象的命名,包括Web组件、EJB组件、数据库系统等对象的名字通过命名和目录服务绑定到具体对象EJB依赖JNDI通过网络查找分布式构件在JavaEE环境下,任何构件必须在JNDI服务器注册JPA(JavaPersistenceAPI)用于对象持久化的API,本质上是一种ORM规范支持XML和注解通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合JavaEE核心技术(2)JTA(JavaTransactionAPI)是一个高层次的事务处理接口应用程序可通过JTA控制事务处理JMS(JavaMessageServices)是与消息驱动构件通讯的API同时支持点对点消息队列服务和发布-订阅消息服务支持可靠消息传递、消息传递事务及持续消息等是EJB消息驱动Bean的基础JavaEE核心技术(3)JSP(JavaServerPage)和Servlet是服务器端的程序用于扩展服务器功能,响应用户请求可将结果转化为标准的HTML代码返回给用户JSF(JavaServer

Faces)用于构建Web应用程序的新标准Java框架提供一种以组件为中心来开发Java

Web用户界面的方法将Web应用开发者划分为三个角色:网页设计人员;应用程序设计人员;UI组件开发人员JavaEE核心技术(4)WebSocketAPI是下一代客户端-服务器的异步通信方法,取代了单个TCP套接字,可用于任意的客户端和服务器程序,由W3C进行标准化WebSocketAPI可使服务器和客户端可以在给定时间范围内的任意时刻,相互推送信息WebSocket并不限于以Ajax(或XHR)方式通信,服务器和客户端可以彼此相互推送信息WebSocket允许跨域通信

JavaIDL/CORBA是CORBA规约的一种Java实现通过JavaIDL可以让Java对象发布到CORBA的ORB上,从而通过ORB与别的CORBA对象进行交互JavaEE核心技术(5)Interceptors(拦截器)在访问某个Action或Action的某个方法之前或之后实施拦截拦截器是可插拔的,是AOP的一种实现JAF(JavaActivationFramework)/JavaMail是一套允许在Java程序中以与平台无关、协议无关的方式发送电子邮件的APIJavaMail可利用JAF处理邮件的编码XML(可扩展标记语言)是一种描述数据的元语言Java用JAXP(JavaAPIforXMLParsing)对XML文件进行解析EJB通常将XML作为元标记语言表达内容JavaEE核心技术(6)EJB技术EJB技术EJB简介EJB体系结构EJB编程模型EJB构件接口EJB构件规约EJB构件分类EJB构件的开发什么是EJB?EJB不是一种产品,而是为开发和使用“基于事务和分布对象应用的服务器端构件”而定义的一种技术规约,用户可根据该规约开发EJB构件EJB构件是一组分布式的对象,可通过EJB容器的控制为分布在因特网上的用户提供远程服务什么是EJB?EJB规约定义了EJB构件与EJB容器之间的交互机制,描述了EJB构件和EJB容器在运行时的行为,保证了EJB构件在容器间的可移植性安全访问如何检验事务如何管理持久性如何应用EJB容器运行在EJB服务器中,EJB规约还定义了EJB容器和EJB服务器的标准模型EJB的目标EJB的目标是为服务器端构件系统定义一个技术规范,该规范可实现如下要求:提供一个标准的、分布的、基于OO的体系结构屏蔽复杂的系统级功能需求兼容CORBA标准具有与非Java应用之间的互操作能力EJB的现状-EJB3.0EJB3.0于2006年5月随JAVAEE5发布EJB3.0完全抛弃了EJB2.x实体Bean的设计,仅仅保留原有的SessionBean和消息驱动Bean;引进了全新的JPA规范作为持久化解决方案简化了EJB2.x中SessionBean的开发,SessionBean不再需要Home接口,只要求提供远程或本地的业务接口即可不再推荐使用XML文件作为部署描述文件,而是改为使用Annotation来设置部署描述信息EJB的现状-EJB3.1EJB3.1于2009年随JAVAEE1.6发布允许企业Bean只提供一个Bean类,甚至无须提供业务接口允许通过异步的方式调用SessionBean的业务方法简化了EJB的类文件必须打包到JAR文件中的限制,允许直接将EJB类放到WAR文件中EJB的现状-EJB3.2EJB3.2于2013年7月随JAVAEE7发布支持本地异步会话Bean调用JavaI/O访问权已放宽,用“应谨慎行事”取代了“不允许”有状态会话bean的生命周期回调拦截方法,可以在一个事务环境中执行(由生命周期回调方法的事务属性决定)可以完全禁用特定的有状态会话bean的钝化TimerServiceAPI已被扩展,可以在同一个EJB模块中查询所有活动计时器会话bean指定实现接口(作为本地或远程业务接口)的默认规则已经放宽,可以包含多个接口JavaEE的应用架构-经典JAVAEE架构以EJB为核心,前端以JSF(JavaServerFaces)为MVC框架的技术架构,这种技术架构以Sun提倡的官方JavaEE技术为主JavaEE的应用架构-轻量级JavaEE架构以Spring+Hibernate为核心,前端以Struts1或Struts2为MVC框架的技术架构,这种技术架构以主流的开源框架为主Spring框架组成Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现核心容器:核心容器提供Spring框架的基本功能。核心容器的主要组件是BeanFactory。BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际应用程序代码分开Spring上下文:Spring上下文是一个配置文件,向Spring框架提供上下文信息。Spring上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化、校验和调度功能SpringMVC框架:MVC框架是一个全功能的构建Web应用程序的MVC实现。通过策略接口,MVC框架变成为高度可配置的,MVC容纳了大量视图技术Spring框架和EJBSpring框架实际上大量参考了EJB的设计理念,只是Spring摈弃了EJB开发中的3大烦琐之处:(1)EJB组件的接口和类必须继承指定接口或类(2)需要大量使用XML配置文件(3)EJB组件必须打包成JAR包Spring容器取代了原有的EJB容器,因此以Spring框架为核心的应用无须EJB容器支持,可以在Web容器中运行Spring容器管理的不再是复杂的EJB组件,而是POJO(PlainOldJavaObject)

BeanEJB的体系结构请求EJB构件服务的应用程序,EJB规约为创建EJB构件的客户接口定义了一套标准,主要包括:EJBHome接口:客户使用JNDI来查找对EJBHome接口的引用,为客户机创建、删除、查找EJBRemote接口对象的句柄提供了相应的操作EJB业务接口:通过该接口可调用构件的业务方法RMI/IIOP或RMI/JRMP协议:客户机和容器通信的标准协议,这些底层的分布式通信机制对于EJB客户机和EJB构件开发者都是透明的EJB的体系结构-EJB客户机为使用EJB构件的应用程序提供操作环境,并提供所有必要的服务来支持EJB体系结构Java白皮书承诺:“EJB规约为每个支持Java程序的应用服务器定义了一个标准模型,任何厂商都可以使用此模型来实现对EJB构件的支持”EJB服务器的主要功能包括管理EJB容器提供对操作系统服务的访问提供与Java相关的服务EJB的体系结构-EJB服务器EJB容器为EJB构件提供运行环境,EJB容器对EJB应用程序是透明的EJB白皮书描述:“EJB容器管理其中的EJB构件,客户机应用程序并不直接与EJB构件进行交互,相反,客户机应用程序通过由容器生成的封装接口与EJB构件进行交互,当客户机使用封装接口调用各种操作时,容器截获每个方法调用,并插入管理服务”EJB的体系结构-EJB容器EJB的体系结构-EJB容器面向对象分布式计算:EJB构件在理论上是位置透明的使用代理对象:客户机访问EJB构件时使用代理对象,构件本身对客户机是不可访问的EJB的编程模型-关键特征EJB的边界EJB构件接口构件接口是构件提供者为便于复用者(客户)复用该构件所提供的必要信息构件与容器协作实现这些接口EJB构件规约EJB构件规约EJB可使Java编写的服务器组件开发和部署标准化EJB构件规约定义了以下接口EJB和容器之间的接口容器和应用服务器之间的接口容器和客户端之间的接口容器和持久管理器之间的接口EJB构件分类EJB构件分为三(四)种基本的类型会话构件(SessionBean)有态会话构件(StatelessSessionBean)无态会话构件(StatefullSessionBean)消息驱动构件(Message-DrivenBean)实体构件(EntityBean)会话构件特征与单个客户相对应不直接表示数据库中的共享数据生命周期相对较短当EJB容器崩溃时,也随着消失类别Stateful(有态)Stateless(无态)有态构件的生命周期@PreDestroy超时@postConstruct业务方法@PrePassivate@PostActivate超时实例抛出系统异常无态构件的生命周期@PreDestroy@PostConstruct业务方法两种会话构件的选择Stateful?Stateless?过程需要保持状态?加入过程中断,恢复运行时需要以前的信息吗?两种会话构件的选择发生下列情况时应该考虑使用有状态会话Bean在方法调用时,会话Bean需要维护成员变量的数据实例化会话Bean的时候,必须初始化会话Bean的状态会话Bean需要跨越多个方法调用,并维护客户端的信息会话Bean正在服务一个交互客户端,EJB容器或应用服务器需要了解该客户端发生如下情况时应考虑使用无状态会话Bean不需要维护跨越方法调用的成员变量中的数据会话Bean提供的服务并不针对某种客户端消息驱动构件(MDB)MDB是一种JMS消息的使用者,MDB负责从消息队列或者消息主题中读取消息MDB只提供消息接受方法,客户端不直接与MDB打交道MDB的输入参数只有一种类型,即消息对象,是那些实现了Message接口的Java对象生命周期由EJB容器控制客户端和MDB是完全独立的,客户端无法直接调用MDB方法,而是由消息服务器负责把消息发送给MDB无状态消息驱动构件(MDB)MDB的生命周期@PreDestroy@PostConstructMDB常用开发模式客户端可直接调用SessionBean,发布消息到主题MDB接收并处理消息EJB构件开发与应用SessionBean有两个共同的组成部分:业务接口(Businessinterface):定义EJB构件的逻辑方法Bean类(Beanclass):实现主要的业务逻辑EJB构件的开发(SessionBean)开发一个SessionBean,需要定义接口和Beanclass,接口分为远程接口(RemoteInterface)和本地接口(LocalInterface)远程接口(RemoteInterface)定义业务方法,可以被EJB容器之外的应用访问到本地接口(LocalInterfac)同样定义业务方法,可以被同处于EJB容器内的其它应用使用。因为local接口允许bean之间直接通过内存交互,没有分布式对象协议的开销,从而改善了性能Bean类包含了业务逻辑,必须具备一个远程或本地接口,Bean类应实现接口的业务方法。在EJB3中,不要求同时实现remote和local接口,但实现两者是比较好的做法开发SessionBean第一步:定义一个包含业务方法的接口。该接口不需要包含任何注释,是一个普通的java接口。调用EJB的客户端使用这个接口引用从EJB容器返回的存根(stub)开发SessionBean第一步第二步:编写BeanClass开发SessionBean第二步SessionBean的客户端开发publicstaticvoidmain(String[]args){ Propertiesprops=newProperties(); props.setProperty("java.naming.factory.initial","erfaces.NamingContextFactory"); props.setProperty("vider.url","localhost:1099");try{ InitialContextctx=newInitialContext(props); HelloWorldhelloworld=(HelloWorld)ctx.lookup("HelloWorldBean/remote"); System.out.println(helloworld.sayHello(“哈工大"));}catch

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论