• 1. J2ee基本概念和原理
  • 2. 内容J2EE概述 EJB技术 WEB相关技术 J2EE的公共服务 J2EE的安全和通信
  • 3. J2EE概述什么是J2EE J2EE的产生背景 J2EE的分层结构 J2EE的重要概念 J2EE的体系结构 J2EE支持的应用程序配置方案 J2EE角色
  • 4. 什么是J2EE(一)定义 (JAVA 2 enterprise edition) J2EE为开发和发布企业级应用程序提供了一个标准。 J2EE定义了一个平台和编程模式,用于构造Java企业级系统。 J2EE是一种体系结构,它是利用Java 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题。
  • 5. 什么是J2EE(二)J2EE的组成J2EE平台J2EE 规范J2EE 参考实现 J2EE 兼容测试组件 J2EE 蓝皮书
  • 6. J2EE的产生背景(一)市场环境 在网络经济中,随着竞争的日益剧烈,当新机会出现时,有效竞争的关键往往是迅速高效地开发和发布创新的应用程序。 在电子商务迅猛发展的今天,商业社会的各个部门需要依赖企业级应用程序来共同完成自己的工作。 企业级应用程序 分布式 可移植 易于装配的 满足企业计算的要求(一致性、事务性、安全性) 还要具备好的特征(可伸缩、可扩展、易于维护)
  • 7. J2EE的产生背景(二)三层体系结构客户端WEB层EIS层客户端客户端EIS:enterprise information system
  • 8. J2EE的产生背景(三)四层体系结构客户端WEB层EIS层客户端客户端商务逻辑层
  • 9. J2EE的产生背景(四)四层体系结构优点 部署开销低:数据库驱动程序被安装和配置在服务器端,而不在客户端。 更改数据库开销低:更改数据库不会影响客户端。 商务逻辑层修改开销低。 资源可以被有效的共享和重复利用:在N层体系结构中,与外界资源建立的连接可以被有效的管理起来。 提高了软件的复用,缩短软件开发周期,提高产品质量。
  • 10. J2EE的产生背景(四)组件体系结构的解决方案 Microsoft公司的DNA (.NET )体系结构 是一个产品,有自己的一套标准,只能在Microsoft公司平台上使用,目前不能向高端计算机系统中进行移植。 Sun公司的J2EE J2EE是一个规范,所以,它从本质上消除了对一家公司的依赖,并支持跨平台的应用程序部署。这将激励应用供应商相互竞争,创造除最好的产品。 OMG组织的CORBA标准 CORBA也是一个标准,而J2EE和CORBA最大的不同在于CORBA只是针对单个对象而不是被服务器自动管理的可部署的服务器端组件。但是OMG组织最近为满足企业级应用需要,为CORBA标准提供了CORBA组件草案。
  • 11. J2EE的分层结构
  • 12. J2EE的重要概念组件和容器的概念 组件 组件是提供一个完整定义接口的代码模块,它是可管理的、独立的逻辑程序块。(不可独立运行) 组件提供了对问题进行更粗粒度的封装,组件表示一个和多个较细粒度类的逻辑集合。 组件可以和其他组件组合起来来解决更大的问题。 容器 组件容器为组件提供运行环境,同时,它提供一组大多数组件都需要的服务和API。
  • 13. J2EE的体系结构JMS:Java message service JCA:J2EE Connector Architecture JTA :Java Transaction API JAF:JavaBeans Activation Framework JAXP :Java API for XML Parsing JAAS:Java Authentication and Authorization ServiceApplication ServerWeb Server返回1返回2
  • 14. J2EE技术Java 2 平台企业版远程方法调用J2SEEJBJava 消息服务(JMS)命名和目录接口数据库连接JavaMailServlet & JSPJava IDLXML连接器事务处理API
  • 15. J2EE技术(续)远程方法调用:进程间相互通信的重要机制 Java IDL:Java语言实现CORBA标准的模型 J2EE Connector Architecture ( JCA ) J2EE连接体系结构是使J2EE平台与各种的企业信息系统(EIS)连接的标准体系结构 JavaMail JavaMail能让Java应用程序以与平台无关、协议无关的方式发送电子邮件。 需要JAF的支持,依赖JAF打包消息数据和处理与这些数据的交互。 JavaBeans Activation Framework(JAF) JAF以一种标准方式处理不同的数据类型(如:图象、音频、视频),JavaMail在处理附件的时候使用JAF。 Java Transaction API(JTA) 是一组进行事务管理的API Java API for XML Parsing(JAXP) JAXP为工业标准SAX和DOM APIs提供分析XML文档支持,同时支持XSLT转换引擎
  • 16. J2EE支持的应用程序配置方案JNDI:Java naming & directory interface…
  • 17. J2EE角色组件供应商产品供应商应用程序集成人员部署人员系统管理人员工具提供商
  • 18. 内容J2EE概述 EJB技术 WEB相关技术 J2EE的公共服务 J2EE的安全和通信
  • 19. EJB技术EJB的相关概念 EJB构建企业应用的思路 *服务器端组件 Session Bean开发举例
  • 20. EJB规范This is the specification of the Enterprise JavaBeans architecture.The Enterprise JavaBeans architecture is a component architecture for the development and deployment of component based distributed business applications. Applications written using the Enterprise JavaBeans architecture are scalable, transactional, and multi-user secure. These applications may be written once, and then deployed on any server platform that supports the Enterprise JavaBeans specification. ——from “Enterprise JavaBeans Specification,Version 2.0”本文是企业Java Bean 体系结构的规范。企业Java Bean 体系结构是一个用于开发和部署基于分布式商务应用的组件体系结构。采用企业 Java Bean 体系结构开发和部署的应用具有可扩展性、面向事务以及多用户安全接入的特点。这些应用开发一次,可以部署在支持企业Java Bean 规范的任何服务器平台上。
  • 21. 组件和组件模型组件 组件提供了比对象更粗粒度的封装问题的方法。组件代表可作为一个或多个概念完成功能的特殊服务,为组件用户提供多个接口。 接口封装了组件实现的细节 更好地重用ComponentObjectObjectObjectObject
  • 22. 组件和组件模型组件模型 组件模型定义了组件与其环境所必须的一组要求。包括:组件与容器、组件与其应用、组件自身之间的接口。组件模型主要关心如何约束接口的性质。 一般来说,组件模型涉及到: 特定组件的接口 组件环境假设 组件的约定
  • 23. 相关概念——一般组件模型一般组件模型包括以下基本元素: 组件的属性 组件的事件 组件状态属性的描述方法 容器和容器提供的服务 组件提供给容器的接口 容器提供给组件的接口 组件提供给应用程序的接口 组件之间的接口
  • 24. 相关概念——标准组件模型组件模型的标准化,定义了标准的接口和服务 开发和使用组件及容器的依据
  • 25. 相关概念 ——基于组件开发的特点组件识别 组件评估 组件装配
  • 26. EJB三大件(1)企业Bean 企业Bean是分布式的服务器端组件 可以被用来组装成更大型的应用程序 企业Bean不一定是可重用的组件。 容器 提供企业Bean运行的环境 管理企业Bean (如:生命周期) 向企业Bean提供服务 它通过规范中定义的接口使EJB类访问所需的服务 一个容器中包含多个企业Bean; 服务器 管理EJB容器的高端进程或应用程序 可运行多个容器,并提供对系统服务的访问 EJB服务器也可以提供厂商自己的特性,如优化的数据库访问接口,对其他服务(如CORBA服务)的访问 一个EJB服务器必须提供对可访问JNDI的名字服务和事务服务支持。
  • 27. EJB三大件(2)客户端代码,例如:Servlet或者AppletEJB服务器EJB容器1 组件1 组件2EJB容器2 组件3 组件4容器和服务器的关系
  • 28. EJB容器和服务器功能概述资源管理和Bean组件生存期管理 状态管理 事务处理 安全性 持久性 远程访问和透明的资源定位 连接代码和Bean组件安装工具 专用的容器特性
  • 29. EJB技术EJB的相关概念 EJB构建企业应用的思路 *服务器端组件 Session Bean开发举例
  • 30. EJB构建企业应用的思路—模式良好的解决方案明确合理的分工专家级的实现高效的企业应用构建模式
  • 31. EJB构建企业应用的思路—模式明确应用需求。 决定选择一种分布式对象结构,然后设计应用程序。 开发或者购买可重用组件。 组合应用程序。 部署Bean。 监控已展开的部署应用。良好的解决方案
  • 32. EJB构建企业应用的思路—模式EJB把项目的实现者划分为六个角色,严格定义角色的职责,每个角色都必须遵循EJB的基本规范以确保可移植性。 六个角色: 组件供应商、容器供应商、服务器供应商、应用组装商、系统部署员、系统管理员 每个角色专门负责特定的任务,可以不了解其他角色的工作,但必须对本角色任务的实现具有专业水平。 “分而治之”的方法可以提高整体水平。 明确合理的分工专家级的实现
  • 33. EJB构建企业应用的思路——角色组件供应商 提供可重用的商务组件,用户可以购买并应用这些组件解决实际问题。 容器供应商 提供EJB应用运行所需的底层环境。 服务器供应商 提供应用服务器来管理、容纳和部署组件。 应用组装商 构造整个应用。他们知道如何让很多组件协同工作和开发使用组件的应用程序。 系统部署员 按照应用组装商的建议,将应用组装商选择的组件部署到一个或多个应用服务器中。 系统管理员 维护已经部署好的系统。
  • 34. EJB构建企业应用的思路 ——角色关系构造EJB组件建立应用部署系统 提供EJB容器/服务器EJB容器/服务器供应商组件供应商应用组装商系统部署员系统管理员
  • 35. EJB技术EJB的相关概念 EJB构建企业应用的思路 *服务器端组件 Session Bean开发举例
  • 36. 服务器端组件——内容EJB的相关概念 EJB构建企业应用的思路 *服务器端组件 企业Bean 中间层和分布式对象 企业Bean的组成 企业bean的调用 各个Bean的基础介绍 Session Bean开发举例
  • 37. 服务器端组件——企业Bean(1) 概述Enterprise Bean是封装了事务逻辑的服务器端组件,它运行于EJB容器中。 Enterprise Bean由一些类、接口、描述文件和一些资源文件组成,类和接口的定义必须符合EJB规范。 Bean的开发人员根据规范实现一些基本的接口,EJB容器通过这些接口管理Bean的生命周期,并为Bean提供系统级的事务处理和安全服务。 Bean的开发人员为Bean定义一些方法,并为这些方法定义相应接口,EJB客户通过这些接口间接调用Bean的方法。位置
  • 38. 服务器端组件——企业Bean(2) Enterprise Bean分类
  • 39. 服务器端组件——企业Bean(3) 分类(续)Session Bean 用于描述商务处理过程,如计数、定购、工作流、身份认证等。 可作为其他Bean的客户端,调用其他Bean的方法。 Stateful Session Bean保存了客户端一次会话的状态。这些状态一直保持到会话结束。 Stateless Session Bean不需保存与客户端会话的状态,可同时供多个客户端调用。
  • 40. 服务器端组件——企业Bean(4) 分类(续)Entity Bean 用于描述数据,是数据信息的Java缓冲对象。如:产品、订单、用户、信用卡等。 用于永久性存储,可供多个客户端同时使用。 多个Entity Bean共同实现数据库系统中的关系。 CMP(Container-Managed Persistence Entity Bean)容器管理持久性 BMP(Bean-Managed Persistence Entity Bean)Bean管理持久性
  • 41. 服务器端组件——企业Bean(5) 分类(续)Bean管理持续性(BMP)实体Bean: Bean中所有与关系数据源(数据库)相关的数据插入、删除、查询与更新操作由Bean开发者完成。 容器管理持续性(CMP)实体Bean: Bean中所有与关系数据源(数据库)相关的数据插入、删除、查询与更新操作功能由容器提供。通过使用基于部署描述符的信息,将EJB类字段映射到管理数据库表的列中,然后使用这些映射关系产生Sql代码。
  • 42. 服务器端组件——企业Bean(6) 实体Bean的持久性Bean管理的持久性 优点: 开发者有完全的控制 无需复杂的提供商支持 灵活性高 缺点: 编码复杂 在改变时需要重新编码和部署 影响可移植性容器管理的持久性 优点: 代码简单 一般有更好的缓冲和性能 在部署描述符中进行改变即可 可移植性好 EJB2.0CMP对关联特性的支持非常好。 缺点: 对容器提供商的工具依赖性强
  • 43. 服务器端组件——企业Bean(7) 分类(续)Message-driven Bean 调用方法不同于其他两种Bean,需求向它发送消息来调用它。 异步调用:通过发送消息,客户端无需等待Bean马上返回信息。 Message-driven Bean也可以调用其他类型的Bean完成商务逻辑计算。
  • 44. 服务器端组件——企业Bean(8) Session Bean Vs. Entity Bean会话bean 表示一个业务过程 每一客户一个实例 Short-lived:与客户生命同步 暂态的 服务器崩溃后丢失 可以是事务性的实体bean 表示业务数据 在多个客户间共享实例 Long-lived:与数据库中数据同步 持久的 服务器崩溃后可重构 总是事务性的
  • 45. 服务器端组件——企业Bean(9) Session Bean Vs. Entity Bean银行账户# 所有者姓名,密码 账户余额容器 账户 实体BeanServlet 或 Applet 取款 会话Bean 密码验证 会话Beanstatelessstateful
  • 46. 服务器端组件——企业Bean(10) Bean的客户端 显示逻辑层 HTTP SOAP UDDI WSDL ebXML RMI/IIOP Message RMI/IIOP CORBA/IIOP 商业逻辑层 Session BeanMessage Driven BeanEntity BeanSession BeanSession BeanSession BeanServletJSPMessage ClientJava ApplicationC++ ClientHTML Client商业伙伴
  • 47. 服务器端组件——企业Bean(11) 几种EJB的适用场合Session Bean Bean代表某个商业处理过程,它是对一个“动作”的建模; Bean的状态不需永久性存储,永久性存储指把状态信息保存到数据库。 Stateful Session Bean Bean的状态代表了它与某个客户端的交互; Bean需要在不同的方法调用中保存客户端的某些信息; Bean管理着几个Enterprise Bean的工作流。 Stateless Session Bean Bean的状态参数中没有于客户端相关的内容; Bean的方法调用对所有的客户端都以一样; Bean只是从数据库读取一些常用数据。
  • 48. 服务器端组件——企业Bean(12) 几种EJB的适用场合Entity Bean 1、Bean代表了某个具体的商业实体,而非商业处理过程。如产品、用户信息等。它是对数据的建模。 2、Bean的状态需要永久性存储,即使J2EE服务器关闭了,Bean的状态仍然保存在某个永久性存储介质中,如数据库。 Message-driven Bean 1、如果用户需要“异步”接受消息,如避免服务器资源被锁定。 2、Message-driven Bean相当于一个JMS消息的接受客户端,简化了异步处理消息的过程。
  • 49. 服务器端组件——内容EJB的相关概念 EJB构建企业应用的思路 *服务器端组件 企业Bean 中间层和分布式对象 企业Bean的组成 企业bean的调用 各个Bean的基础介绍 Session Bean开发举例
  • 50. 服务器端组件 ——中间层与分布式对象(1)客户调用分布式对象的过程客户端Stub分布式对象SkeletonRemote InterfaceRemote InterfaceNetwork
  • 51. 服务器端组件 ——中间层与分布式对象(2)分布式对象的优点在于能把应用程序分成多个部分,然后将它们部署在网络不同的地方,并让它们有效地协调工作。 简单的程序只需编写一个stub和skeleton就可以完成这种协调工作。 但大型应用程序必须有一个中间层来为分布式对象提供多种服务,如事务性和安全性服务。也就是说中间层封装了很多比较底层的东西。 中间层的两种方式 有两种方式实现中间层:直接方式和隐含方式。 直接方式:应用需要直接和中间层的API打交道。需要对中间层的API编程,代码量大,且不能移植到其他中间层上。 隐含方式:用户不需要对复杂的中间层编程。用户只需给出描述,其他由工具实现。具有可移植性,代码量小。 EJB采用的是隐含方式。
  • 52. 服务器端组件 ——中间层与分布式对象(3)直接方式中间层客户端Stub分布式对象SkeletonRemote InterfaceNetwork事务处理API安全服务API数据库驱动Remote Interface
  • 53. 服务器端组件 ——中间层与分布式对象(4)隐含方式的中间层客户端Stub分布式对象SkeletonRemote InterfaceNetwork事务处理API安全服务API数据库驱动访问拦截对象Remote InterfaceRemote Interface
  • 54. 服务器端组件 ——中间层与分布式对象(5)隐含方式中间层中最重要的概念是访问拦截对象。 这个对象由系统(非编程人员)生成,编程人员只需 在分布式对象中实现基本的商业逻辑 然后在一个描述文件中指出该对象需要哪些中间层服务 最后运行一个由中间层供应商提供的工具 系统以分布式对象和描述文件作为输入生成上面所说的访问拦截对象 来自客户的调用被该对象截获,该对象作为分布式对象的代理完成说需的功能。 该访问拦截对象并不是编程人员实现的。该对象封装了一些底层的API程序逻辑
  • 55. 服务器端组件——内容EJB的相关概念 EJB构建企业应用的思路 *服务器端组件 企业Bean 中间层和分布式对象 企业Bean的组成 企业bean的调用 各个Bean的基础介绍 Session Bean开发举例
  • 56. 服务器端组件 ——企业Bean的组成(1)Enterprise Java Bean并不是一个单独的文件,它由一些类、接口、描述文件和其他一些资源文件组成。 Enterprise Java Bean包括: Enterprise Bean类 EJB/Local Object:EJB对象/本地EJB对象 Remote/Local Interface:Remote商务接口/本地商务接口 Home/(Local Home) Object:Home对象/本地Home对象 Home/(Local Home) Interface:Home 接口/本地Home接口 Deployment Descriptors:部署描述文件
  • 57. 服务器端组件 ——企业Bean的组成(2)Enterprise Bean类 封装了商务逻辑的实现和EJB规范定义的标准接口的实现。 Enterprise Bean实现javax.ejb.EnterpriseBean接口 Entity Bean实现javax.ejb.EntityBean接口 Session Bean实现了Javax.ejb.SessionBean接口 Message-Driven Bean实现了Javax.ejb.MessageDrivenBean接口 这个类就是隐含方式中间层的分布式对象,它并不实现事务处理和安全性。 这个类是开发者要编写的。
  • 58. 服务器端组件 ——企业Bean的组成(3)EJB对象 相当于隐含方式的“访问拦截对象” 。 EJB对象充当企业Bean类的代理,它复制了Bean类的商业方法,代表Bean类响应客户端的调用。 EJB对象是根据企业Bean类、某些接口、描述文件,通过专门的工具生成的,它负责和一些中间层API打交道。 EJB对象在物理上属于EJB容器的,所以EJB对象包含有与特定容器相关的代码。但对于开发人员,只需提供Bean类和一些接口以及描述文件,就可以在新的服务器上重新生成EJB对象,实现可移植性。
  • 59. 服务器端组件 ——企业Bean的组成(4)Remote 接口 EJB对象必须知道Bean类的哪些方法需要克隆。Remote接口的作用就是向EJB对象暴露企业Bean向客户提供的可供调用的方法。 这个接口是Bean程序员要编写的。 Remote接口必须从javax.ejb.EJBObject接口继承。实现了Remote接口的对象就是EJB对象。EJBObject接口定义了很多方法,这些方法由EJB容器在自动生成EJB对象时实现的。 Local 接口 调用并没有经过网络,位于同一个容器中的Bean时如果都经过stub->skeleton->EJBObject->中间层API->Bean实例->返回的过程,效率将比较低。 Local 接口的作用和Remote接口基本一样,只不过用户调用local对象是不需要不必要的过程。
  • 60. 服务器端组件 ——企业Bean的组成(5)Home 对象 EJB对象是分布式对象,客户并不知道其具体位置,另外也需要一个专门的对象来创建EJB对象。 Home对象负责创建、查找、删除EJB对象。 Home对象是EJB对象的工厂 Home对象由工具生成。 Home 接口 Home对象必须知道EJB对象的初始化、删除、查找方法。换句话说,容器必须知道使用哪些信息来创建Home对象。 Home接口定义创建、删除、查找EJB对象的基本方法。 Home 接口必须从javax.EJBHome继承,Home对象也是一个网络分布式对象,它实现了底层的网络通信和位置透明性。 该接口由Bean程序员实现。
  • 61. 服务器端组件 ——企业Bean的组成(6)Deployment Descriptors(部署描述文件) 部署描述文件说明了组件需要哪些和怎样的中间层服务。 部署描述文件包含 Bean的管理信息:定义了Bean类名称或别名,说明Bean的类型(Entity 还是Session)。 永久性存储管理方式:用于Entity Bean确定采用BMP 还是CMP。 事务处理服务:确定是否由容器管理事务,然后还要确定哪些方法需要容器进行事务处理的管理。有时需要对不同方法设置事物属性。 安全性服务:说明谁由权力使用哪些Bean,那些方法。也可以定义安全角色,以角色分配权力。 该描述文件是一个XML文档,由Bean程序员提供。 对于具体的容器,通常会有一些特定的描述文件。
  • 62. 服务器端组件 ——企业Bean的组成(7)其它说明 每个EJB容器都有一些专门的工具用来把Enterprise Bean类集成到EJB容器运行环境中。这些工具用来生成一些辅助性的Java类,如:Stubs、Skeletons、数据访问类等。Bean的程序员不需要关心如何实现这些Java类,因为它们是由工具实现的,但必须知道,Enterprise Bean的运行必须依赖于这些Java类。一个完整的Enterprise Bean组件还应包含这些实现底层逻辑的Java类。
  • 63. 服务器端组件 ——企业Bean的组成(8)打包Home 接口Remote 接口Enterprise Bean ClassesLocal 接口部署描述 文件特定容器 相关文件Jar生成工具EJB Jar 文件
  • 64. 服务器端组件——内容EJB的相关概念 EJB构建企业应用的思路 *服务器端组件 企业Bean 中间层和分布式对象 企业Bean的组成 企业bean的调用 各个Bean的基础介绍 Session Bean开发举例
  • 65. 服务器端组件 ——企业Bean的调用(1)调用过程 1、使用JNDI寻找或定位一个Home对象。 2、使用这个Home创建EJB对象。 3、通过这个EJB对象来调用Bean类的方法。 4、删除EJB对象。
  • 66. 服务器端组件 ——企业Bean的调用(2)JNDI服务器客户端EJB容器Home 对象EJB 对象Enterprise Bean1、获取Home对象 引用2、返回Home对象引用3、要求创建新的对象5、返回EJB对象的引用Home接口Remote接口6、调用商务方法7、调用Bean类方法4、创建EJB对象
  • 67. 服务器端组件——企业Bean的调用(3)Enterprise Bean 调用实例:在客户端如何寻找Home对象。 确定所要使用的目录服务的位置。 初始化一个Context对象,这个Context是目录结构的入口。 使用JNDI的lookup()方法从远程目录中寻找Home对象。 用Home对象创建EJB对象。具体代码 Properties props=System.getProperties(); //获取系统属性 Context ctx=new InitialContext(props); //生成Context对象 //获取Home对象,CartHome是Home Interface类型 CartHome home=(CartHome)ctx.lookup(“CartHome”); //创建EJB对象,Cart是Remote Interface类型 Cart ejbObject=home.create(); ejbObject.add(100); //直接调用Bean方法 ejbObject.remove(); //删除EJB对象
  • 68. 术语小结(1)Enterprise Bean实例:是Enterprise Bean类的一种Java对象实例。它包含Remote接口中定义的方法的商务方法实现。由于不包含与网络有关的逻辑功能,Enterprise Bean实际不具有网络功能。 Remote接口: 是一种Java接口,它列举了Enterprise Bean类“暴露”的商务方法。在EJB中,客户端代码与Remote接口打交道,从不直接与Enterprise Bean实例发生关系。Remote接口遵守Java RMI规则,具有网络功能。 EJB对象:是由EJB容器生成的Remote接口实现。EJB对象是客户端和Bean实例之间的具有网络功能的中介物。处理与中间件相关的事宜。客户端调用方法都通过EJB对象传递给Enterprise Bean实例。
  • 69. 术语小结(2)Home接口:是EJB对象“制造生成库”,客户端代码使用Home接口生成EJB对象。Home接口通过网络功能被客户端使用,因而具有网络功能。 Home对象:是由EJB容器生成的Home接口实现。Home对象也具有网络功能,遵守Java RMI规则。 部署描述文件:指定Bean的中间件要求。通过使用部署描述文件,让EJB容器知道如何管理Bean、Bean生命周期需求、事务处理需求、持久性要求以及安全性需求。 Ejb-jar文件:是编程完毕后完整的组件,包含Enterprise Bean类、Home接口、Remote接口、Bean属性以及部署描述
  • 70. 服务器端组件——内容EJB的相关概念 EJB构建企业应用的思路 *服务器端组件 企业Bean 中间层和分布式对象 企业Bean的组成 企业bean的调用 各个Bean的基础介绍 Session Bean开发举例
  • 71. Session Bean基础(1)Session Bean的生命周期:由客户端会话时间的长短决定。 Session Bean的分类:有状态、无状态 所有Session Bean的方法都是可序列化的,即Session Bean是单线程的。 注意:Session Bean可以对数据库进行操作,但本身不是持久性对象。
  • 72. Session Bean基础(2)如何编写Session Bean 该类必须实现javax.ejb.SessionBean接口extends javax.ejb.EnterpriseBean { public abstract void setSessionContext(SessionContext ctx) throw java.rmi.RemoteException; public abstract void ejbCreate() throw java.rmi.RemoteException; public abstract void ejbPassivate() throw java.rmi.RemoteException; public abstract void ejbActivate() throw java.rmi.RemoteException; public abstract void ejbRemove() throw java.rmi.RemoteException; } 除了上面必需的回调方法,还应该在Bean中定义一些商务方法。
  • 73. Entity Bean基础(1)什么是Entity Bean 是持久数据组件:作为对象(或许是用Java编写的),它们知道如何将自身放入持久存储空间中。 一个在内存中的持久数据的Java表现形式。 能够知道如何从一个存储空间中读取它自己并用这些存储的数据组合成它的域。 一个可以在内存中即时被修改的对象并去改变数据的值。 可持久性的,可以再次被存回存储空间。 两个概念: Entity Bean实例:是数据库对应在内存中的视图。 Entity Bean 数据(或数据实例):是数据的物理集合,例如在数据库中的一个银行帐户记录。
  • 74. Entity Bean基础(2)Entity Bean包含的文件: Entity Bean类 Entity Bean remote interface Entity Bean home interface Entity Bean key class Entity Bean的部署描述 Entity Bean的环境属性 Entity Bean的特性 Entity Bean是长久存在的 Entity Bean能够避免Bean失效 Entity Bean实例是一个对应到数据库中的视图 几个Entity Bean实例可能代表同一底层数据 Entity Bean实例可以被收集再利用( Entity Bean池) Entity Bean可以被创建、删除或查询 Entity Bean可以代表遗留下来的数据和系统 Entity Bean可以不通过EJB被修改
  • 75. Entity Bean基础(3)开发Entity Bean 必须实现javax.ejb.EntityBean接口 public interface javax.ejb.EntityBean implements javax.ejb.EnterpriseBean{ public abstract void setEntityContext(javax.ejb.EntityContext); public abstract void unsetEntityContext();//bean实例即将被删除 public abstract void ejbRemove(); public abstract void ejbActivate(); public abstract void ejbPassivate(); public abstract void ejbLoad(); public abstract void ejbStore(); } 除了上面的方法,一般定义几个ejbCreate()方法创建新的Entity Bean数据和几个ejbFind()方法查寻现有的Bean数据。
  • 76. Message-Driven Bean(MDB)基础(1)是JMS消息使用者,从消息队列或消息主体中读取消息。 没有home、remote、localhome、local接口 运行是无状态的,即同一类型的MDB实例都是一样的。 生命周期由EJB容器控制 输入参数只有一种类型:消息对象 客户端和MDB是完全独立的 MDB需要和Session Bean、Entity Bean、web组件等J2EE元素一起协同完成工作。
  • 77. Message-Driven Bean(MDB)基础(2)编写Message-Driven Bean 容器自动完成了一些初始化工作。 每一个MDB必须实现2个接口 Javax.jms.MessageListener接口 public interface javax.jms.MessageListener { //告诉容器当消息到来时如何处理消息 public void onMessage(Message message); } javax.ejb.MessageDrivenBean接口 public interface javax.ejb.MessageDrivenBean extends EnterpriseBean { public void ejbRemove() throws EJBException; public void setMessageDrivenContext(MessageDrivenContext ctx) throws EJBException }
  • 78. EJB技术EJB的相关概念 EJB构建企业应用的思路 *服务器端组件 Session Bean开发举例
  • 79. Session Bean举例Stateless Session Bean——Hello WorldHome 接口Remote 接口Enterprise Bean ClassesLocal 接口(无)部署描述 文件Client appLocal Home 接口(无)
  • 80. EJB技术EJB的相关概念 EJB构建企业应用的思路 *服务器端组件 Session Bean开发举例 EJB应用开发
  • 81. EJB应用开发——内容EJB应用的体系结构 服务器端开发步骤 客户端开发步骤
  • 82. Client-Side Environment J2EE EJB Container/Server Server-Side Environment EJB ClientEJB Home Interface StubEJB Remote Interface StubCreate, Remove,findBusiness InvocationNetworkEJB ImplementationSkeletonXML DD EJB PoolEJB Implement DelegateEJB Implement DelegateEJB Implement DelegateConfigureCreate,Remove,Find,Passivate,Activate, Load,Store, invocationEJB应用开发 —EJB应用的体系结构
  • 83. EJB应用开发 ——服务器端开发步骤(1)1、实现EJB标准接口:为了使用EJB中基于容器的管理能力,就应该实现标准EJB组件模型所需的任何接口; 实现EJB的特定业务接口; 创建客户远程接口:必须为EJB创建那些定义所有特定EJB业务接口的远程接口; 创建客户本地接口:必须为EJB创建那些特定应用程序方法(用于创建EJB对象)以及用于查找EJB(如果是实体Bean)中特定应用程序方法的本地接口; 编译EJB代码:包括EJB实现、本地接口、远程接口; 配置模块部署描述符:用来定义EJB数据结构特性与相关性;
  • 84. EJB应用开发 ——服务器端开发步骤(2)将EJB打包成为JAR文件:包括各种接口及实现、部署描述符。 配置应用程序部署描述符:为保证J2EE模块的一致性,配置一个标准的J2EE部署描述符; 将EJB模块打包成为J2EE EAR应用程序; 部署J2EE应用程序:将J2EE EAR应用程序部署到J2EE兼容的应用程序容器/服务器环境中。
  • 85. EJB应用开发——客户端开发标准客户库验证:建立正确的EJB客户库,包括JNDI v1.2、EJB1.1客户、RMI/IIOPV1.0、JMSv1.0以及JDBC核心扩展库的正确版本; 产生EJB客户接口:为EJB客户提供正确编译了的接口以及特定EJB所对应的特定存根; 客户实现:实现EJB客户,使其能适当使用任何接口; 客户代码编译; 配置应用程序客户部署描述符(可选):定义EJB客户的特定配置属性; 将客户到包成为应用程序客户JAR(可选); 在特定容器下运行J2EE应用程序客户(可选)。
  • 86. 内容J2EE概述 EJB技术 WEB相关技术 J2EE的公共服务 J2EE的安全和通信
  • 87. WEB相关技术J2EE概述 EJB技术 WEB相关技术 Java Servlet Java Server Page (JSP ) J2EE的公共服务 J2EE的安全和通信位置
  • 88. Java Servlet概念Servlet是在服务器上运行的Applet,即“Server+Applet”。 Servlet是用Java编写的服务器端程序,是由服务器端调用和执行的Java类,它扩展了Web服务器的功能。用来处理通过HTTP和HTTPS的Web请求并生成响应。W eb服务器Servlet容器如:JDBC请求响应客户端资源Servlet
  • 89. Servlet与其他开发技术的比较Java Servlet技术具有Java技术的所有优点 Java Servlet技术要比传统的CGI技术效率更高 传统的CGI对于每一个HTTP请求都要产生一个新进程。 Servlet对于每一个请求产生Java线程来响应。 Java Servlet技术要比传统的CGI技术功能强大 Java Servlet能够方便的处理HTML表单数据,也能够读取和设置HTTP头信息,并且能够处理Cookies、跟踪Session等其他大量功能。 Servlet是模块化的 每一个Servlet可以执行一个特定任务,并且可以将它们并在一起工作。Servlet之间是可以相互交流的。 Java Servlet之间能共享数据 Java Servlet技术要比传统的CGI技术的调用时间要短的多 Java Servlet技术要比传统的CGI技术安全
  • 90. Servlet主要功能 (1) 创建并返回一个包含基于客户请求性质的动态内容的完整的 HTML页面。 (2) 创建可嵌入到现有 HTML 页面中的一部分 HTML 页面(HTML 片段)。 (3) 与其它服务器资源(包括数据库和基于 Java 的应用程序)进行通信。 (4)并发处理多个请求,接收多个客户机的输入,并将结果广播到多个客户机上。例如,Servlet 可以是多参与者的游戏服务器。
  • 91. Servlet生命周期(一)初始化 Servlet在服务器启动(预加载)时或Servlet被访问时(动态)加载servlet。 装入Servlet后,容器创建一个Servlet实例并且调用Servlet的init()方法。 服务 客户请求到达时,容器调用Servlet的service()方法处理请求并进行响应。 销毁 当Web服务器和容器关闭时,容器调用Servlet的destroy()方法。创建初始化服务请求销毁销毁请求成功成功非服务卸载失败失败Servlet的生命周期
  • 92. Servlet生命周期(二)Servlet.Service()容器doGet()doPost()请求响应响应对象请求对象生成
  • 93. Java Servlet常用类接口HttpServlet 是针对使用HTTP协议的Web服务器的Servlet类。HttpServlet类通过执行Servlet接口,提供HTTP协议的功能 doGet doPost doPut doDelete doHead doOptions doTrace HttpServletRequest HttpServletResponse HttpSession ServletConfig
  • 94. Servlet程序结构样例import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class ServletTest extends HttpServlet implements SingleThreadModel { private static final String CONTENT_TYPE = "text/html; charset=GBK"; //Initialize global variables public void init() throws ServletException { } //Process the HTTP Get request public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); out.println(""); out.println("ServletTest"); out.println(""); out.println("

    The servlet has received a GET. This is the reply.

    "); out.println(""); } //Process the HTTP Post request public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } //Process the HTTP Put request public void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } //Process the HTTP Delete request public void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } //Clean up resources public void destroy() { }}
  • 95. WEB相关技术J2EE概述 EJB技术 WEB相关技术 Java Servlet Java Server Page (JSP ) J2EE的公共服务 J2EE的安全和通信
  • 96. JSP的概念和特性是运行于服务器端的脚本语言。 构建在Java Servlet 技术之上,用于简化动态Web内容的开发。 JSP页面是由生成静态编码的HTML和生成动态编码的JSP脚本组成。 具有Java、 Java Servlet语言的优点,并可以使用Servlet提供的API。 将内容的生成和显示进行分离 用HTML或XML标识来设计最终页面。 用JSP标识或其他小脚本生成页面动态部分,生成逻辑被封装在标识和JavaBeans中,所有的脚本在服务器端运行。 强调组件复用技术 支持JavaBeans,EJB 采用标识简化页面开发 如采用标准JSP标识访问和实例化JavaBeans组件。 可扩展性强 通过开发定制化标识库
  • 97. JSP执行流程JSP是通过JSP Container转换成Servlet,并运用于网页的语言。Web服务Servlet文件应答的类请求应答客户端JSP容器JSP文件是否 修改过?编译转换第一次调用?应答否是是否Servlet容器
  • 98. JSP生命周期初始化 在客户端第一次请求该JSP页时,调用jspInit()方法。 请求处理 当客户请求到达时,容器调用_jspService方法,该方法是JSP页面转换成Servlet时自动转换成的。 中止 当Web服务器和容器关闭时,容器调用JSP的jspDestroy()方法。
  • 99. 标签库可在JSP页面中使用自定义标签库来让用户扩展JSP功能。 可把一些Java Bean封装起来,然后用一些标签作为接口来体现它们的功能。 可以在一个或多个Web应用的JSP页面中使用这些标签。 自定义标签可以互相嵌套使用。 标签库是一个关于定制标签处理程序实现类的集合,它们常常被打包成一个JAR文件,然后存储在WAR文件指定的目录中
  • 100. JSP页面组成JSP页面JSP元素注释HTML元素JSP指令JSP动作JSP脚本声明程序段表达式<%@xxxx%><%! xxxx%><%xxxx%><%=xxxx%>Jsp: <%--xxxx--%> Html: JSP指令:将消息传送到JSP引擎 JSP动作:使用XML语法格式的标记来控制JSP引擎的各种行为。 JSP脚本:插入Java语言程序代码
  • 101. Servlet和JSP的不同点Servlet和JSP的编程方式不一样 Servlet必须在编译以后才能运行,而JSP就不需要
  • 102. JSP网站开发模式(一)JSP+JavaBean(或EJB) JSP页面独自响应请求并将处理结果返回客户。 所有的数据通过Bean来处理,JSP实现页面的表现。 缺点 页面被嵌入大量的脚本语言或者Java代码段。 代码开发和维护变为复杂。客户端Web容器JSP (视图)Java Bean (模型)数据库请求响应
  • 103. JSP网站开发模式(二)JSP+Servlet+JavaBean (或EJB) 通过JSP来表现页面 通过Servlet技术来完成事务处理工作,它创建JSP需要的Bean对象,然后根据用户的请求行为,决定将那个JSP页面发送给用户。 优点 充分利用了JSP和Servlet两种技术原有的优点 清楚的开发者角色划分,使界面设计人员和编程人员发挥各自的优势。客户端Web容器Servlet (控制)JSP (视图)Java Bean (模型)重定向实例化数据库请求响应
  • 104. JSP程序样例<%@ page contentType=“text/html; charset=GBK” %> //设置页面的文本类型和字符编码 <%@ page errorPage=“JsptestErrorPage.jsp” %> //出错导向页 <%@ page import=“com.borland.internetbeans.*,com.borland.dx.dataset.*,com.borland.dx.sql.dataset.*” %> //引入当前页面需要使用的包 <%@ taglib uri=“/internetbeans.tld” prefix=“ix” %> //指明一个标签库和自定义标签库的前缀 Jsptest //初始化一个Bean实例 //设置JavaBean的某个属性

    //在JSP页面上显示Bean的该属性值 Value of Bean property is :
    bean0
    Enter new value for bean0.password :
    Value of bean0.password is :
    Enter new value for bean0.userName :
    Value of bean0.userName is :


    User:<%=bean0.userName%> //将计算结果并将结果传递给JSP页面输出 Passwd:<%=bean0.password%>
  • 105. 内容J2EE概述 EJB技术 WEB相关技术 J2EE的公共服务 J2EE的安全和通信
  • 106. J2EE的一些公共服务事务服务 JNDI 激活服务 消息传递服务 JDBC
  • 107. J2EE的事务服务事务服务 基本知识 EJB的事务处理 事务的并发控制问题 JNDI 激活服务 消息传递服务
  • 108. J2EE的事务服务基本知识为什么需要事务处理 基本术语 事务处理的模型
  • 109. 事务产生的动机原子操作:当我们需要把多个操作当成一个整体来看待,如果有任何一个操作失败,则整个操作失败,而其他的已执行的操作将失效。这个整体操作称为原子操作。 网络故障或机器故障:在一个分布式环境中,客户端可能需要通过网络来完成调用,当网络出现问题时,客户端可能无法判断已经完成了哪几步操作了,同样对于很多系统故障也是。 多用户共享数据:分布式系统通常是多用户的实时系统,他们可能会使用同一个数据库,当多个用户同时修改一条记录时,如何保证程序逻辑的正确性。
  • 110. 事务的基本术语事务管理器:负责管理组件的事务处理操作,通常它在幕后协调事务处理的相关操作。 事务处理组件(事务处理对象):需要开始一个事务或加入一个正在进行的事务的组件。 资源:资源指可供读写的存储介质。 资源管理器:对资源进行管理,数据库驱动程序就是一种资源管理器,不同的资源管理器之间可以进行相互操作。
  • 111. 事务所带来的益处ACID: 原子性(A t o m i c i t y )。划分到同一个事务中的全部操作要么成功,要么失败,它们的执行就像一个单独的原子操作一样。 一致性(C o n s i s t e n c y )。事务完成之后,系统要到达一个一致的、可理解的状态。“一致性”的概念或许只有使用系统的人才能辨明,因此事务只是帮助保证一致性的一种方法,而不是自己就可以保证一致性。 隔离性(I s o l a t i o n )。事务在结束之前不能相互影响,也就是说,事务执行过程中的结果对于事务之外的计算而言是“不可见的”。这个特性保证了计算不会基于可能在事务失败时被改变的不真实数据。 持续性(D u r a b i l i t y )。一旦一个事务正确地完成了,即所有的改动已经确定,那么这些改动就不会再由于后续的错误或故障而丢失,事务的结果和使用它们的实体同在。
  • 112. 事务处理的模型平面(FLAT)事务处理模型(事务不可嵌套) 个平面事务包含多个操作,这些操作作为一个整体来控制。在事务结束时候,只能由两个结果,如果成功则事务被提交,所有的操作才真正有效,如果失败,则事务回滚,所有的操作都失败。 嵌套(NESTED)事务处理模型(事务可嵌套) 嵌套事务将小一些的事务嵌套到大的事务当中,如果其中一个小事务回滚,并不会导致整个大的事务回滚。
  • 113. J2EE的事务服务事务服务 基本知识 EJB的事务处理 事务的并发控制问题 JNDI 激活服务 消息传递服务 JDBC
  • 114. EJB的事务处理目前EJB只支持平面事务模型 EJB的事务主要有以下三种方式 由Bean来实现事务处理 由容器来实现事务处理 由客户端来实现事务处理 很重要的是,EJB容器为程序员实现了底层的事务处理细节,而程序员只在较高水平上处理事务。
  • 115. 由Bean来实现事务处理由Bean来实现,也就是要编程实现事务处理,程序员必须明确发出事务开始、提交或回滚指令。 用Bean自己来管理事务最大的好处是灵活性增强了。 在Java中有两种编程会涉及到事务:JDBC和JTA JDBC事务是由DBMS的事务管理器控制的。 Sun公司在OTS(Object Transaction Service)的基础上开发了OTS的两个子API: JTS(Java Transaction Service)是OTS的Java实现,供系统级程序员使用。 JTA(JavaTransaction API)专门为组件开发人员使用的API。
  • 116. 容器来实现事务处理(一)所谓容器来处理事务就是Bean的事务处理完全交给EJB容器来控制。 Bean只有在部署时,通过部署文件告诉容器那些方法需要什么样的事务处理。 在运行时完全由EJB容器来进行事务处理,而Bean不发出任何事务处理的指令。
  • 117. 容器来实现事务处理(二)事务的六种属性: Required:当调用Bean时如果有事务,则加入事务,如果没有事务,则产生一个新的事务。 RequiredsNew:当调用Bean时,无论有没有事务,都产生一个新的事务。 Supports:当调用Bean时如果有事务,则加入,如果没有事务,不产生新事务。 Mandatory:要求调用Bean时必须有事务,如果没有抛出异常。 NotSupported:当调用Bean时有事务,则暂停事务,再调用Bean(不产生事务)。 Never:表示Bean不允许出现事务,否则抛出异常。 在部署文件中,需要为Bean的每个方法声明它的事务属性,如 Required
  • 118. 容器来实现事务处理(三) 不是所有的Bean都支持以上的事务处理方法 事务属性无状态Session Bean有状态的实现实体Bean消息驱动BeanRequired支持支持支持支持RequiresNew支持支持支持不支持Supports支持不支持不支持不支持Mandatory支持支持支持不支持NotSupported支持不支持不支持支持Never支持不支持不支持不支持
  • 119. 容器来实现事务处理(四)容器管理的事务回 滚 第一种方法是,如果容器在一个事务的执行过程中接收到抛出的系统级异常,容器自动执行回滚 。 第二种方法是调用EJBContext接口中的setRollbackOnly方法,以支持应用程序级异常。
  • 120. 客户端来实现事务处理让客户端来管理事务。 Bean的客户端可以是Servlet/JSP、应用程序、applet、CORBA客户端或其他Bean。 通过JNDI来访问JTA UserTransaction接口。
  • 121. J2EE的事务服务事务服务 基本知识 EJB的事务处理 事务的并发控制问题 JNDI 激活服务 消息传递服务
  • 122. 事务的并发控制问题(1)当多个Bean并行运行,并且都要更新同一个数据时,可能会出现逻辑错误。 为解决这个问题,就使用“封锁”这个概念。封锁就是事务可以向系统发出请求,对某个数据对象加锁,使其他事务不能更新数据直至事务释放它的锁为止。 锁可以分为读锁(共享锁)和写锁(排他锁)。 需要考虑的三个问题 不当读取(Dirty read)问题:保证事务在读取数据时,其他事务已经完成事务提交(而不仅仅完成了写操作)。 不可重复读取(Unrepeatable read)问题:保证两次读取数据一致。 幻影读取(Phantom)问题:保证两次读取的数据集一致。
  • 123. 事务的并发控制问题(2)事务隔离级别: READ UNCOMMITTED模式:不会保证任何的隔离性,但运行效率比较高。 READ COMMITTED模式:解决了dirty read问题。 REPEATABLE READ 模式:不仅解决了dirty read问题,还解决了unrepeatable read问题。 SERIALIZABLE模式:不仅解决了上述两个问题,还解决了phantom问题。
  • 124. J2EE的一些公共服务事务服务 JNDI 激活服务 消息传递服务 JDBC
  • 125. 命名服务和目录服务为什么需要命名服务 任何企业级应用程序的一个最基本功能就是能够定位组件以及服务。而组件和服务一般都分散在网络当中。当它们需要请求其他组件的服务时,如何能够找到彼此?这就需要一种方法来定位彼此。 目录服务可以被看做是一种类型的命名服务,它提供了执行更为复杂的搜索对象的能力。目录服务的搜索可以是基于对象属性,同时也可以利用搜索过滤器和搜索控制。一个目录对象可以有多个属性,而一个属性有一个标识和一个或多个值。
  • 126. 命名和目录服务器类似于一个电话接线员。 功能 把名称和对象关联起来,即将命名绑定到对象上。 提供了一个根据命名查找对象的工具 可以寻找任何类型的普通对象
  • 127. 命名服务概念 命名服务:在应用程序中通过名字来引用对象的这种机制称为命名服务。 名字:是一个逻辑上的并且一般来讲人可以阅读的值,它指向分布式系统和非分布式系统中的对象。 命名环境:名字必须放在一个命名环境中才能决定引用的是那一个特定对象。 句柄:通常被称为引用和指针。在系统中,一个对象对应于内存中的一个实例,句柄可以位于当前执行环境中与对象进行关联,也可与位于不同机器上的分布式对象进行关联。通常情况下人不可阅读这些句柄。
  • 128. JNDI服务(一)JNDI提供了一种标准的Java到命名系统的接口,它可以用于当前各种类型的命名系统。 这个方法是通过适配器将JNDI API调用映射为特定命名服务和目录服务提供商的特定调用,这个适配器被称为服务供应商接口(SPI)。 JNDI可以命名对象,名字解析对象,还可以引用命名系统之外的对象(可引用对象) JNDI还提供了处理命名系统事件的方法。 使用JNDI,只要下载一个JNDI包,了解访问目录的一个接口。
  • 129. JNDI服务(二)体系结构
  • 130. 现有的9种JNDI服务技术(1)轻量目录访问协议(Lightweight Directory Access Protocol, LDAP) 基于Java语言。 允许将Java对象和目录结构捆绑在一起。 允许使用除LDAP以外的其他目录协议。 J2EE通过JNDI LDAP SPI实现了同LDAP进行交互。 网络信息服务(Network Information Service,NIS)是一种目录服务,是SUN公司开发的并且基于UNIX平台,用来存储有关用户、机器和网络服务器的信息。J2EE通过JNDI NIS SPI可以与NIS进行交互。
  • 131. 现有的9种JNDI服务技术(2)Novell 目录服务(Novell Directory Service,DNS)是存储网络中有关硬件和软件信息的一个分布式数据库。是JNDI的主要支持者。 服务器定位协议(Service Location Protocol,SLP)发现和选择网络服务器。SLP是国际互联网中的一个标准协议。例如开发DHCP服务器、DNS服务器等。 文件系统(File System)服务技术提供了通过JNDI客户端API访问一个文件系统的通路,是最基本的和普通的命名系统。
  • 132. 现有的9种JNDI服务技术(3)CORBA COS 命名(COS Naming)允许CORBA客户程序在多层部署上或者跨企业寻找CORBA对象。JNDI也提供了CosNaming SPI与CosNaming服务进行交互。 RMI注册(RMI Registry)服务技术允许将整个RMI注册捆绑到一个目录上。这里是将RMI远程对象捆绑到一个当地的RMI注册上,然后在经JNDI将这个注册捆绑到一个目录上 BEA的WebLogic命名服务器。BEA公司是一个在其产品中捆绑了自己专有的目录服务器的EJB容器/服务器供应商。
  • 133. J2EE的一些公共服务事务服务 JNDI 激活服务 消息传递服务 JDBC
  • 134. 激活服务概念 软件从一个非活动状态到一个活动状态这样一个转移过程被称为激活。(例如当Java类被作为一个对象实例化时就会变成活动状态,一个存储的组件被分配了它自己的线程,并且装入内存后就变为活动状态) 激活服务是一个软件组件,它负责将其它软件从一个非活动的睡眠状态转向为一个活动的内存中状态。
  • 135. J2EE的一些公共服务事务服务 JNDI 激活服务 消息传递服务 JDBC
  • 136. 消息传递服务(一) 概述 消息传递服务是一个软件,它以一种可靠的、异步的、松耦合的、语言无关的及平台无关的方式在分布式应用程序之间传递消息。消息传递服务也为消息传递的客户端提供了一个接口以隔离底层的消息服务实现。 消息传递服务的实现方式 消息传递中间件方式 消息传递厚客户软件方式
  • 137. 消息传递服务(二)消息传递中间件方式
  • 138. 消息传递服务(三)消息传递厚客户软件方式
  • 139. 消息传递服务(四)4种消息传递服务 点到点的消息传递 用于消息生产和消息消费者之间点到点的通信(通常是通过消息队列来实现的) 发布-订阅消息传递 此方式消息发布者将消息发布到一个主题上 “推”消息传递模型和“拉”消息传递模型 “推”消息传递模型:消息提供者将一个消息发送给消息传递服务,消息传递服务又将消息推给消息消费者。 “拉”消息传递模型:消费者请求消息服务接收一个消息,消息服务从消息提供者来该消息。 电子邮件消息传递 在消息传递过程中还涉及消息过滤、消息同步和服务质量问题。
  • 140. 消息传递服务(五)JMS概念 消息服务为分布式对象间提供了可靠的异步通信方式。 提供了在消息客户端和消息服务端进行相互通信的应用程序接口(API)。 通过使用这个通用API,分布式对象能够以可升级的、可进行事物处理的、容错的以及异步的方式进行通信。 最重要的是JMS提供了一种厂家无关的通信方式。 JMS消息的模型 PTP(Point-to-Point)点对点 Pub/Sub(Publish/Subscribe)发布-订阅 JMS消息结构 消息标题 消息属性 消息主体
  • 141. 消息传递服务(六)CORBA消息传递 CORBA的事件服务 使用了“推”消息传递模型和“拉”消息传递模型 CORBA的通告服务 通告服务是对事件服务的扩展 允许使用可配置的过滤器对象API对事件进行过虑 提供了QoS 增添了发布-订阅消息传递模型 JavaMail
  • 142. J2EE的一些公共服务事务服务 JNDI 激活服务 消息传递服务 JDBC
  • 143. JDBCJDBC的概念 JDBC的结构 JDBC驱动程序的类型
  • 144. JDBC的概念JDBC (Java Database Connectivity) API是在Java平台上为了操作数据库而提供的接口集合。 JDBC独立于数据库管理系统。 JDBC包含两部分与数据库独立的API 面向程序开发人员的JDBC API 面向底层的JDBCDriver API JDBC的主要作用 建立与数据库的连接 执行SQL语句,查询数据库 产生查询结果 执行更新、插入和删除动作 执行存储过程
  • 145. JDBC的结构JDBC API JDBC API提供独立于数据库的接口类。在JDBC API上只涉及为利用数据库而提供的类的接口,而这个接口是由提供JDBC驱动的软件商来实际完成的。 JDBC驱动管理器 作用是在JDBC运行结构上提供最基础的指引功能。即当一个JDBC API程序进行数据库调用的时候,它会选择一个正确的JDBC驱动程序进行连接。 JDBC驱动程序 作用是当JDBC API编写的程序进行数据库调用的时候,实际的连接数据库并进行相应的处理。JDBC驱动提供JDBC API接口类的实现。JDBC APIJDBC 驱动管理器JDBC 驱动ODBC 驱动数据库JDBC的结构
  • 146. JDBC驱动程序的类型JDBC-ODBC桥加ODBC驱动程序 通过JDBC-ODBC桥把JDBC请求转换成ODBC请求。 必须将ODBC二进制代码加载到使用该驱动程序的每个客户机上。 因为要经过两个阶段的转换,所以要比单一形式的JDBC 连接数据库的速度要慢一点、性能上差一点。 丧失了Java所固有的跨平台特性。 本地API-部分用Java来编写的驱动程序 把客户机API上的JDBC调用转换成Oracle、DB2、Informix、Sybase等的调用。 要求将某些二进制代码加载到每个客户机上。 网络协议-纯Java驱动 将JDBC转化成与数据库管理系统(DBMS)无关的网络协议,之后这种协议又被某个服务器转换成一种DBMS协议 本地协议-纯Java驱动 将JDBC调用直接转换为DBMS所使用的网络协议。 允许从客户机机器上直接调用DBMS服务器。
  • 147. JDBC其他特性支持新SQL3数据类型 BLOB——二进制大对象。 CLOB——字符大对象。 ARRAY——可以存储多个某特定类型的值。 STRUCT——任何SQL结构类型的缺省映射。 REF——作为数据库中SQL数据的引用。 支持批处理语句 把多个更新语句作为一个单独的事务向数据库提交。 DataSource接口 用来处理JNDI,允许使用已经在JNDI命名服务中注册的DataSource对象建立连接。
  • 148. JDBC其他特性(续)连接池 连接池是一组加载到内存中的数据库连接,以便重复使用。 支持分布式事务 分布式事务——能够分布在多个数据库实例上的事务。通常使用阶段提交的技术来管理分布式事务。 RowSets(数据行集) 提供了非连接操作的灵活性。 RowSets实际上扩展了ResultSet接口,是一个JavaBean,封装了数据结果集和可访问信息。
  • 149. 内容J2EE概述 EJB技术 WEB相关技术 J2EE的公共服务 J2EE的安全和通信
  • 150. 安全基础知识加密技术 消息摘要、对称密钥、非对称密钥 认证和不可抵赖 认证:唯一地识别一个主体,主体可以安全地向系统标识自己。 不可抵赖:证明某个主体发送或接收了一个特定的消息。生成提供这一证据的NR令牌。 安全套接字层(Secure Socket Layer,SSL) 访问控制 提供一种方式来限制主体基于他们的身份对有价值得资源的访问。 随意的访问控制、基于角色的访问控制、强制性的访问控制、防火墙访问控制 域:一组权限可以被授予一个域。 审计:记录在一个安全域内发生的安全性十分重要的操作。 策略和管理
  • 151. J2EE提供的安全在J2EE中,可以使用容器提供的工具来“配置”整个应用程序所需要的安全性。 安全交给容器管理的两个好处 不需要在Bean中进行安全性编码。 服务器管理员可以自由地修改安全性原则。 对于安全性,应用程序的要求: 任一客户端访问容器的组件,必须先“认证”。 在客户端身份得到认证后,还必须获得相应的权限进行操作,这叫“授权”。
  • 152. 认证认证指的是用户向系统证明他是谁的过程。 客户端认证 当一个J2EE应用程序客户端开始运行时,容器会打开一个窗口要求用户输入用户名和密码。 容器认证通过后,就会将一个安全Context对象和这个用户关联。 用户每次调用容器中的Bean时,都需要使用这个对象来获取安全性消息。 设置web资源的认证机制有3种方法 HTTP基本认证 基于表单的认证 客户端证书认证
  • 153. 授权授权指的是应用服务器授予某个用户访问哪些Bean的那些方法的权限。 用户可以为每个Bean的每一个方法设置其安全性,而只有那些授权用户才能访问Bean的这些方法。 这种安全设置在部署的时候完成,不需要在Bean中嵌入任何安全性代码。 配置一个Enterprise Bean 的安全性属性可分为三步 定义角色 设置Bean的方法的访问权限 把角色映射到用户或组 安全授权的传递 第二个Bean继承第一个Bean地授权。(Use Caller ID) 每个Bean都单独进行安全性授权。(Run As Specified Role) 编码实现安全逻辑 服务器还无法提供对实例的授权 Bean类的每一个实例使用的安全策略不一定相同。
  • 154. 内容J2EE概述 EJB技术 WEB相关技术 J2EE的公共服务 J2EE涉及的技术 J2EE的安全 J2EE的通信
  • 155. J2EE的通信分布式系统 网络通信 TCP/IP协议簇 套接字编程 Web通信 HTTP、CGI、servlet DCOM通信 CORBA通信 GIOP、IIOP RMI通信
  • 156. CORBA通信——GIOP概述 把已编码的IDL数据类型映射为通过线路发送的二进制数据流。 使用一种公共数据表示语法完成这一任务,它可以有效地在IDL数据类型和二进制数据流之间映射。 GIOP消息允许对象实例表示在ORBs之间动态地重新定位
  • 157. CORBA通信—— IIOP概述 IIOP把GIOP消息数据映射为TCP/IP连接行为和输入/输出流读/写。 当一个CORBA服务器对象被分布时,ORB将通过一个可互操作的对象引用(Interoperable Object Reference,IOR)产生在网络上唯一标识那个对象的消息。 CORBA服务器在套接字上监听到来的客户连接请求。CORBA客户获取IOR句柄并且打开到关联的套接字的连接。 客户和服务器然后通过这个连接进行GIOP消息通信
  • 158. RMI基本概念 RMI是Java的分布式对象通信模型 基于RMI的Java客户可以远程地激发位于基于RMI的Java服务器对象之上的方法 RMI客户通过激发位于客户端的代理对象中的方法而与分布式服务器透明地通信 客户端代理对象将传递给它的参数序列化并且以流的方式发送给分布式服务器代理 分布式服务器代理接着从序列化的参数中分离出参数并且将它们传递给适当的分布式服务器对象实例 RMI允许客户和服务器将对象作为方法的参数传递并且可以按照值或引用方式返回方法的返回值
  • 159. RMI通信 自Java诞生之日起,Java远程方法激发(Java Remote Method Invocation,JRMI)框架就是Java的分布式通信框架 随着RMI/IIOP API和框架不断进化,RMI和CORBA现在已开始相互融合 RMI最早可以使用的底层通信消息传递模型是Java远程方法协议(JRMP) JRMP是简单的Sun专用的有线传输协议,位于TCP/IP之上 一个JRMP包包含一个消息头和一个或者多个消息
  • 160. RMI和IIOP 利用CORBA的IIOP作为分布式对象通信中的标准传输有线协议,RMI的可以在IIOP之上通信的能力使得RMI应用程序与基于CORBA的系统之间的互操作成为可能 RMI/IIOP提供了Java基于RMI的通信与以其它语言实现的对象之间的互操作性 Java编程人员可以充分利用建立RMI应用程序的简单性,并且使用RMI/IIOP提供的Java到IDL编译器生成IDL
  • 161. RMI-IIOPCORBA跨语言的支持功能;RMI是为JAVA的简单分布式对象通信提出的。 使用的协议是CORBA和RMI实现互补性的关键所在。RMI Skeleton希望通过JRMP协议来接受请求,而CORBA Skeleton希望通过IIOP协议来接受请求,而这个协议曾应该是完全可插拔的。 RMI-IIOP允许CORBA客户端、RMI客户端、CORBA对象实现和RMI对象实现的混合使用和交互。
  • 162. 谢谢!
  • 163. HelloHome.java of Helloworldpackage helloworld; /** * 该接口实现所得到的对象叫做Home对象,负责创建EJB * 对象实例。 */ Public interface HelloHome extends javax.ejb.EJBHome { /* 这一方法创建,并返回一个EJB对象 */ Hello create() throw java.rmi.RemoteException,javax.ejb.CreateException; } /* create() 方法与HelloBean的ejbCreate()方法对应*/返回
  • 164. Hello.java of HelloworldPackage helloworld; / ** * 客户端通过该接口与EJB对象相互作用。EJB容器供应* *商实现该接口。实现的对象就是EJB对象,它将触发的方*法调用委托实际的Bean。 */ Public interface Hello extends javax.ejb.EJBObject { /*唯一的方法 hello() 简单地把问候语返回给客户端。*/ public String hello() throws java.rmi.RemoteException; }返回
  • 165. HelloBean.java of Helloworldpackage helloworld; /* helloworld bean 类的实现 */ public class HelloBean implements javax.ejb.SessionBean{ public void ejbCreate() {/*初始化Bean*/ System.out.println(“ejbCreate()”); } public void ejbRemove() { System.out.println(“ejbRemove()”); } public void ejbActivate() { Sysetem.out.println(“ejbActivate()”); }public void ejbPassivate() { System.out.println(“ejbpassivate()”); } /* public void set Sessioncontext(javax.ejb.Sessioncontext ctx) { System.out.println(“setSessionContext()”); } // Business methods public String hello() { System.out.println(“hello()”); return “Hello,World!”; } }返回
  • 166. Ejb-jar.XML of Helloworld Hello helloworld.HelloHome helloworld.Hello helloworld.HelloBean Stateless Container 返回
  • 167. HelloClient.java of Helloworldpackage helloworld; import javax.naming.Context; import javax.naming.InitialContext; import java.util.Properties; Public class HelloClient { public static void main(String[] args) throws Exception { /*初始化JNDI*/ Context ctx=new InitialContext(System.getProperties()); /*获取Home对象的引用*/ HelloHome home=(HelloHome) javax.rmi.PortableRemoteObject.narrow( ctx.lookup(“HelloHome”),HelloHome.class); Hello hello=home.create(); /*用Home对象创建EJB对象*/ System.out.println(hello.hello()); /*用EJB对象调用Hello()方法*/ hello.remove() /*完成调用,将Hello对象删除*/ }返回