在之前的文章中我们曾介绍过Java企业级应用架构设计中的分布式结构,在实际的项目中,开发n级分布式应用是一项复杂且富有挑战性的工作,需要对Java EE架构的原理深入掌握,并将其运用到企业级应用的开发中去。
Java EE架构
将处理过程拆分到不同的级中分别处理,可以使资源得到更好的利用。同时我们还可以将工作分配给适合开发某一级程序的最佳人选。以网页设计师为例,他们就更适合在网页服务器上进行表现层的开发;而另一方面,数据库开发人员则可以把精力集中于存储过程与函数的开发。然而,简单的将各级相互隔离开并不能满足我们的需求。为了最终满足企业的需要,我们必须把这些级整合起来。选择使用最有效的协议对成败至关重要,错误的选择将会导致严重的性能降低。
除了系统整合之外,分布式应用还需要各种各样的服务。它必须能够创建、参与或者管理与不同信息系统之间进行交互时的事务(transaction),这一点对于保证企业数据的并发性绝对必要。因为n级结构是通过互联网进行访问的,因此使用强大的安全服务阻止恶意访问就变得至关重要。
今时今日,如CPU、内存之类的硬件价格已经有了极大地下降,但是局限仍然存在,比如处理器能够支持的内存总容量。因此,我们就有必要优化系统资源的使用。现代分布式应用通常是建立在面向对象技术之上的,因此诸如对象缓存或者缓冲池之类的功能就变得非常方便。这些应用会经常与关系数据库或者其他信息系统——比如面向消息的中间件——进行交互。然而,建立与这些系统之间的连接代价很大,因为它会消耗大量的处理资源从而严重影响系统性能。在这种情况下,“连接池”就变得非常有用,它既可以提高系统性能,又可以优化资源的使用。
典型的分布式应用会通过中间件服务器调用一些系统服务,例如事务、安全以及缓冲池等。想要访问这些服务,就必须使用这些中间件服务器的应用程序接口(API),因此,编写出的应用代码中就必须掺杂进某个特定的API。这种内置服务提供商API的方式浪费了大量的开发时间,并且使得维护变得非常困难,同时也限制了其扩展性。
到了1999年,Sun 微系统公司发布了Java EE 2平台,以解决企业级多级应用开发中的难点问题。这个平台基于Java平台标准版本2(Java Platform, Standard Edition 2),因此它也可以实现“编写一次就可以在任何地方部署运行”。Java EE2一经发布就迅速得到了来自开源社区以及主要商业供应商——如IBM、Oracle、BEA等——的极大支持,而其原因,就在于Java EE2是基于技术规范的,任何人只要遵从技术规范的内容,就可以开发出自己的服务程序。而Java EE规范与平台也从此开始不断发展,如今其平台已经基于Java平台标准版本5(Java Platform, Standard Edition 5),其名称也改为Java平台企业版5(Java Platform, Enterprise Edition 5)。在本文中,我们将集中讨论最新版本,其官方名称为Java EE 5。
Java EE平台通过一个基于“容器”(container)的结构提供必要的系统服务。容器向使用Java编写的面向对象应用程序组件提供运行环境,并提供一系列的底层服务,例如:安全、事务、生命周期管理、对象查找与缓存、持久化以及网络通讯等等。这种方式有利于明确分工,系统程序员只管负责开发底层服务,而应用程序员就可以把更多的精力放在业务及表现逻辑的开发上面。
如图1所示,在服务器端共存在两种容器:
◆Web容器(web container)。Web容器中装载着表现组件,例如Java服务器页面(JSP)以及小服务程序(servlet)等。而这些组件又可以通过远程协议与EJB容器进行交互。
◆EJB容器(EJB container)。EJB容器控制着企业级JavaBean(EJB)组件的运行。
图1. Java EE平台架构(图中文字:Web Browser——网络浏览器;Java Server Pages——Java服务器页面“JSP”;Java Servlets——Java小服务程序“Servlet”;Web Container——Web容器;Application Client Container——应用客户端容器;Application Client——应用客户端;Enterprise JavaBeans——企业级JavaBeans“EJB”;EJB Container——EJB容器;Java EE 5 Application Server——JavaEE5 应用服务器;Java 5 Virtual Machine——Java5虚拟机)