EJB对于在产品环境中开发、配置、管理可靠的企业应用来说是一种最新颖的结构。本文将阐明在企业开发应用中使用EJB结构所能带来的好处。 本文讨论企业应用程序的结构的演变。它必须进行演变,这是不可避免的,因为根本的计算机支持和传送系统已经发生了巨大的变化,而且在以后这种改变还将继续。随着网络和因特网的发展,现在越来越多的企业应用程序是基于网络的,包括企业内部互联网络和企业外部互联网络应用程序。Java 2 平台,企业版(J2EE)和EJB结构一起为基于网络的企业应用程序的开发提供了上好的支持。 使用EJB开发结构具有许多好处。本文描绘了EJB结构的优点,以及它为应用程序开发者和使用者所带来的益处。 1•1从两层到J2EE结构 企业应用程序的结构已经进行了广泛的演变。第一代企业应用程序是集中式主机应用程序的开发。在20世纪80年代后期合90年代早期,大多数新开发的企业应用程序遵循一种两层结构的处理方法(也即是众所周知的客户端/服务器结构)。后来,这种企业结构演变到了三层结构,然后演变成了基于网络开发的结构。当前的演变状态是以J2EE应用程序结构为代表。 这一部分将由两层结构入手,讨论企业应用程序结构的演变历程。我们已经选择不去描述集中式主机结构是如何演变到两层结构的,部分是因为这对于本书中实质性的东西没有什么中肯的帮助。 1•1•1 两层应用程序结构 藉由两层应用程序,一个商务系统被构造成为一个收集在客户机上执行的操作系统层次应用程序运行的系统。典型的,这会是公司的一部个人计算机。每一个这样的应用程序实现一个或几个商务程序,而且包括在商务程序与用户之间的具有图形用户界面的逻辑表达。(一个商务程序就是一个用户与一些企业信息的封装。)运行于客户机上的应用程序,通过网络与存储公司数据信息的数据库服务器进行通信。数据库服务器存储着公司的数据,客户端的应用程序一般通过结构查询语言(SQL)声明访问数据库。见图1•1
两层结构在Web网出现之前对大部分应用程序都是适用的。它的主要的优点在于,开发两层应用程序很容易,况且,表达逻辑与商业逻辑共存于同一个处理过程,开发者不需要处理复杂的分布式应用程序。 然而,它确是弊大于利。两层结构的主要弊端是它没有将事物逻辑与表达逻辑分开。在两层结构的应用程序中,程序员不能清楚地将商业逻辑与表达逻辑分开。这就导致了一些问题的出现:易破坏数据库的完整性,难于管理,难于维护,安全没保障,不易测量,有限的客户请求,只能局限于一种表达方式。 •容易危及数据库的完整性。因为每一个客户端程序均嵌入了商业逻辑,客户端程序中的一个错误或缺陷可以容易的危机到企业数据库的完整性。 •在大的企业中难于管理。 在这种结构中,应用程序是在客户机上配置的,公司的IT部必须维护应用程序。如果一个事务处理改变了,IT部门必须用新版本的应用程序替换旧版本。对于一个具有数万台PC机的公司来说,这是一项非常困难的任务,尤其是当这些PC机中的许多可能是“Unmanaged”膝上机的时候。 •代码难于维护。两层结构不支持组件编程,这就使维护应用程序代码变得非常困难。对于较大的组织,维护的困难指数倍的增加了,这是由于它们一般使用较多的程序员去编写和维护应用程序。 •应用程序被暴于安全隐患中。一个有经验的程序员也许能够“黑掉”安装在PC机上的应用程序,从而达到改变应用程序所要实现的事务处理。 •访问比例有限;对于高数目的用户难于依比例确定。 每一个运行的应用程序一般需要一个到公司数据库的连接。因为开放的连接数目由数据库产品本身的特性所限制,所以,所有用户同时运行应用程序访问数据库是不可能的。 •需要统一的客户端结构。在Java语言出现前,两层结构需要客户机必须是同一的?例如,它需要所有的客户机都运行相同的操作系统。 •应用程序固定到一种特定的表达形式。因为同一个应用程序不但实现事务处理,还实现了表达处理,对于不同的表达方式,再利用同一事务处理的实现方法是不可能的,例如一个浏览器或是智能移动电话。 尽管在全球网出现之前,企业可以存活于两层结构的限制中,全球网的疯狂的势头和良好的增长改变了原有的规则。上述的两层结构的不足使它从根本上完全不适应全球网的发展。这主要因为全球网的客户端与生俱来的缺乏智能化,而且这样的客户端大量的存在。因此,应用程序的开发者及它们的用户已经在开始寻找现在应用程序结构的替代者。 1•1•2传统的三层应用程序结构 传统的三层结构克服了一些两层结构的弊端。三层结构将表达逻辑重商业逻辑中分离开。它将商业逻辑放于服务器上,只有表达逻辑是在客户个人计算机上进行配置。见图1•2:
三层结构带来了一定数量的改进。中层的服务器通过再利用昂贵的资源而提高了访问比例,诸如数据库的连接,多用户交叉访问。改进的访问比例导致了好的执行性能。它同时也改进了数据库的安全性和管理。三层结构已经被用于大部分的企业资源 计划(ERP)系统中,在这些系统中主要用于大量事务处理(客户信息控制系统CICS, Tuxedo,及其它)。 尽管三层结构消除了两层结构的一些缺陷,然而,它自身也有一定的不足之处?复杂,应用程序缺乏可移植性,厂商不兼容,有限的应用,以及与全球网不兼容?这些将在下面进行详细描述。 •复杂性?开发一个三层应用程序比开发一个两层应用程序更复杂。例如,程序员必须处理分布,多线程,安全性,等等。分布式应用程序引入了开发者必须处理的具有实质性的系统层次的编程复杂性。而且,分布式应用程序需要客户的IT部门对它所缺乏的对应用程序设置和管理的支持作出补充。在试图减少分布式应用程序的复杂性时,厂商诉诸于利用应用程序的结构,例如事务处理(TP)监视器,企业资源计划厂商利用了应用程序服务器的概念。应用程序结构的目的是将程序员从必须处理的这些复杂问题中解放出来。现在,对于分布式应用程序结构来说,“应用程序服务器”是最常用的术语。 •缺少应用程序的可移植性?因为每一个生产三层结构平台的厂商在他的结构中使用不同的应用程序接口,对于各自独立的厂商来说,生产的应用程序能够适用于其他厂商的营程序服务器上 ,这是不可能的。 •厂商不兼容?将不同厂商的应用程序整合是非常困难的,因为每一个厂商往往使用的协议也不同,并且,在这些协中不存在任何协同工作的标准。 •有限的应用?独立软件开发商们没有激情开发具有多重竞争结构但却没有广泛的应用前景的应用程序。虽然存在许多支持分布式应用程序的软件,但是这些应用程序只工作于那些它们为之专门开发的体系。许多的程序不能适用于大部分的体系。因此,对于一套相容的工具软件只有有限的支持。同时,程序员的应用程序和体系知识也是有限的。 •与网络的不兼容?传统的三层结构并不直接的工作与网络。三层结构使用一种独占的协议在客户端与运行于服务器上的应用程序之间进行通信,这种独占的协议于网络不兼容。虽然许多应用程序结构厂商已经将对网络客户端的支持作为一种前端加入到他们的产品中,这种合成的结构仍然受在此列出的其他缺点影响。 1•1•3早期基于网络的应用程序的结构 网络的引入和增长改变了一切。因为不管是两层结构还是传统的三层结构都不支持Web应用程序的开发,早期的Web应用程序开发者不得不寻找其他的方法。他们利用各种各样的插件对Web服务器进行扩充。这些扩充调用服务器上的程序,由存储在公司数据库中的信息动态的生成HTML文档。同样,Web服务器短的扩充也将由HTML表单提交的信息存入公司的数据库。 像这样的扩充的一个例子就是Cgi-bin(公用网关接口程序索引簿)脚本语言(CGI是通用网关接口的缩写,是开发HTML页面和Web应用程序的接口。CGI应用程序通常指的是cgi-bin脚本语言。)尽管cgi-bin脚本语言及其它相似的机制允许开发者编写简单的Web应用程序,cgi-bin这种方法由于以下的原因并不适用于比较复杂的企业应用程序的开发。 •cgi-bin脚本语言不提供结构较好的优秀的商务处理或商务实体的封装。 •cgi-bin脚本语言难于开发,维护和管理。高层次的应用程序开发工具对于cgi-bin脚本语言的开发没有提供好的支持。 •cgi-bin脚本语言将商务程序的实现与表达逻辑缠绕在一起。当需要对实现的一部分进行改动时(例如一个事务处理),就会有不注意的变更其它部分的危险。 •cgi-bin脚本语言的实现并没有将商务规则的完整性考虑在内。企业的商业规则的实现被分散于设置在企业中的众多的Web服务器上的cgi-bin脚本语言中。因为这样,所以对于企业来说维护商业规则的完整性是困难的。 1•1•4 J2EE应用程序结构 J2EE是一个标准结构,是一个使用Java编程语言,面向于开发和配置企业面向Web应用程序的结构。软件开发商们和企业在开发和配置企业内部网应用程序时能够利用J2EE结构,从而有效的替换两层和三层模型,在开发因特网应用程序时,利用该结构有效的替换基于cgi-bin的方法。
Java 2 平台,企业版也提供对两层和三层应用程序的支持。(注意:应用程序-客户端容器指的是Java 2 标准版程序开发环境。)图1•4表明了对两层应用程序的支持。
J2EE平台同时也支持Java applets,这是一种由Web容器载入到显示器的小程序。见图1•6。
图1•6 J2EE基于Web的applet应用程序编程模型 J2EE平台由四部分编程环境构成,一般被称为容器。 •EJB容器?为EJB提供开发、配置和运行管理的环境。EJB是实现事务处理和实体的组件。 •Web容器?为servlets和JSP提供开发、配置和运行管理的环境。servlets和JSP是集成的被称为Web应用程序的开发单元。一个Web应用程序实现一个企业应用程序的表达逻辑。 •应用程序-客户端容器?提供运行J2EE客户端应用程序的环境。这个运行环境本质上就是Java 2 平台标准版。 •Applet容器?提供运行Java applets的环境。这个运行环境一般被嵌入到Web浏览器中。 在本书中,我们主要集中于EJB的开发和配置,而不是其他应用程序部分的开发。我们只在必要时,为了说明EJB和其他的客户端程序的相互作用而部分的示例说明其他的部分(Web应用程序)。为了更完全的了解如何开发其他部分的J2EE应用程序,可以参考《Java 2 平台企业版,企业应用程序开发》这本书。(参阅该书的完全参考,第xv页的“其它资源信息”。) 注意J2EE平台也包括了通用对象中间请求结构(CORBA)。所有的J2EE容器均包括一个CORBA-解释中间请求对象(ORB)。来自多厂商的在EJB容器之间的协作协议是 建立在CORBA标准之上的,例如通过因特网的远程方法启用协议(RMI-IIOP)和对象事务处理服务(OTS)。 1•2 EJB结构的优点 EJBs组件结构是J2EE平台的中枢。J2EE应用程序的核心由一个或几个EJB组成,它们负责执行应用程序的事务操作和封装应用程序的商业逻辑。J2EE平台的其它部分,诸如JavaServer Pages,是对EJBs结构所能提供的功能的补充,象是表达逻辑和客户端的相互控制逻辑这样的功能。 独立软件开发商,合成商和用户能够开发定制EJB应用程序。我们将在下面详尽的阐述EJB应用程序是如何克服两层,三层及早期的Web应用程序结构的局限性,并使您感受在这些结构中没有发现的额外的优点。 正如您在这部分所读到的,记住EJB结构定义成主要的六部分功能,第三章,EJBs的功能,将会详细的讨论这些功能。从总体上讲,这些功能如下: •Bean开发者?开发企业bean组件 •应用程序组合器?将企业bean组件扩充到较大的,可配置的单元 •配置者?在一个特殊的操作环境中配置应用程序 •系统主管?设定和管理企业计算和网络的基础结构 •EJB容器提供者和EJb服务器提供者?专门对事务和应用程序进行管理和其他低层服务的一个开发商(或开发商们)。 EJB结构为上述所有功能提供了有效的帮助。我们在此只专注于它为应用程序开发者和用户所带来的好处。 1•2•1为应用程序开发者带来的好处 EJB结构为应用程序开发者提供如下的好处:简洁化,应用程序可移植性,组件的重复利用,开发复杂应用程序的能力,事物逻辑与表达逻辑的分离,多操作环境的开发,分布式配置,应用程序的协作,与非Java系统的集成,以及指导性资源和开发工具。 •简洁化?利用EJB结构可以比没有该结构时更容易的开发企业应用程序。因为EJB结构帮助应用程序开发者以最小的努力和时间接入和利用企业服务,写一个企业bean几乎与写一个Java类一样简单。应用程序开发者不必关心系统级别的问题,象是安全性,事务处理,多线程,安全协议,分布式编程,连接资源池,等等。因此,应用程序开发人员能工集中精力处理特殊域名的应用程序的商业逻辑。 •应用程序可移植性?一个EJB应用程序可以在任何J2EE编译服务器上开发。这就意味着应用程序开发者可以将程序售给使用任何J2EE服务器的用户。 •组件重复利用?一个EJB应用程序由企业bean组件构成。每一个企业bean是一个可重复使用的模块。有两种比较实用的方法可以对企业bean进行重复使用: •一个企业bean并不是在开发阶段使之被包含于几个不同的应用程序中而达到可以重复使用的。Bean可以在不需改动,甚至是不需接触其源代码的情况下,为每一个应用程序所定制。 •其它应用程序可以通过调用其客户-视图接口,从而再利用一个已经在用户操作环境中开发的企业bean。而且,企业bean的商业逻辑可以通过企业bean类中的Java子类进行再利用。 •开发复杂应用程序的能力?EJB结构将开发复杂企业应用程序简化了。这些EJB应用程序由一个开发小组编写并且不断更新。基于组件的EJB结构非常适合复杂企业应用程序的开发和维护。藉由它的清晰的功能定义和定义明确的接口,EJB结构促进和支持组队开发,减少了对个人开发的要求。 •商业逻辑与表达逻辑的分离?一个企业bean一般封装一个事务处理过程或是一个事务实体(一个表示企业事务数据的对象),使它独立于表达逻辑。程序远不需要担心输出的格式;开发Web页的程序员只需要关心那些将要传递到Web页的输出数据。另外,这种分离使开发对于同一个事务处理过程具有多表达逻辑,或是在不需要变更实现事务处理的程序的源代码的情况下,改变事务处理过程的表达逻辑成为可能。 •多操作环境的开发?一个独立软件开发上的目的是将程序卖给尽可能多的用户。既然每一个用户均有独立的操作环境,应用程序需要在开发阶段为每一个操作环境进行定制,包括不同的数据库模式。 •EJB结构允许Bean开发者将通用应用程序的商业逻辑与在开发阶段的用户逻辑分离开。 •EJB结构允许一个实体Bean绑定到不同的数据库模式。这种永久的绑定在开发阶段实现。应用程序开发者可以在不受单一类型数据库管理系统或是数据库模式限制的情况下编写代码。 •EJB结构同时也通过建立开发标准促进应用程序的开发,例如数据资源查找,其他的应用程序的支持,安全配置,等等。这种标准使利用开发工具软件成为可能。标准和工具软件使开发者和配置者之间的错误通信的可能大大降低了。 •分布式开发?EJB结构使得应用程序通过网络以分布式方式在多个服务器上进行开发成为可能。Bean开发者在开发EJB时不必知道开发拓扑学?不论这个客户端的企业bean在同一台机器上还是在不同的机器上,他写的代码都是一样的。 •应用程序的协作?EJB结构使得整合不同开发商开发的应用程序更加容易。企业bean的客户-视图接口作为应用程序间明确定义的整合点。 •与非Java系统的集成?相关的J2EE应用程序接口,例如连接器规范和Java信息服务规范,使得将企业bean应用程序以标准的方法与各种非Java应用程序的集成成为可能,例如ERP系统或者主机应用程序。 •指导性资源和开发工具?既然EJB结构是一个广泛使用的工业标准,EJB应用程序开发者受益于不断增长的指导如何建立EJB应用程序的指导性资源。更重要的是,由占主导地位的开发商所提供的强有力的开发工具简化了EJB应用程序的开发和维护。 1•2•2用户所获得的益处 用户与应用程序开发者之间对于EJB结构有着不同的观点。EJB结构为用户提供了如下的益处:应用程序服务器的选择,对应用程序管理的促进,与用户现有应用程序和数据的集成,以及应用程序的安全性。 •服务器的选择?既然EJB结构是一个广泛的工业标准,并且是J2EE平台的一部分,用户组织对于运行J2EE的服务器有广泛的选择。用户可以选择在比例观点,与其它系统集成的能力,安全协议,价格等等各方面适合用户需要的产品。用户不必被限制使用一个开发商的产品。用户的需求改变时,它可以很容易的在服务器上重新配置其他开发商的EJB应用程序。 •促进应用程序的管理?由于EJB结构提供了一个标准的环境,服务器厂商就可以有开发用以增强他们产品性能的应用程序管理工具的动机。因此,随着EJB容器的出现产生了一些比较尖端的应用程序管理工具,这就允许用户的IT部门可以执行诸如启动和停止应用程序,将系统资源分派给应用程序,和监测安全隐患以及其他的一些功能。 •与用户现存应用程序和数据的集成?EJB结构及其它与J2EE相关的应用程序接口简化和标准化了在用户操作环境下EJB应用程序与一些非Java应用程序和系统的集成。例如,拥护不需改变任何现有的数据库模式以适应某个应用程序。相反的,EJB应用程序可以在它被开发时被设定成适合现有数据库模式。 •应用程序的安全性?EJB结构使得应用程序安全性的责任由程序开发者移交给了服务器开发商,系统主管和配置者。对于确保应用程序的安全性来说,身处这些位置的人们比程序开发者更为重要。这就使得操作应用程序更为安全。 1•3结论 本文对于不同的企业应用程序的结构进行了深入的讨论,阐述了它们的优点与不足。表明了这些结构是如何演变到EJB结构的,着重从开发者和用户或是客户的观点分析了他们各自由这种结构所获得的益处。
|