1.5 Java EE技术架构
作为一个企业应用开发标准,Java EE最终由一系列的企业应用开发技术来实现。Java EE技术框架可以分为四部分:组件技术、服务技术、通信技术和框架技术。整个Java EE技术框架体系如图1-4所示。
1.5.1 组件技术
组件是Java EE应用的基本单元。Java EE 6提供的组件主要包括三类:客户端组件、Web组件和业务组件。
1.客户端组件
用户通过客户端组件与企业应用进行交互。Java EE客户端既可以是一个Web浏览器、一个Applet,也可以是一个应用程序。
(1)Web浏览器。
Web浏览器又称为瘦客户。它通常只进行简单的人机交互,不执行如查询数据库、业务逻辑计算等复杂操作。
(2)Applet。
Applet是一个用Java语言编写的小程序,运行在浏览器上的虚拟机里,通过HTTP等协议和服务器进行通信。
图1-4 Java EE技术体系结构
(3)应用程序客户端。
Java EE应用程序客户端运行在客户机上,它为用户处理任务提供了比标记语言丰富的接口。典型的Java EE应用程序客户端拥有通过Swing或AWT API建立的图形用户界面。应用程序客户端直接访问在服务器EJB容器内的EJB组件。当然,Java EE客户应用程序也可以像Applet客户那样通过HTTP连接与服务器的Servlet通信。与Applet不同的是,应用程序客户端一般需要在客户机进行安装,而Applet是通过Web下载,无需专门安装。
2.Web组件
Web组件对客户提交的Web请求进行动态响应。用户每次在浏览器上单击一个链接或图标,实际上是通过HTTP请求向服务器发出请求。Web容器负责将Web请求传递给Web组件。Web组件对这些请求进行处理后生成动态内容,再通过Web容器返回给客户端。
Java EE Web组件包括Servlet和JSF(JavaServer Faces)组件。
Servlet是Web容器里的程序组件。Servlet实质上是动态处理HTTP请求和生成网页的Java类。JSF组件是一种基于JSF框架的组件,它可以实现像桌面应用一样基于事件驱动Web应用。
注:在Java EE 6之前的规范中,还有一种Web组件,称为JSP,它是Servlet的变形,可视为文本格式的Servlet,它的写法有些像写网页,这就为应用开发者(特别是不熟悉Java语言的)提供了方便,JSP在Web容器内会被自动编译为Servlet,编写JSP比编写Servlet程序更简洁。但JSP在Java EE 6中已经被视为过时的技术。
3.业务组件
业务组件用来实现特定的业务逻辑操作,它们通常不直接与客户交互。业务组件包含EJB组件和Entity组件两大类。
EJB组件用于实现特定的业务逻辑,而不是像Web组件一样对客户端请求生成动态页面。EJB组件能够在容器的支持下完成诸如远程连接、消息驱动、分布式事务处理等复杂的业务逻辑,因此使用EJB组件编写的程序可大大降低开发难度,且具有良好的扩展性。Java EE支持两种类型的EJB组件:Session Bean(会话bean)和Message-Driven Bean(消息驱动bean)。
Entity组件主要用来完成应用数据的持久化操作。
1.5.2 服务技术
Java EE容器为组件提供了各种服务,这些服务是企业应用经常用到但开发人员难以实现的,例如命名服务、数据库连接、上下文和依赖注入、事务、安全和连接框架等。现在这些服务已经由容器实现,因此Java EE组件只要调用这些服务就可以了。
1.命名服务
企业应用中通常包含大量的组件,为了完成功能需求,组件间通常要相互调用。JND(I Java Naming and Directory Interface, Java命名和目录服务接口)简化了企业应用组件之间的查找调用。它提供了应用的命名环境(naming environment)。这就像一个公用电话簿,企业应用组件在命名环境注册登记,并且通过命名环境查找所需要的其他组件。
2.数据库连接服务
数据库访问几乎是任何企业应用都需要实现的。JDBC(Java DataBase Connectivity, Java数据库连接)API使Java EE平台可以和各种关系数据库之间连接起来。JDBC技术提供Java程序和数据库服务器之间的连接服务,同时它能保证数据事务的正常进行。另外,JDBC提供了从Java程序内调用SQL数据检索语言的功能,Java EE 6平台使用JDBC 4.0 API以及JDBC 4.0拓展API,这些API提供了高级的数据连接功能。
3.Java事务服务
JTA(Java Transaction API, Java事务API)允许应用程序执行分布式事务处理——在两个或多个资源节点上访问并且更新数据。JTA用于保证数据读/写时不会出错。当程序进行数据库操作时,要么全部成功完成,要么一点也不改变数据库内容。最怕的是在数据更改过程中程序出错,那样整个系统的业务状态和业务逻辑就会陷入混乱。所以,数据事务有一个“不可分微粒”的概念,是指一次数据事务过程不能间断,JTA保证应用程序的数据读/写进程互不干扰。如果一个数据操作能整个完成,它就会被批准;否则,应用程序服务器就当什么都没做。应用程序开发者无需自己实现这些功能,这样数据操作就被简化了。数据事务技术使用JTA的API,它可以在EJB层或Web层实现。
4.安全服务
JAAS(Java Authentication Authorization Service, Java验证和授权服务)提供了灵活和可伸缩的机制来保证客户端或服务器端的Java程序。Java早期的安全框架强调的是通过验证代码的来源和作者,保护用户避免受到下载下来的代码的攻击。JAAS强调的是通过验证谁在运行代码以及他/她的权限来保护系统免受用户的攻击。它使用户能够将一些标准的安全机制,例如Solaris NIS(网络信息服务)、Windows NT、LDAP(轻量目录存取协议)或Kerberos等通过一种通用的可配置的方式集成到系统中。
5.Java连接框架
JCA(Java Connector Architecture, Java连接框架)是一组用于连接Java EE平台到企业信息系统(EIS)的标准API。企业信息系统是一个广义的概念,它指企业处理和存储信息数据的程序系统,例如企业资源计划(ERP)、大型机数据事务处理以及数据库系统等。由于很多系统已经使用多年,这些现有的信息系统又称为遗产系统(Legacy System),它们不一定是标准的数据库或Java程序,例如非关系数据库等系统。JCA定义了一套扩展性强、安全的数据交互机制,解决了现有企业信息系统与EJB容器和组件的集成。这使Java EE企业应用程序能够和其他类型的系统进行通话。
6.上下文和依赖注入
上下文和依赖注入(Contexts and Dependency Injection, CDI)使得容器以类型安全的低耦合方式为EJB等组件提供一种上下文服务。它将EJB等受控组件的生命周期交由容器来管理,降低了组件之间的耦合度,大大提高了组件的重用性和可移植性。
1.5.3 通信技术
Java EE通信技术提供了客户和服务器之间及在服务器上不同组件之间的通信机制。Java EE平台支持几种典型的通信技术:Internet协议、RMI(Remote Method Invocation,远程方法调用)、消息技术(Messaging)和JavaMail等。
1.Internet协议
Java EE平台能够采用通用的Internet协议实现客户服务器和组件之间的远程网际通信。
TCP/IP(Transport Control Protocol over Internet Protocol,互联协议之上的传输控制协议)是Internet在传输层和Web层的核心通信协议。
HTTP 1.1是在互联网上传送超文本文件的协议。HTTP消息包括从客户端到服务器的请求和从服务器到客户端的响应,HTTP和Web浏览器称为Internet最普及和最常用的功能。大多数Web机器都提供HTTP端口和互联网进行通信,在HTTP之上的SOAP(Simple Object Access Protocol)成为正受到广泛关注的Web服务基础协议。
SSL 3.0(Secure Socket Layer)是Web的安全协议。它在TCP/IP之上对客户和服务器之间的Web通信信息进行加密而不被窃听,它可以和HTTP共同使用(即HTTPS)。服务器可以通过SSL对客户进行验证。
2.RMI
RMI是Java的一组用于开发分布式应用程序的API。RMI使用Java语言接口定义了远程对象(在不同机器操作系统的程序对象),它结合了Java序列化(Java serialization)和Java远程方法协议(Java Remote Method Protocol)。简单地说,这样使原先的程序在同一操作系统的方法调用,变成了不同操作系统之间程序的方法调用。由于Java EE是分布式程序平台,它以RMI机制实现程序组件在不同操作系统之间的通信。比如,一个EJB可以通过RMI调用Web上另一台机器上的EJB远程方法。
3.Java消息技术
JMS(Java Message Service, Java消息服务)API允许Java EE应用程序访问企业消息系统,例如IBM MQ系列产品和JBoss的JBoss MQ。
4.邮件技术
Java邮件(Java Mail)API提供能进行电子邮件通信的一套抽象类和接口。它们支持多种电子邮件格式和传递方式。Java应用可以通过这些类和接口收发电子邮件,也可以对其进行扩充。
1.5.4 框架技术
框架方面的贡献是Java EE 6规范的一项重大进步。在之前的Java EE规范中,主要从微观的角度来规范企业应用的开发,关注的重点是在组件级别上如何处理组件与客户端的交互,及组件与容器之间的交互。但随着Java EE的广泛应用,在Java EE企业应用的构建过程中,一些架构层面上的共性问题,如页面导航、国际化、数据持久化、输入校验等渐渐浮出水面。这些问题是每个企业应用开发人员构建企业应用时几乎必然遇到的,但Java EE规范并没有对此给出标准答案,因此,各种第三方架构如Struts2、Hibernate、Spring、Seam等大行其道。这些众多的框架给开发人员带来很大压力,也给Java EE服务器厂商带来更多的麻烦,限制了他们为Java EE应用提供更高级的支持。因此,在Java EE 6规范中,吸收了目前流行的架构的优点,增加了架构方面的一些标准规范。
1.JSF
JSF(Java Server Faces)是一种用于构建Java EE Web应用表现层的框架标准。它提供了一种以组件为中心的事件驱动的用户界面构建方法,从而大大简化了Java EE Web应用的开发。通过引入了基于组件和事件驱动的开发模式,使开发人员可以使用类似于处理传统界面的方式来开发Web应用程序。JSF还通过将模型-视图-控制器(MVC)设计模式集成到它的体系结构中,提供了行为与表达的清晰分离,确保了应用程序具有更高的可维护性。Java EE 6规范中包含的JSF的版本为2.1。
2.JPA
数据持久化对于大部分企业应用来说都是至关重要的,因为企业应用中的大部分信息都需要持久化存储到关系数据库等永久介质中。尽管有不少选择可以用来构建应用程序的持久化层,但是并没有一个统一的标准可以用在Java EE环境中。作为Java EE 5规范中的一部分,JPA(Java Persistence API)规范了Java平台下的持久化实现,大大提高了应用的可移植性。Java EE 6规范中包含的JPA的版本为2.0。