1、1,企业应用模型与Java EE体系结构,应用程序的开发模型 传统应用程序模型 三层分布式对象架构 企业级应用问题及解决方案 Java EE架构及核心技术,2,应用程序的开发模型,计算机应用程序的一般特点 大多数应用都由三部分组成: 用户界面部分:表示层 应用逻辑部分:业务逻辑层 数据访问部分:数据访问层,3,应用程序的开发模型,应用程序开发模型的变迁过程单层 两层 三层 N层,4,传统应用程序模型(一),数据访问、表示和业务逻辑在一个应用中 代码复用、代码可维护性、代码的修改十分困难 应用不是分布式的,不具有可伸缩性,主机系统或单层结构:主机/终端模式,5,传统应用程序模型(二),用户界面和
2、程序逻辑绑在一起,代码难以重用 服务器的数据库必须同每一个活动的客户保持连接,消耗大量的运算资源,随着客户数目的增加性能不断下降,且存在死锁及崩溃的可能 数据模型“紧耦合”在每一客户端,数据库结构改变将导致全体客户端改变,不利于更新和维护 原始数据通过网络传递:加重网络负担 客户端应用程序越来越大,对使用者的要求也越来越高,客户/服务器结构:“胖”客户端,6,三层分布式对象架构,客户端:业务数据模型与UI分开,更“瘦” 业务逻辑在中间层,成为“对象服务”。 中间层可以处理多客户端,通过:连接池,多线程,对象一致性处理 编程困难,7,关于分布式计算,对象化的RPC(Remote Procedur
3、e Call) 对象之间的互操作性 信息的传递 在此方面的解决方案: CORBA (Common Object Request Broker Architecture) RMI (Remote Method Invocation) DCOM (Distributed Component Object Model),8,Web服务器与CGI,WWW浏览方式所带来的: “Browser-based” 客户端与“Internetworking” 计算方式向服务器端的集中转化,9,N层计算模式的引入,从1层到N层,得到的改进: 每一层可以被单独改变,而无需其它层的改变 降低了部署与维护的开销 资源(如
4、连接)可以被缓冲和重复利用 提高了灵活性、可伸缩性,并使性能提高成为可能 瘦客户端的引入使Internet接入方便,而计算被集中至服务器端 仍然存在的问题: 对企业级应用开发人员的要求太高:熟悉分布式协议,进行一致性事务处理,负载平衡,安全,10,构件(component)与中间层开发,两个转变: 计算模式上:网络计算(Network Computing) 生产模式上:基于构件的开发(Component-based Dev) 二者的结合:服务器端中间层构件的开发,11,构件的优点与特点,一个软件构件是一个组合的单位,它包括合同化声明的接口及明确说明的上下文相关性。一个软件构件可以被独立部署且服
5、务于第三方所做的组合。 构件的特点: 构件是编译码 构件是一个独立部署的单位 构件是一个由第三方进行组合的单位 构件没有持久的状态 构件的优点: 可插入 更好的设计 更好的复用 方便的更新 实现与接口分离,12,企业级应用开发问题,分布式 可移植 面向Web体系 可装配 满足企业计算要求 一致性 事务性 安全性 好的特性 可伸缩 可扩展 易维护,13,解决方案-应用服务器,应用服务器可以为服务器端构件提供: 一致性,事务处理与负载平衡 从而简化了编程工作 但在J2EE之前,这些API是应用服务器相关的!,14,解决方案Java EE,Java EE提供了一套完整的解决所有这些问题的框架方案:提
6、供了分布式、可移植构件的框架为构件与应用服务器提供标准API简化了服务器端中间层构件的设计,15,解决方案Java EE,Java EE对开发者和用户来说意味着:更短的开发时间 可重用构件 JSP EJB 更简化的连接 XML,JDBC,RMI-IIOP,16,Java EE技术架构,J2EE架构:,17,容器和构件,18,Java EE核心技术,J2EE核心技术:13种EJB、 CORBA、 RMI、JSP、Java Servlet、JavaBean、JDBCXML、JMS,19,Java EE核心技术-EJB,EJB (Enterprise JavaBeans) :EJB不是一个具体的产品
7、,而是一个Java服务器端组件开发的规范,软件厂商根据它来实现EJB服务器。 使用EJB,Java程序员可以将一些定义明确的程序块组合到一起,从而方便、快捷地建构分布式应用程序。 使用EJB可以使整个程序分块明确,并且EJB可以使用其它EJB或JDBC等服务,从而增强了分布式应用程序的可扩展性和性能; EJB规范在简化分布式应用程序开发复杂性方面做了大量的工作,所以EJB程序员不必太担心事务处理、多线程、资源管理等方面的问题,可以专注于支持应用所需的商业逻辑,而不用担心周围框架的实现问题。 EJB的使用增强了整个系统程序的可靠性、可管理性和可移植性。,20,EJB容器是:EJB的运行环境。它提
8、供规范中定义的接口使EJB类访问所需的服务。容器厂商也可以在容器或服务器中提供额外服务的接口。 它的责任包括:,Java EE核心技术-EJB,21,Java EE核心技术-EJB,EJB服务器是:管理EJB容器的高端进程或应用程序,并提供对系统服务的访问。EJB服务器也可以提供厂商自己的特性,如优化的数据库访问接口,对其他服务(如CORBA服务)的访问。一个EJB服务器必须提供支持对JNDI的名字服务和TS事务服务的可访问。,22,Java EE核心技术-EJB,EJB组件的三种类型: (1) Entity Bean(实体Bean) :实体Bean代表数据对象,通常代表的是数据表记录集的一行
9、,一个实体EJB可以同时与多个客户进行交互。 (2) Session Bean(会话Bean) :会话EJB向客户提供一定的服务,如:特定的商业逻辑、数据库查询等; (3) Message-Driven Bean(消息驱动Bean):以上两种Bean以同步方式为EJB客户提供服务。消息驱动Bean采用Java消息服务JMS,客户程序可以将消息发送给消息队列,消息驱动Bean检索消息队列,执行其内容。,23,Java EE核心技术-EJB,实体Bean业务数据模型 对业务概念的反映,也称为领域类(domain class) 在持久存储中业务实体的对象视图 提供访问和操作数据的对象封装 支持多用户
10、共享的数据 可以从数据库中存储的属性重新实例化 EJB 服务器崩溃后仍可重构 与数据库中的数据有一样长的生命,24,Java EE核心技术-EJB,实体Bean 的持久性自管理的持久性 优点: 开发者有完全的控制 无需复杂的提供商支持 缺点: 编码复杂 在改变时需要重新编码和部署 影响可移植性,25,Java EE核心技术-EJB,实体Bean 的持久性容器管理的持久性 优点: 提供商解决,可能会有更好的缓冲和性能 在部署描述符中进行改变即可 可移植性好 缺点: 对容器提供商的工具依赖性强 可能不易反映复杂的数据关系,26,Java EE核心技术-EJB,会话bean:经常用于涉及多个实体be
11、an的业务处理和控制逻辑。,27,Java EE核心技术-EJB,会话bean:相对生命较短(一般与客户同步)在EJB服务器崩溃时被删除不表示数据库中的数据,但可以访问数据作为一个客户的代表执行功能可以加入事务,28,Java EE核心技术-EJB,何时使用会话bean: 使用会话bean 对针对于某一客户的处理或控制对象建模; 对工作流、任务和管理活动等建模(如订房、购物车等); 协调多个实体bean,控制实体bean之间的交互; 将业务应用逻辑从客户端转移到服务器端。,29,Java EE核心技术-EJB,会话bean与实体bean的比较,30,Java EE核心技术-EJB,两种类型的会
12、话bean 无状态(Stateless)bean 表达一个无状态的服务(如列表,mail) 不存储用户相关信息,进行对请求的响应 暂态的 可用来构造响应频繁而简单的访问的bean池 有状态(Stateful)bean 维护客户状态,31,Java EE核心技术-EJB,实现EJB的三个关键构件 EJBHome 接口(扩展javax.ejb.EJBHome接口):使用了factory设计模式,定义了创建、查找EJB的方法。 EJBObject接口(扩展javax.ejb.EJBObject接口):使用了proxy设计模式,定义了在bean中实现的业务逻辑方法。 Bean实现类(实现javax.e
13、jb.EntityBean/SessionBean):实现业务逻辑。,32,Java EE核心技术-EJB,EJB的实现举例 / business methods public interface Account extends EJBObject /return the account information corresponding to this account. public AccountModel getDetails() throws RemoteException; / updates the contact information for the specified acc
14、ount public void changeContactInformation(ContactInformation info)throws RemoteException; ,33,Java EE核心技术-EJB,EJB的实现举例,public interface AccountHome extends javax.ejb.EJBHome public Account create(String userId,String status, ContactInformation info)throws RemoteException,DuplicateKeyException,Create
15、Exception;public Account findByPrimaryKey (String userId)throws RemoteException, FinderException; ,34,Java EE核心技术-EJB,EJB的实现举例 public class AccountEJB implements EntityBean / entity state private String userId; private String status; private ContactInformation info; / resources private EntityContext
16、 context; / implement account interface business methods public void changeContactInformation(ContactInformation info) this.info = info; public AccountModel getDetails() return(new AccountModel(userId, status, info); ,35,Java EE核心技术-EJB,EJB的实现举例,/ must match signatures of create methods in Home inte
17、rface public String ejbCreate (String userId, String status, ContactInformation info)throws DuplicateKeyException,CreateException / set the instance datathis.userId = userId; this.status = status;this.info = info;AccountDAO ADAO = new AccountDAO(userId, status,info);tryADAO.create(); / insert data i
18、n databasereturn (userId); / return primary keycatch (java.sql.SQLException se) throw new CreateException (“SQL Exception in create:“ + se); ,36,Java EE核心技术-EJB,EJB的实现举例,37,Java EE核心技术-CORBA,CORBA体系结构:核心ORB,38,Java EE核心技术-CORBA,CORBA技术:CORBA(Common Object Request Broker Architecture)是分布式对象体系结构,它独立于平
19、台,也独立于语言。 在这个体系结构中,对象可以被本机上的客户或远程客户通过方法激活来存取。客户(对象或应用)无须知道被调用对象(称为服务对象)的运行环境,也无须知道实现这个对象的编程语言,客户只要知道服务对象的逻辑地址和提供的接口。 这种互操作性的关键是IDL(Interface Definition Language、接口定义语言),IDL说明对象接口中的方法,这些方法可以被其他对象(或应用)激活。,39,Java EE核心技术-RMI,RMI技术: RMI(Remote Method Invoke)是一种被EJB使用的更底层的协议,正如其名字所表示的那样,RMI协议调用远程对象上方法,使用
20、序列化方式在客户端和服务器端的对象之间传递数据。,40,Java EE核心技术-RMI,RMI和CORBA相比: 两者的关键差别在于语言环境,Java RMI是一个分布式对象计算的纯Java解决方案(如,在Java RMI中,对象的接口用Java定义,而不是用IDL); 其次,CORBA没有定义安全服务,而Java RMI继承了Java的安全性; 再者,CORBA有不同的实现,不同的独立软件开发商的不同实现均有独特性,这使得在不同平台上的匹配比较困难,而且不是所有CORBA产品开发商都支持所有平台,而几乎所有平台都支持Java虚拟机,因此Java RMI具有更高的可移植性。如果客户对象和服务对
21、象都基于Java虚拟机,那么Java RMI是分布对象计算的最好选择。 最后,IIOP已经提供了Java RMI和CORBA的互操作能力,而且两者的发展有互相借鉴的趋势。,41,Java EE核心技术-JSP,JSP技术: JSP是服务器端的脚本语言,是以Java和Servlet为基础开发而成的动态网页生成技术,它的底层实现是Java Servlet。 JSP(Java Server Pages)页面由HTML代码和嵌入其中的Java代码所组成。客户端向服务器发出请求以后,服务器对页面中的Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。,42,Java EE核心技术-JSP
22、,JSP技术: 特点:面向对象,跨平台,和Servlet一样稳定,可以使用Servlet提供的API,克服了Servlet的缺点。 应用:一般和JavaBeans结合使用,从而将界面表现和业务逻辑分离。,43,Java EE核心技术-JSP,JSP与ASP的相似之处:都是运行于服务器端的脚本语言,两者都是动态网页生成技术。 这两项技术都使用HTML来决定网页的版面,都是在HTML 代码中混合某种程序代码,由语言引擎解释执行程序代码。HTML代码主要负责描述信息的显示样式,而程序代码则用来描述处理逻辑。,44,JSP与ASP的不同之处: JSP是由Sun推出的一项技术,是基于JavaServle
23、t以及整个java体系的Web开发技术,利用这一技术可以建立先进、安全和跨平台的动态网站。ASP是MS公司推出的技术,只能在MS的平台上运行,无法实现跨平台,也无安全性保障。 ASP下的编程语言是 VBScript 之类的脚本语言,而JSP 使用的是Java。 ASP 与 JSP 还有一个更为本质的区别:两种语言引擎用完全不同的方式处理页面中嵌入的程序代码。在 ASP 下, VBScript 代码被 ASP 引擎解释执行;在 JSP 下,代码被编译成 Servlet 并由 Java 虚拟机执行,这种编译操作仅在对 JSP 页面的第一次请求时发生。,Java EE核心技术-JSP,45,Java
24、 EE核心技术-Servlet,Java Servlet技术:Servlets(Server Applet):是一些运行于Web服务器端的Java小程序,用来扩展Web服务器的功能。 Servlet是一种扩展Web服务器功能的技术,而且由于它是用Java编写的,所以能够访问整个Java API库,包括用于访问企业数据库的JDBC API。 Servlets用特定的Java解决方案替代了其它的Web服务器方编程模式(如:CGI,ISAPI等),因而继承了Java的所有特性(跨平台、多线程、OO)。 用来编写Servlets的Servlet API对于服务器环境和协议没有任何特殊的要求,所以Ser
25、vlets具有很强的可移植性,也不像利用CGI程序等其它方式那样具有性能局限。 Servlets也同样使用HTTP协议与客户端进行通讯,所以有时也称Sevlets为“HTTP Servlets”。,46,Java EE核心技术-Servlet,Java Servlet和JSP的比较: 相似: 两者都是基于Java的技术,所以都继承了Java的所有特性(跨平台、多线程、OO ),都可以使用Java强大的API。 两者工作方式相似:JSP代码先被JSP容器转换为Servlet代码再编译为类。 两者在J2EE体系结构中的工作层次相同,都负责与客户端的连接。 不同: 编程方式不同。Servlets是一
26、些运行于Web服务器端的Java小程序;而JSP是脚本,编写起来更简单容易。 应用目的不同。Servlet主要用于从客户端接收请求信息,而JSP主要负责将服务器端信息传送到客户端。 使用JSP的真正意义在于:可以将界面设计和业务逻辑设计分离。,47,Java EE核心技术-JavaBean,JavaBean技术: JavaBean是基于Java的组件模型,类似Microsoft的COM组件。 JavaBean通过Java虚拟机(Java Virtual Machine)执行,运行JavaBean最小的需求是JDK1.1或者以上的版本。 在Java平台中,通过JavaBean可以无限扩充Java
27、程序的功能,通过JavaBean的组合可以快速的生成新的应用程序。 对于程序员来说,最好的一点就是JavaBean可以实现代码的重复利用,另外对于程序的易维护性等等也有很重大的意义。 JavaBean传统的应用在于可视化的领域,如AWT下的应用。自从Jsp诞生后,JavaBean更多的应用在了非可视化领域,在服务器端应用方面表现出来了越来越强的生命力。,48,Java EE核心技术-JDBC,JDBC技术:JDBC是一组API,定义了用来访问数据源的标准Java类库,使用这个类库可以以一种标准的方法、方便地访问数据库资源。 JDBC对数据库的访问具有平台无关性。 JDBC API为访问不同的数
28、据库提供了一种统一的途径,象ODBC一样,JDBC对开发者屏蔽了一些细节问题。 JDBC的目标是使应用程序开发人员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。,49,Java EE核心技术-XML,XML技术: XML(Extensible Markup Language)是一种可以用来定义其它标记语言的语言,被用来在不同的商务过程中共享数据。 XML的发展和Java是相互独立的,但是它和Java具有的相同目标即平台独立性。通过将Java和XML的组合,可以得到一个完美的具有平台独立性的解决
29、方案。 J2EE平台全面支持和实施XML,这种强大的组合可使XML具备跨平台的兼容性,甚至用于对XML代码进行语法检查和调试的工具也可与平台无关。,50,Java EE核心技术-JMS,JMS技术:JMS是一种基于 Java的技术,因此是平台无关的。它为消息服务定义了通用 Java 语言接口,支持最常见的消息传递模型(发布/订阅和点到点)。通过对JMS(Java消息服务)API的访问可实现面向消息的通信 。 JMS通常用来实现异构系统之间的松散集成。,51,Java EE核心技术-JMS,*关于消息技术:,消息系统的特点: 消息是异步的。 允许不同的应用程序之间进行通讯。消息应用程序之间是对等
30、的,服务器与客户机之间没有明显的界限。 消息的生产者可以消费消息,消费消息的应用程序也可以生产消息。,52,Java EE核心技术-JMS,*关于消息技术:,消息系统的优势:与平台无关,与在网络上所处的位置无关。是可伸缩、可扩展的。需更大的吞吐量,只需添加硬件即可。可支持数万台客户机,每秒钟可处理事件的数目可达几万。在异构的环境中可以很好地工作。是健壮的,发送接受可以失败,网络也可以失败,这时Messaging System可以继续执行它的职责。,53,Java EE核心技术,J2EE核心技术中最常用的技术:EJB、 CORBA、 RMI、JSP、Java Servlet、JavaBean、JDBC、XML、JMS、开发大型企业级应用:异构、分布、数据交换CORBA、 RMI、XML、JMS、,