Java EE企业级应用开发技术研究
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 Java EE概述

1.1.1 企业级应用及其特点

1.企业级应用概念

企业级应用是指为商业组织、大中型企业而创建的解决方案及应用程序。这些大中型的企业级应用具有用户数量多、数据量大、事务密集等特点,往往需要满足未来业务需要的变化,易于升级和维护。

一个好的企业级应用体系结构,通常来自优秀的解决方案,同时从应用程序的设计开始就需要考虑其体系结构的合理性、灵活性、健壮性,从而既能满足企业级应用的复杂需求也能为今后系统的调整和升级留有余地。这样可以延长整个应用的生命周期,增强用户在多变的商业社会中的适应性,减少系统维护的开销和难度,从而给用户带来最大的利益。

企业级应用通常具有以下特点。

(1)数据持久化(Persistent Data)。企业级应用需要持久地保存数据,通常需要保存很多年。在这段时间里,使用数据的程序会经常发生改变。有时企业为了处理一个业务,安装了一个全新的应用系统,那么这些数据也必须被移植到新的应用系统上。

(2)数据的并发访问。多用户并发地存取数据是企业级应用的常见情况。对于基于Internet的Web系统来说,使用者数量的递增速率是几何级的。因此确保大量使用者都能从系统中正常地访问数据就是一个非常重要的问题。即使没有那么多用户,也要保证两个人不会在同一时刻对同一个数据进行存取。然而用户数量过多所带来的沉重压力,通过事务管理工具仅仅只能解决一部分。

(3)大量的用户图形界面。为了应付日益庞大的数据量,大量的UI界面被投入使用,所以即使出现成百上千个截然不同的界面也并不奇怪。普通用户与专业用户的习惯差异很大,他们很少有技术层面的专长。为了满足不同的需求,数据的表现形式是千差万别的。

(4)需要和其他企业级应用集成。企业级应用并不是“信息孤岛”,它们经常需要和其他企业级应用集成在一起。这些企业级应用通常是在不同的时期,采用不同的技术创建的,甚至协作的机制也各不相同。企业会尽力将不同的企业级应用通过一个通用的通信技术集成起来,但是即使这样也很难圆满地完成任务,所以企业会同时使用几套不同的集成方案。

(5)数据概念不统一。即使统一了集成的技术,也经常会碰到千差万别的业务处理方式和不统一的数据概念等问题。企业的一个部门可能会认为,顾客是一个与公司拥有正式协议的人;另一个部门可能会认为,那些曾经与公司签订过合同人也是顾客,即使现在已经解除了;还有一个部门可能会认为,产品销售面向的人是顾客,而服务销售面向的人不是。一开始,我们可能会感觉这很简单,很好解决,但是当成百上千条记录在每个领域都有截然不同的意思时,即使公司里有人能够区分不同领域的不同意思,我们也将面临严峻的挑战。结果数据会被经常读取,并按照各种各样的不同的语法或语义格式记录下来。

(6)复杂的业务逻辑。业务逻辑是由企业根据自身需要所制定的业务规则决定的。有时规则会很随意,看似没有任何的逻辑。这是因为企业往往有自己特定的需求,以及特殊的情况。这些层出不穷的特例导致了业务的复杂性、无逻辑性,使得商业软件的开发十分困难。

2.企业级应用的要求

现代企业级应用是以服务器为中心,通过网络把服务器和分散的用户联系在一起的应用。一般来说,现代企业级应用应当具有以下需求。

●并发支持:同时收到大量服务请求,需要进行快速响应。

●事务支持:支持事务完整性,对于多个系统,需要支持分布式事务。

●交互支持:支持系统与系统之间进行交互,人与系统之间进行交互。

●集群支持:提供系统可用性和可伸缩性,便于随业务的需求而扩展。

●安全支持:受保护的资源获得安全保护。

●分布式支持:支持查找和调用分布式服务。

●Web支持:基于Internet或无线网络。

1.1.2 Java EE及其常用技术

Java企业级应用开发涉及的技术结构包括三大部分:一部分是分布式开发;一部分是业务组件开发;一部分是资源整合开发(消息传递和交互)。无论是采用经典的框架还是采用Spring等开源框架,Java企业级应用开发的主要任务都是围绕业务需求展开的。由于Java技术方案在整个互联网领域有着广泛的应用基础,所以Java EE已经成为主流技术。

1.什么是Java EE

Java EE(Java Platform,Enterprise Edition)是Sun公司推出的企业级应用程序版本。该版本以前被称为J2EE,能够帮助我们开发和部署可移植、健壮、可伸缩且安全的服务器端Java应用程序。Java EE是在Java SE的基础上构建的,它提供了Web服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(Service-Oriented Architecture,SOA)和Web 2.0应用程序。

Java EE是早期Java技术体系中的重要一环,主要用于解决Java在企业级应用开发中遇到的性能问题、安全问题及众多资源整合的问题。但是由于Java EE自身所占资源空间过大,后期逐渐被Spring等轻量级框架所取代。目前,Java EE已经交由Eclipse基金会管理,并改名为Jakarta EE了。所以目前所说的Java EE开发通常是指采用Java进行企业级应用开发,而不仅指Java EE技术本身了。

2.Java EE常用技术

狭义的Java EE是Sun公司为企业级应用推出的标准平台,用来开发B/S架构软件,可以说是一个框架,也可以说是一种规范。它由一整套服务(Services)、应用程序接口(APIs)和协议构成,对开发基于Web的多层应用提供了功能支持。广义的Java EE包含各种框架,其中最重要的就是Spring。Spring在诞生之初是为了改进Java EE开发的体验,后来逐渐成为Java Web应用开发的实际标准。我们这里采用广义的Java EE概念,并重点介绍新兴的架构技术。

早期的一些核心技术主要包括以下几种。

●Servlet:Servlet是Java平台上的CGI技术。Servlet在服务器端运行,可以动态地生成Web页面。与传统的CGI和许多其他类似CGI的技术相比,Java Servlet具有更高的效率且更容易使用。对于Servlet,重复的请求不会导致一个程序的多次转载,它是依靠线程的方式来支持并发访问的。

●JSP:JSP(Java Server Page)是一种实现普通静态HTML和动态页面输出混合编码的技术。从这一点来看,JSP类似于Microsoft ASP、PHP等技术。借助了形式上的内容和外观表现的分离,Web页面制作的任务可以比较方便地分配给页面设计人员和程序员,并方便地通过JSP来合成。在运行时,JSP会被先转换成Servlet,并以Servlet的形态编译运行,因此它的效率和功能与Servlet相比没有差别,都具有很高的效率。

●JDBC:JDBC(Java Database Connectivity,数据库访问接口)使数据库开发人员能够用标准Java API编写数据库应用程序。JDBC API主要用来连接数据库和直接调用SQL命令执行各种SQL语句。利用JDBC API可以执行一般的SQL语句、动态SQL语句及带IN和OUT参数的存储过程。Java中的JDBC相当于Microsoft平台中的ODBC(Open Database Connectivity)。

●EJB:EJB(Enterprise JavaBeans)定义了一组可重用的组件,开发人员可以利用这些组件,像搭积木一样建立分布式应用。在装配组件时,这些组件需要被配置到EJB服务器(一般的WebLogic、WebSphere等J2EE应用服务器都是EJB服务器)中。EJB服务器作为容器和低层平台的桥梁管理着EJB容器,并向该容器提供访问系统服务的能力。所有的EJB实例都运行在EJB容器中。EJB容器提供了系统级的服务,可以控制EJB的生命周期。EJB容器帮助开发人员管理了安全、远程连接、生命周期及事务等技术环节,简化了商业逻辑的开发。

●JSF:JSF(Java Server Faces)是 Java Web 应用程序的一个用户界面框架。设计JSF的目的在于,极大地缓解在 Java 应用服务器上运行的应用程序的编写和维护的压力,并将这些应用程序的UI重新呈现给目标客户端。

●JMS:JMS(Java Message Service,Java消息服务)是一组Java应用接口,用于提供创建、发送、接收、读取消息的服务。JMS API定义了一组公共的应用程序接口和相关语法,使得Java应用能够和各种消息中间件进行通信。使用JMS能够最大限度地提升消息应用的可移植性。JMS既支持点对点的消息通信,也支持发布/订阅式的消息通信。

●JNDI:由于Java EE应用程序组件一般分布在不同的机器上,因此需要采用一种机制,以便组件使用者查找和引用组件及资源。在Java EE体系中,使用JNDI(Java Naming and Directory Interface,Java命名和目录接口)定位各种对象,这些对象包括EJB、JDBC数据源及消息连接等。JNDI API为应用程序提供了一个统一的接口来完成标准的目录操作,如通过对象属性来查找和定位该对象。由于JNDI是独立于目录协议的,应用还可以使用JNDI访问各种特定的目录服务,如LDAP、NDS和DNS等。

新兴的架构技术主要包括以下几种。

●Hibernate:Hibernate是一个面向Java环境的ORM(Object Relation Mapping,对象/关系数据库映射)工具。它对JDBC API进行了封装,负责Java对象的持久化,在分层的软件架构中位于持久化层,封装了所有数据访问细节,使业务逻辑层可以专注于实现业务逻辑。

●Hibernate JPA:JPA(Java Persistence API,Java持久化应用程序接口)可以通过标注或XML描述对象和关系数据库之间的映射关系,并将实体对象持久化到数据库中。它是Sun公司提出的一种规范,提供了操作实体对象,执行数据库查询的统一规范。而Hibernate JPA是它的一种实现,应用十分广泛。

●MyBatis:MyBatis是Apache的一个开源项目iBatis。2010年,这个项目由Apache Software Foundation 迁移到了Google Code,并且改名为MyBatis。2013年11月,这个项目又迁移到了GitHub。MyBatis是一个持久层框架,也属于ORM映射,是一个半自动化的,并且支持普通SQL查询、存储过程和高级映射的优秀持久层框架。MyBatis避免了几乎所有的JDBC代码编写、参数的手工设置及结果集的检索。MyBatis使用简单的XML或标注来配置和映射原始信息,将接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的Java对象)映射成数据库中的记录。

●Spring:Spring是一个开源框架,是为了解决企业级应用程序开发的复杂性而创建的。Spring致力于提供一个以统一、高效的方式构造整个应用,并且可以将单层框架以最佳的组合融合在一起的连贯体系。它基于依赖注入和面向方面技术,大大地降低了应用开发的难度与复杂度,很好地解决了模块之间的耦合性,提高了开发的速度,为企业级应用提供了一个轻量级的解决方案。

●Spring MVC:Spring MVC属于Spring框架的后续产品,提供了基于MVC(Model-View-Controller)构建Web应用程序的全功能模块。在使用Spring可插入的MVC架构后,可以在使用Spring进行Web开发时选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts等。

●Spring Boot:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是简化Spring应用的初始搭建及开发过程。该框架使用了特定的方式进行配置,使得开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(Rapid Application Development)成为领导者。

●Spring Cloud:Spring Cloud是一个基于Spring Boot实现的服务治理工具包,在微服务架构中用于管理和协调服务的微服务。Spring Cloud会将一个单体项目拆分为多个微服务,每个微服务都可以进行独立技术选型、独立开发、独立部署、独立运维,并且多个服务可以相互协调、相互配合,最终完成用户的价值。Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、熔断器、数据监控等都可以使用Spring Boot的开发风格实现一键启动和部署。