Presentation is loading. Please wait.

Presentation is loading. Please wait.

Java EE的基本原理及 构件开发技术 哈尔滨工业大学计算机学院 唐好选

Similar presentations


Presentation on theme: "Java EE的基本原理及 构件开发技术 哈尔滨工业大学计算机学院 唐好选"— Presentation transcript:

1 Java EE的基本原理及 构件开发技术 哈尔滨工业大学计算机学院 唐好选

2 基本内容 Java EE概述 EJB技术 基于EJB构件的开发过程 三种构件模型的关系

3 J2EE概述

4 Java平台的发展 J2SE (Java2 Platform, Standard Edition) 用于桌面程序和Java小程序开发
称为J2SDK,简称JDK J2EE (Java2 Platform, Enterprise Edition) 用于企业级开发 称为J2SDKEE J2ME (Java2 Platform, Micro Edition) 用于手持设备的开发(手机和PDA) JRE (Java Runtime Environment)

5 Java平台的发展

6 Java EE的发展 J2EE 1.0 1999年发布 J2EE 1.2 2000年发布 J2EE 1.3 2001 年发布
J2EE 年发布,即Java EE Java EE 年发布 Java EE 年发布,最新版

7 Java EE 1.7的核心组件

8 Java EE 应用架构示例(1)

9 Java EE 应用架构示例(2)

10 Java EE核心技术 浏览器 Applet 应用程序 客户机 RMI JSP/JSF Servlet 表示层 专业服务层 遗产系统 数据库
Web/HTTP服务器 JSP/JSF Servlet 表示层 应用服务器 EJB Java IDL J N D I M S P A 专业服务层 遗产系统 数据库 分布式 CORBA对象 后端系统

11 Java EE核心技术(1) EJB(Enterprise Java Bean) 提供了让客户端使用远程的分布式对象的框架
EJB规约规定了EJB构件如何与EJB容器进行交互 EJB容器提供了 目录服务、事务管理、安全、连接池管理和容错服务等 RMI ( Remote Method Invocation)和RMI-IIOP 是EJB构件和客户端的通信API 允许进程间通信并提供其它与通信相关的服务 RMI-IIOP是一个可移植的RMI扩展,利用IIOP作为通信协议

12 Java EE核心技术(2) JNDI(Java Naming and Directory Interface) 是命名和目录服务的标准
实现对对象的命名,包括Web组件、EJB组件、数据库系统等 对象的名字通过命名和目录服务绑定到具体对象 EJB依赖JNDI通过网络查找分布式构件 在Java EE环境下,任何构件必须在JNDI服务器注册 JPA(Java Persistence API),用于对象持久化的API,JPA本质上就是一种ORM规范,JPA未提供ORM实现,只制订了一些规范,提供了一些编程的API接口,具体实现由服务器厂商提供 支持XML和注解 通过面向对象而非面向数据库的查询语言查询数据,避免程序的 SQL语句紧密耦合。

13 Java EE核心技术(3) JTA (Java Transaction API) JTA是一个高层次的事务处理接口
JMS( Java Message Services) 是与消息驱动构件通讯的API 同时支持点对点消息队列服务和发布-订阅消息服务 支持可靠消息传递、消息传递事务及持续消息等, 是EJB消息驱动Bean的基础

14 Java EE核心技术(4) JSP(Java Server Page)和 Servlet 技术 服务器端的程序
用于扩展服务器的功能,响应用户的请求 可将结果转化为标准的HTML代码返回给用户 JSF(Java Server Faces) 用于构建Web应用程序的新标准Java框架 提供一种以组件为中心来开发Java Web用户界面的方法 将Web应用开发者划分为三个角色:网页设计人员;应用程 序设计人员;UI组件开发人员

15 Java EE核心技术(5) WebSocket API
是下一代客户端-服务器的异步通信方法,取代了单个TCP套 接字,可用于任意的客户端和服务器程序,由W3C进行标准化 WebSocket API可使服务器和客户端可以在给定的时间范围内 的任意时刻,相互推送信息 WebSocket并不限于以Ajax(或XHR)方式通信,服务器和客 户端可以彼此相互推送信息,WebSocket允许跨域通信  Java IDL/CORBA 是CORBA规约的一种Java实现 通过Java IDL可以让Java对象发布到CORBA的ORB上 从而通过ORB与别的CORBA对象进行交互

16 Java EE核心技术(6) Interceptors(拦截器)
是在访问某个Action或Action的某个方法,字段之前或之后实施 拦截,拦截器是可插拔的,是AOP的一种实现 JAF(Java Activation Framework)/ Java Mail 是一套允许在Java程序中以与平台无关、协议无关的方式发送 电子邮件的API JavaMail可利用JAF处理邮件的编码 XML( 可扩展标记语言) 是一种描述数据的元语言 Java中用JAXP( Java API for XML Parsing)对XML文件进行解析 EJB通常将XML作为元标记语言表达内容

17 EJB技术

18 EJB技术 EJB简介 EJB体系结构 EJB编程模型 EJB构件接口 构件规约 构件分类 EJB构件的开发

19 什么是EJB? EJB不是一种产品,而是为开发和使用“基于事务和分布对象应用的服务器端构件”而定义的一种技术规约,用户可根据该规约开发EJB构件。 EJB构件是一组分布式的对象,可通过EJB容器的控制为分布在因特网上的用户提供远程服务。

20 什么是EJB? EJB规约定义了EJB构件与EJB容器之间的交互机制,描述了EJB构件和EJB容器在运行时的行为。例如安全访问如何检验、事务如何管理、持久性如何应用等。保证了EJB构件在容器间的可移植性 EJB容器运行在EJB服务器中,EJB规约还定义了EJB容器和EJB服务器的标准模型

21 EJB的目标 EJB的目标是为服务器端构件系统定义一个技术规范,该规范可实现如下要求: 提供一个标准的、分布的、基于OO的体系结构
屏蔽复杂的系统级功能需求 兼容CORBA标准 具有与非Java应用之间的互操作能力

22 EJB的现状-EJB3.0 EJB3.0于2006年5月随JAVA EE 5发布
EJB3.0完全抛弃了EJB 2.x实体Bean的设计,仅仅保留原有的 Session Bean和消息驱动Bean;引进了全新的JPA规范作为持久化 解决方案 简化了EJB 2.x中Session Bean的开发,Session Bean不再需要 Home接口,只要求提供远程或本地的业务接口即可 不再推荐使用XML文件作为部署描述文件,而是改为使用 Annotation来设置部署描述信息

23 EJB的现状-EJB3.1 EJB3.1于2009年随JAVA EE 1.6发布 允许企业Bean只提供一个Bean类,甚至无须提供业务接口
允许通过异步的方式调用Session Bean的业务方法 简化了EJB的类文件必须打包到JAR文件中的限制,允许直接将 EJB类放到WAR文件中

24 EJB的现状-EJB3.2 EJB3.2于2013年7月随JAVA EE 7发布 支持本地异步会话Bean调用
Java I/O访问权已放宽,用“应谨慎行事”取代了“不允许” 有状态会话bean的生命周期回调拦截方法,可以在一个事务环 境中执行(由生命周期回调方法的事务属性决定) 可以完全禁用特定的有状态会话bean的钝化 TimerService API已被扩展,可以在同一个EJB模块中查询所有 活动计时器 会话bean指定实现接口(作为本地或远程业务接口)的默认规 则已经放宽,可以包含多个接口

25 Java EE的应用架构-经典JAVA EE架构
以EJB为核心,前端以JSF(Java Server Faces)为MVC框架的 技术架构,这种技术架构以Sun提倡的官方Java EE技术为主

26 Java EE的应用架构-轻量级Java EE架构
以Spring+Hibernate为核心,前端以Struts 1或Struts 2为MVC框 架的技术架构,这种技术架构以主流的开源框架为主

27 Spring框架 组成 Spring 框架的每个模块(或组件)都可以单独存在,或者 与其他一个或多个模块联合实现
核心容器:核心容器提供 Spring 框架的基本功能。核心容器的 主要组件是 BeanFactory。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际应用程序代码分开 Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架 提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、 EJB、电子邮件、国际化、校验和调度功能 Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程 序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置 的,MVC 容纳了大量视图技术

28 Spring框架和EJB Spring框架实际上大量参考了EJB的设计理念,只是Spring摈弃 了EJB开发中的3大烦琐之处:
(2)需要大量使用XML配置文件 (3)EJB组件必须打包成JAR包 Spring容器取代了原有的EJB容器,因此以Spring框架为核心的 应用无须EJB容器支持,可以在Web容器中运行 Spring容器管理的不再是复杂的EJB组件,而是POJO(Plain Old Java Object) Bean

29 EJB的体系结构 … 对象池 EJB容器 EJB服务器 EJB客户机 业务接口 Home接口 Bean代理 EJB部署描述 Bean实现
业务方法 EJB客户机 创建/删除/查找 业务接口 Home接口 Bean代理 对象池 EJB部署描述 Bean实现 EJB容器 EJB服务器

30 EJB的体系结构-EJB客户机 请求EJB构件服务的应用程序,EJB规约为创建EJB构件的客户接口定义了一套标准,主要包括:
EJB Home接口:客户使用JNDI来查找对EJB Home接口的引用,为客户机创建、删除、查找EJB Remote接口对象的句柄提供了相应的操作 EJB 业务接口:通过该接口可调用构件的业务方法 RMI/IIOP或RMI/JRMP协议:客户机和容器通信的标准协议,这些底层的分布式通信机制对于EJB客户机和EJB构件开发者都是透明的

31 EJB的体系结构-EJB服务器 为使用EJB构件的应用程序提供操作环境,并提供所有必要的 服务来支持EJB体系结构
Java白皮书承诺:“EJB规约为每个支持Java程序的应用服务器 定义了一个标准模型,任何厂商都可以使用此模型来实现对EJB 构件的支持” EJB服务器的主要功能包括 管理EJB容器 提供对操作系统服务的访问 提供与Java相关的服务

32 EJB的体系结构-EJB容器 为EJB构件提供运行环境,EJB容器对EJB应用程序是透明的

33 EJB的体系结构-EJB容器

34 EJB的编程模型-关键特征 面向对象 分布式计算:EJB构件在理论上是位置透明的

35 EJB的边界 EJB实例 容器 EJB Server 客户机 部署描述符/ Annotation 构件合约 客户视图

36 EJB构件接口 构件接口是构件提供者为便于复用者(客户)复用该构件所提供的必要信息 构件与容器协作实现这些接口

37 EJB构件规约

38 EJB构件规约 EJB可使Java编写的服务器组件开发和部署标准化 EJB构件规约定义了以下接口 EJB和容器之间的接口
容器和应用服务器之间的接口 容器和客户端之间的接口 容器和持久管理器之间的接口

39 EJB构件分类 EJB构件分为三(四)种基本的类型 会话构件(Session Bean)
有态会话构件(Stateless Session Bean) 无态会话构件(Statefull Session Bean) 消息驱动构件(Message-Driven Bean) 实体构件(Entity Bean)

40 会话构件 特征: 与单个客户相对应 不直接表示数据库中的共享数据 生命周期相对较短 当EJB容器崩溃时,也随着消失
类别:Stateful (有态) Stateless (无态)

41 有态构件的生命周期 实例抛出系统异常 超时 @PreDestroy @postConstruct 超时 业务方法 @PrePassivate
@PostActivate

42 无态构件的生命周期 @PostConstruct @PreDestroy 业务方法

43 两种会话构件的选择 Stateful ? Stateless? 过程需要保持状态? 加入过程中断,恢复运行时需要以前的信息吗?

44 两种会话构件的选择 发生下列情况时应该考虑使用有状态会话Bean 在方法调用时,会话Bean需要维护成员变量的数据
会话Bean正在服务一个交互客户端,EJB容器或应用服务器需要了解该客户端 发生如下情况时应考虑使用无状态会话Bean 不需要维护跨越方法调用的成员变量中的数据 会话Bean提供的服务并不针对某种客户端

45 消息驱动构件(MDB) MDB是一种JMS消息的使用者,MDB负责从消息队列或者消息主题中读取消息
MDB的输入参数只有一种类型,即消息对象,是那些实现了Message接口的Java对象 生命周期由EJB容器控制 客户端和MDB是完全独立的,客户端无法直接调用MDB方法,而是由消息服务器负责把消息发送给MDB 无状态

46 消息驱动构件(MDB)

47 MDB的生命周期 @PostConstruct @PreDestroy

48 MDB常用开发模式 客户端可直接调用Session Bean,发布消息到主题 MDB接收并处理消息

49 EJB构件开发与应用

50 EJB构件的开发(SessionBean)
业务接口(Business interface):定义EJB构件的逻辑方法 Bean类(Bean class):实现主要的业务逻辑 EJB客户机 Business接口 Bean1 EJB容器 Bean2 Business 接口

51 开发SessionBean 开发一个 SessionBean,需要定义接口和 Beanclass;其中接口 分为远程(remote)和本地(local)接口 远程接口(remote interface)定义业务方法,可以被来自 EJB 容器之外的应用访问到 本地接口(local interface):同样定义了业务方法,可以被同 处于 EJB 容器内的其它应用使用。因为 local 接口允许 bean 之 间直接通过内存交互,没有分布式对象协议的开销,从而改善 了性能 Bean 类包含了业务逻辑,必须具备一个远程或本地接口, Bean类应实现接口的业务方法。在 EJB3中,不要求同时实现 remote 和 local 接口,但实现两者是比较好的做法

52 开发SessionBean第一步 第一步:定义一个包含业务方法的接口。该接口不需要包含任何注释,是一个普通的 java 接口。调用 EJB的客户端使用这个接口引用从 EJB 容器返回的存根(stub)

53 开发SessionBean第二步 第二步:编写BeanClass

54 SessionBean的客户端开发 public static void main(String[] args) {
Properties props = new Properties(); props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); props.setProperty("java.naming.provider.url", "localhost:1099"); try { InitialContext ctx = new InitialContext(props); HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote"); System.out.println(helloworld.sayHello(“哈工大")); } catch (NamingException e) { System.out.println(e.getMessage()); }

55 EJB的调用机制 1、客户端调用远程接口方法(实际上调用存根对象的方法) 2、方法调用经过转换成CORBA IIOP消息发往应用服务器
3、应用服务器接收到请求消息后,交由骨架处理。骨架调用bean实例的方法 4、骨架将方法返回值转换成CORBA IIOP应答消息发回客户端 5、存根对象将CORBA IIOP应答消息解析成返回值

56 三种构件模型的关系

57 EJB 与CORBA CORBA是目前分布式对象处理事实工业标准,大部分厂商都 支持CORBA标准,同样,EJB规范中也考虑对CORBA的支持 CORBA客户机(用CORBA支持的语言写的程序)可以存 取基于CORBA的EJB服务器上的构件 客户机在一个事务过程中可以同时调用CORBA和EJB对象 事务可以同时利用多个由不同开发商提供的,基于CORBA 的EJB服务器

58 COM 与 EJB的相同点 基本形态相同, 可以独立封装,并可以动态加载 在运行过程支持接口 都对构件进行生命周期管理
构件的运行环境包括众多的公共服务

59 COM 与 EJB的区别 支持环境的实现不同 EJB的支持环境运行于操作系统之上,体现了一种大粒度 的模块化思想
COM的支持环境与操作系统密切相关,COM的支持环境 是操作系统的一部分 支持的语言不同 EJB 仅支持Java语言 COM 支持C、C++、Basic等 构件生命周期的实现方式不同 EJB 主要通过容器实现,独立于具体的构件实现 COM 主要通过类厂实现,与具体的构件实现一一对应

60 The End!


Download ppt "Java EE的基本原理及 构件开发技术 哈尔滨工业大学计算机学院 唐好选"

Similar presentations


Ads by Google