一、Server方组件结构 EJB是一种Server方的组件结构,它可以非常简单的开发基于Java的企业级的分布式对象应用。使用EJB可以开发出易升级的、可靠的、安全的应用程序,而不用独立开发复杂的分布式对象框架;EJB可以迅速开发服务方应用程序,快速建立基于Java的服务方组件。EJB被设计用来实现企业中间件服务的可移植和可重用性。
如果你对企业计算很陌生,这些概念对你很有用,EJB是个很复杂的主题,应该被充分的解释。在这一章我们讨论有关EJB的主要概念。首先,我们先讨论开发企业级软件是为了干什么?为什么说像EJB的预包装的分布式对象体系可以简化你的生活?在讨论中,你将会对服务端的组件结构有宏观的了解。
服务端组件结构的需要,我们必须首先了解开发者在建立和配置服务端环境下的组件时通常需要什么?同时,我们将解决围绕服务端开发所出现的问题,将看到建立一套像EJB标准体系结构的必要性。
软件组件是一个软件组件是一段代码,它用来实现一系列定义好的接口。组件不是完整的。应用程序,它们不能被独立运行。更贴切的说,它们是看作是许多大型问题分割成的小问题。软件组件的思想非常有用。公司可以买来定义好的可用来解决某一问题的模块,将它和其他组件一起编译用以解决大型问题。
组件结构是为了使组件开发过程更加容易,需要为建立、管理、维持组件建立规范。开发组件的开发工具,是在建立组件时,应该允许开发者集中精力在组件的背后开发核心逻辑,使开发者不需要考虑太多的标准细节问题,从而快速开发应用程序。例如IDE:Symantec的Visual Cafe,IBM的VisualAge for Java,Inprise的Jbuilder 2,这些工具可以帮助你快速的建立和调试组件。
管理配置好的组件容器,组件容器为你的组件运行提供了一个运行时环境。同时也提供了一套供大多数组件使用的通用服务。配置和维持组件工具,从组件提供商购买了组件后,还需要有一套工具来帮助配置和维持这些组件。
Java:完美实现组件结构 对于成功运用在解决商业问题的一个组件,无论是组件开发商还是使用组件的客户都必须遵守调用组件方法的语法和语义。开发商出版有关调用组件的规范,客户代码必须遵守它们。为了防止当开发商提供了一个新版本的组件,或更改了组件规范,客户方就必须重新编写或编译它们的代码,因此面向对象设计提出了一种新的设计方法:通过从组件的实现中分离出接口。
组件接口和组件逻辑,为了使接口/实现分离这种方式变得更有效,开发者必须为组件接口写客户代码(这被称为基于接口的程序设计),通过这种分离,可以改变服务方逻辑而不用更改客户方代码。
Java中的组件结构 现在让我们了解什么是组件结构,看看在Java世界里存在那些组件结构。首先,你应该了解什么是JavaBeans,JavaBeans组件是小的应用程序块,可以使用JavaBean去集合成大型的组件,从而编译完整的应用程序。然而,你不能配置一个JavaBean,因为一个JavaBean不是一个完全的应用程序。JavaBean可以帮助你构建更大的可配置的软件。因为不需要配置,JavaBean不需要运行时环境,也不需要容器来对它进行实例化、破坏、提供其他服务的操作。应用程序本身是由许多JavaBean构成的。
相比较,EJB标准定义了一个组件结构来配置组件,被称为企业级的Beans。企业级的Beans是比较大的、粗糙的被用来配置的应用程序组件。他们能被破坏,也能被用来和其他组件组合成更大的应用程序系统。可配置组件在容器内被配置,容器提供了对组件的运行时服务。例如实例化。
企业级Beans和两种其他的Java组件十分相似:applets和servlets。Applets可以在Web页中配置,浏览器的Appletviewer为其提供了运行时的容器。Servlets可以在Web Server中被配置,Webserver的servlet engine为提供运行时的容器。企业级Beans可以在应用程序服务器中被配置,应用服务器为其提供了运行时的容器。
它们三者之间真正的不同是每个组件类型可以延伸的域大小。 Applets是轻便Java程序,它能够被任意的下载和运行。例如它可以从Web Server中下载到浏览器。 Servlets是可以被用来延伸Web server功能的网络组件。它是面向请求/回答的,从许多客户端获得请求,再给它们发应答。这样使得它被广泛用于执行Web任务。 Applets和servlets适用于客户方操作。而企业级Bean不扩展客户端操作,它是服务端组件,执行服务端操作;例如执行复杂运算、执行大量的商业传输。
服务端所需一个完整的组件结构遵循以下方式:
开发者写可重用组件;
提供商写组件容器:用以给组件提供运行时环境和服务;
提供商提供开发、配置和维持工具;
这些方式保证了可重用性;
多层结构 服务方配置是用来支持用户同时执行并发、安全、可靠、有效的操作的软件。服务方配置一般被分成多层。每层实现不同的功能,每层有一个或多个组件。注意:层是个抽象的概念,在物理上它并不存在。下面有个分层的例子:
代表层:这些容器组件处理用户接口和用户交互。例如,代表层是一个单独的应用程序,可以用VB来写。基于Web配置的代表层可以使用Java servlets,Java server pages或Java applets。
业务逻辑层:是用来解决业务问题的容器组件的集合。这些组件常被用来处理高执行度的工作,它们常用安全性的语言来写,例如:Java、C。
数据层:被业务逻辑层用来保持状态的持久性。数据层的中心是一个或多个数据库。分层的优点是尽量隔离各层。
两层结构,通常,大多数配置是两层结构。将业务逻辑层和另外两层的一个合并:可能和代表层合并。可能和数据层合并。代表层和业务逻辑层合并。如把代表层和业务逻辑层这一层作为客户端,数据层作为服务端,则形成fat客户端,而thin服务端的情况。在两层结构中,客户端应用程序通过数据库桥API与数据层相连。例如:ODBC、JDBC。
这样的两层结构有以下特征:
配置代价非常高。数据库驱动必须在每一个客户层上安装和配置。
数据库驱动交换代价高。转接一个数据库驱动,需要在各个客户端重新安装客户端驱动。
数据库类型转型代价高。
业务逻辑移植代价高。
数据库连接代价高。
网络性能发挥低。
将业务逻辑层部分并入数据层。
形成客户端thin,而服务端fat的情况。
N层结构,其中将代表层、业务逻辑层、数据层各自为一层。
特点:
配置代价低。
数据库交换代价低。
业务逻辑移植代价低。
可以和防火墙结合配置安全部分。
资源可以被重用。
每层都有较大的灵活性。
J2EE技术:
J2EE是中间件服务套件,对于服务端应用的开发者来说,使开发变得更容易。它包含:
EJB:它定义了怎样去写服务方组件、提供了一个在组件和管理它们的应用服务器之间的标准。EJB是J2EE的核心。
RMI和RMI-IIOP:RMI??远程过程调用;RMI-IIOP是RMI的扩展,它可以使用IIOP协议,可以被CORBA整合使用。
JNDI:JNDI用来在网络上区分组件和其他资源的位置。
JDBC:是联系数据库的桥梁。
推出EJB1.0后的几个月,第一个基于EJB的应用服务BEA’s WebLogic就诞生了。
二、EJB总揽 EJB采用divide-and-conquer的方式来实现服务方的计算。事实上,EJB标准定义了6个不同的部分协同工作。每个部分都被作为EJB配置成功的关键。在这儿,我们分别讨论它们的作用。
在EJB的世界里,业务解决方案被分为四个阶段发展:
1、业务逻辑模块化。ERP、金融、电子商务提供商将产品模块化,集成在可重用EJB组件中,这样就意味着任何有EJB和J2EE知识的人都可以使用这些组件。
2、业务组件需要运行在分布式的、企业级配置的多层环境中。这样就需要不同的中间件,推动了中间件的发展。
3、应用服务器和可重用组件捆绑。
4、完整的系统配置。
EJB有好的可移植性,它被分为完全不同的6个部分,6个部分之间的关系:
EJB规范定义了完成一个基于EJB组件的分布式应用所需要的六个角色,这六个角色可以由不同的厂商来担当,也可以某个厂商担当多个角色。这六个角色是:
Enterprise Bean Provider: EJB组件开发者,负责编写EJB组件,EJB组件开发者是应用领域的专家。
Application Assembler: 应用组合者,负责将各种EJB组合成一个完整的应用系统。
Deployer 部署者:负责将包含EJB组件的eJb-Jar文件部署到应用服务器中。
EJB Server Provider: EJB服务器提供者,负责实现一些底层的系统服务,如交易管理等。EJB服务器提供者是系统领域的专家。
EJB Container Provider: EJB容器提供者,负责提供EJB组件的运行环境,EJB容器提供者和EJB服务器提供者一般是由相同的厂商担当,提供的产品叫应用服务器。
System Administrator: 系统管理员负责为EJB服务器和容器提供一个企业级的计算和网络环境。
EJB配置的物理部分分为以下几部分:
EJB Container:是装载Enterprise Beans及Enterprise Beans生存的空间,是Beans在运行时相互联接的接口,Container必须实现与Beans之间的约定,Continer提供者也应该提供配置工具以便能方便地配置Beans,使其适合各种运行环境。
EJB Server: 主要处理复杂的底层任务,如分布式对象、分布式事务处理的管理、系统OS级的访问、网络、数据库访问等。EJB Server与EJB Container之间的合约在EJB 1.0 规范中