CN100412793C - 一种J2EE应用服务器中Web容器的集成系统 - Google Patents
一种J2EE应用服务器中Web容器的集成系统 Download PDFInfo
- Publication number
- CN100412793C CN100412793C CNB2005101306617A CN200510130661A CN100412793C CN 100412793 C CN100412793 C CN 100412793C CN B2005101306617 A CNB2005101306617 A CN B2005101306617A CN 200510130661 A CN200510130661 A CN 200510130661A CN 100412793 C CN100412793 C CN 100412793C
- Authority
- CN
- China
- Prior art keywords
- interface
- web container
- web
- application server
- container
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
一种Web容器集成框架,使用一个两层结构的Web容器集成框架集成各种特定的Web容器实现,所述的框架包括:1)外层接口,独立于Web容器实现,用于实现应用服务器中其他模块与Web容器交互的接口,包括:WebController接口、VirtualHost接口和VirtualApp接口;2)内层接口,对特定Web容器进行包装、扩展或改良,用于匹配外层接口,包括接入应用服务器管理框架所需的接口和实现框架外层中定义的接口。该框架使Web容器的内部实现细节被完全隐藏起来,仅暴露出用户真正关心的通用的配置接口,因此给予用户选择不同Web容器的自由,并且其替换和升级非常容易;而且Web容器的配置方式被重新设计,很好地整合到了应用服务器中,实现了应用服务器配置和管理机制的统一。
Description
技术领域
本发明涉及一种针对J2EE应用服务器中Web容器的集成系统,属于软件技术领域。
背景技术
J2EE(Java 2 Platform Enterprise Edition)是Sun公司于1999年推出的Java企业计算平台规范与技术,为基于Java语言开发面向企业的分布应用提供了基于构件的解决方案,是目前应用最为广泛的面向Web的应用系统结构规范。图1描述了J2EE应用的三层体系结构:
●表示层:一般位于客户端的浏览器或基于Java的程序;
●业务层:位于服务器端,包括Web容器、EJB容器和各类J2EE服务等。一般而言,Web构件可进行简单的业务处理,而EJB构件负责复杂的业务处理;
●数据层:也称后端层,是遗产应用和数据库的组合,如企业资源规划系统、大型主机事务处理、数据库系统等。
J2EE平台主要包括四种容器(Applet容器、Application Client容器、EJB容器以及Web容器)和各类J2EE服务(事务服务,安全服务,资源管理服务等),为组成分布式应用的三大部分提供运行支撑环境,如图1所示,这三个部分是:表示逻辑,包括Applet构件和应用客户端构件;业务逻辑,包括Web构件和EJB构件;数据逻辑。其中业务层的Web容器、EJB容器和J2EE服务构成了J2EE应用服务器。
J2EE应用服务器中的容器为部署在其上的J2EE应用构件提供运行支持。通过容器提供的协议和方法,应用构件可以进行交互或访问J2EE服务。图1中的箭头线表示了容器之间以及容器与数据层的交互关系。一般地,Web容器在接收到客户的Web请求时,会由相应的Web构件进行简单的业务处理,之后再将请求转发给EJB容器、由相应的EJB构件处理复杂业务逻辑并跟数据层进行交互。
Web容器负责管理两类构件——Servlet构件和JSP构件,它们分别对应Servlet和JSP两个规范。由于JSP规范实际上是对Servlet规范的扩展与延伸,所以通常这两类构件由同一个容器(即Web容器)管理。Web容器负责提供支撑部署在Web容器中的Servlet/JSP构件运行所需的机制;当作为应用服务器中的一个模块时,Web容器需要提供被应用服务器其他模块访问的接口,例如为管理工具提供启动、停止和配置(包括虚拟主机配置)等一系列管理操作的管理接口,为部署工具提供部署Web构件的部署接口等。
因为Web容器已经有相当成熟的实现技术,例如业界有Apache Tomcat,Jetty等开源软件,所以对于应用服务器开发者来说,一般采用紧耦合的方式集成Web容器。这种方法简单直接,在应用服务器发展的早期很好的满足了各方面需求。然而在应用服务器标准升级频繁、复杂度大幅度提高的今天,其各种弊病已日益凸显,主要的问题可以概括为以下几点:
●应用服务器对集成的Web容器有过强的依赖性。应用服务器中需要使用Web容器的各个模块都需要直接调用Web容器的相应方法。这种依赖性一方面限制了用户根据需要选择合适的Web容器的自由,另一方面也给升级或者更换Web容器造成了很大的困难。
●应用服务器对集成的Servlet容器只能在高层进行操作,而对其内部模块的可控制性较差。在这种方案下,应用服务器只负责设定相关的参数和环境变量,而后调用Web容器自身的启动代码进行启动。对于Web容器的内部模块应用服务器很难进行控制。
●Web容器提供的配置文件、管理方式与应用服务器本身的机制不统一。由于集成没有深入到Web容器的内部模块,从而导致了对Web容器的配置以及管理都需通过Web容器提供的机制。也就是说,用户无法通过应用服务器的配置文件和管理工具对整个应用服务器进行统一的配置或管理。
发明内容
针对上述问题,本发明的目的是提供一种J2EE应用服务器中Web容器的集成系统,该系统把各种不同Web容器实现的配置抽象并规范化成同一种表示和配置方式,由系统来做适配,实现Web容器的无缝集成,从而实现应用服务器配置和管理机制的统一;同时给予用户选择具体Web容器的自由。该方法的核心思想是通过一个两层系统将Web容器的具体实现细节对应用服务器的其他模块完全屏蔽。
本发明的系统包括两个层面,面向应用服务器其他模块(包括部署工具模块,管理工具模块等)的外层,以及面向Web容器实现的内层。我们将这个系统称为“Web容器集成系统”。如图2所示,系统的外层由一组接口构成,它定义了应用服务器其他模块(包括管理工具、部署工具和其他模块等)与Web容器进行交互的接口。应用服务器中的其他模块与Web容器的交互全部通过这组接口进行,而不对Web容器的具体实现有任何依赖。系统的内层主要是对特定Web容器的包装以及对外层接口的实现,负责将外层接口定义的操作映射到特定Web容器提供的方法,或者用Web容器提供的方法对外层接口方法进行模拟。在这样一个系统下,实现者可以同时集成多种Web容器而无需对应用服务器的其他模块做任何修改。
根据本发明的目的,所述的Web容器集成系统包括外层接口和内层接口:
1、系统外层(外层接口):
Web容器管理系统的外层接口定义了Web容器对外提供的所有方法;其独立于Web容器实现,是用于实现应用服务器中其他模块与Web容器交互的接口;应用服务器的其他模块通过这组方法访问Web容器提供的服务或对Web容器进行管理。
通常,一个完整的Web服务器包含一个或多个的“虚拟主机”(所谓虚拟主机,就是在一个物理的服务器上配置多个域名,每个域名对应相同或不同的应用。这样,客户端看起来好像是有多个主机;Web容器在收到请求时,根据客户端给出的域名确定处理该请求的虚拟主机),在每个虚拟主机中又可以部署一个或多个Web应用。
根据这样一种层次结构,我们抽象出如下三个接口作为Web容器集成系统的外层接口:
(1)WebController
该接口代表了整个Web容器,任何需要使用或操作Web容器的模块都需要通过该接口进行。该接口提供的方法包括启动与停止Web容器,或者添加删除虚拟主机以及获取已定义的虚拟主机实例等。
(2)VirtualHost
该接口代表一个虚拟主机。虚拟主机同时是部署Web应用的容器,一个应用在同一时间只能被部署在一个虚拟主机上。该接口提供的方法包括启动与停止该虚拟主机和部署与卸载Web应用等。
(3)VirtualApp
该接口代表了一个部署在服务器上的Web应用。通过该接口可以得到具体应用的信息,包括应用根目录的本地路径和映射的上下文路径等。另外该接口还提供部署、启动、停止和卸载应用的方法。
这三个接口反映了Web容器的逻辑层次结构,能够满足应用服务器其他模块对Web容器的访问,并且完全独立于所集成的Web容器,很好地将Web容器的内部实现细节隐藏了起来。
2、系统内层(内层接口):
Web容器系统内层的主要功能是为外层接口到特定Web容器提供的方法进行适配,即,对特定Web容器进行包装、扩展或改良,用于匹配外层接口。为了完成该功能,内层需要实现的内容包括:
(1)接入应用服务器管理系统所需的接口。Web容器集成到应用服务器中,需要遵从一定的管理规则,即实现接入应用服务器内核的管理接口。例如一般应用服务器都会采用Java Management Beans接口(Java Management Extensions规范的组成部分)来实施统一管理,因此Web容器为纳入应用服务器整体管理系统也必须实现MBeans接口。
(2)实现系统外层中定义的接口,将系统外层所定义的功能映射到Web容器所提供的功能。若集成的Web没有相应的功能,则通过类似功能进行模拟或者直接实现该功能。一般来说特定的Web容器实现都会有相关模块进行匹配。例如流行的Web容器实现ApacheTomcat的结构就和外层接口有比较好的对应关系:WebController的功能映射到TomcatEngine模块;VirtualHost的功能映射到Tomcat Host模块;VirtualApp功能映射到TomcatContext模块。
内层接口最终的类图如图3所示,从中可以看到内层对外层接口的实现和对管理接口的实现。其中,Server和WebControllerBase类是对WebController接口的实现,HostWrapper和VirtualHostBase类是对VirtualHost接口的实现,AppWrapper和VirtualAppBase是对VirtualApp接口的实现等。
本发明的技术效果在于:
1、Web容器的内部实现细节被完全隐藏起来,仅暴露出用户真正关心的通用的配置接口。因此给予用户选择不同Web容器的自由,并且其替换和升级非常容易。
2、Web容器的配置方式被重新设计,很好地整合到了应用服务器中,实现了应用服务器配置和管理机制的统一。因此用户可以通过应用服务器的配置文件和管理工具对包括Web容器在内的整个应用服务器进行统一的配置和管理。
附图说明
图1是J2EE体系结构示意图;
图2是Web容器的两层集成系统示意图;
图3是Web容器集成系统的内层类图;
图4是实施例中PKUAS体系结构示意图;
图5是Web容器集成系统应用于PKUAS的实施范例图。
具体实施方式
以下结合附图,描述Web容器集成系统的具体实施例,但不构成对本发明的限制。
本节给出一个基于北京大学信息科学技术学院软件研究所开发的J2EE应用服务器PKUAS的Web容器集成系统的实现,采用的Web容器为Apache Tomcat。对应用服务器PKUAS和Web容器Tomcat的分析如下:
PKUAS(Peking University Application Server)是北京大学信息科学技术学院软件研究所自主开发的应用服务器,兼容J2EE1.3与EJB2.0规范。PKUAS借鉴源自操作系统的微内核思想,设计了基于微内核、高度构件化的平台体系结构。如图4所示,PKUAS构建在Java虚拟机之上,抽取构件运行平台的基本功能形成一个微内核,将平台的其他功能(容器,服务和工具等)封装在各个相对独立的模块内(称为系统构件),允许用户定制与扩展这些系统构件,在系统启动阶段由内核装配成应用服务器。
Apache Tomcat是Servlet规范的参考实现,其内部结构如图5所示。这是一个较为典型和完整的Web容器结构,其他实现或多或少地具有类似的结构。Tomcat有着整齐清晰的内部结构,各个逻辑模块间有着明确的分工,每个模块的责任通过一系列的接口进行定义。这组接口实际上构成了一个开放系统,描绘了各个内部模块间的职责及其交互关系。参见图5,Tomcat的关键功能模块有:
●Connector
Connector模块负责接收来自客户端的请求,并将请求的处理结果反馈给客户端。每个Connector实例实际上实现的是一种网络传输协议,它将通过这种协议传入的客户端请求进行分析,构造相应的Request和Response实例,找出适合相应该请求的Container实例,调用该Container的invoke方法并将Request和Response实例作为参数传入,最终将处理结果或者错误信息反馈给客户端。
●Engine
Engine是Container的子接口,它代表了整个Servlet引擎。在运行中,Engine永远是Container层次结构的最高级,所以其setParent()方法如被调用将总是抛出IllegalArgumentException异常。一个Engine的子Container通常是一个或多个的Host实例。
●Host
Host代表的实际上就是常说的“虚拟主机”的概念。在一个Tomcat Web服务器中可以同时运行多个Host,每个Host都与一个特定的主机名以及任意个“别名”相绑定。每个客户端的请求都会根据主机名映射到相应的Host进行处理。Host的下级Container通常是一些Context实例。
●Context
一个Context就是一个独立的Web应用。它包括了Web应用的所有Servlet类、JSP文件、静态页面和图片、Jar包、环境变量、各种配置参数以及其他各种资源。Context的下级Container通常是Wrapper的实例。
根据以上对对应用服务器PKUAS和Web容器Tomca的分析,本实施例中Web容器集成系统实现为:
PKUAS中Web容器集成系统的外层采用如前所述的接口结构,WebController,VirtualHost和VirtualApp接口的实现代码部分摘录如下:
public interface WCController {public String[]getHostNames(),public VirtualHost[]getVirtualHosts(),public VirtualHost getDefaultVirtualHost(),public VirtualHost findHost(String name),public void removeHost(String name),} |
public inter face VirtualHost{public String[]getAllApps(),public VirtualApp findApp(String contextPath),public VirtualApp install(String contextPath,String docBase,ClassLoader parent)tbrows IOException,public VirtualApp install(String contextPath,URL war,ClassLoader parent)throws IOException,public void remove(String contextPath)throws IOException,public void start(String contextPath)throws IOException,public void stop(String contextPath)throws IOException} |
public interface VirtualApp {public String getContextPath(),public String getLocalPath(),public boolean start(),public boolean stop(),} |
PKUAS中Web容器系统的内层实现包括如前所述的两项主要内容:
(1)实现接入PKUAS微内核的MBeans(由于PKUAS采用了Java Management Beans规范,所以Web容器作为PKUAS平台上的一个系统构件也必须按照规范实现MBeans接口)。实现代码部分摘录如下:
public class Server extends Service implements ServerMBean,WCController {…… public Server(){super()engine=new StandardEngine(),engine.setDebug(debug),EngineConfig config=new EngineConfig(),config setDebug(debug)engine.addLifecycleListener(config),engine setName(″PKUASWebContainer″),FileLogger fl=new FileLogger(),fl.setDirectory(″logs″),fl setPrefix(″WebContainer.″),fl setSuffix(″log″),fl.setTimestamp(true),engine setLogger(fl),engine setParentClassLoader(Thread.currentThread().getContextClassLoader()),}public String getHttpPort(){return″″+httpPort,}……} |
(2)实现外层接口到Apache Tomcat功能接口的映射。根据前面对Tomcat结构的分析可以知道,Tomcat的结构和系统外层接口定义具有比较好的对应关系。因此,系统内层的实现比较直接:WebController的功能映射到Tomcat Engine模块;VirtualHost的功能映射到Tomcat Host模块;VirtualApp功能映射到TomcatContext模块。实现代码部分摘录如下:
public class AppWrapper extends WrapperBase implements VirtualApp{public AppWrapper(Context aContext,Log aLogger){super(aLogger)this context=aContext}……public boolean start(){if(context instanceof Lifecycle){try{((Lifecycle)context).start(),}catch(LifecycleException e){logger error(″Error encountered while starting application″+context getDisplayName()+″·″+e),return false,}}else{logger info(″Application″+context.getDisplayName()+″can not be started.″),return false,}return true,}public boolean stop(){if(context instanceof Lifecycle){try{((Lifecycle)context).stop(),}catch(LifecycleException e){logger.error(″Error encountered while stopping application″+context.getDisplayName()+″:″+e),return false,}}else {logger.info(″Application″+context.getDisplayName()+″can not be stopped.″),return false,}return true,}} |
public class HostWrapper extends VirtualHostBase {public HostWrapper(StandardHost aHost,Log aLogger){super(aLogger),this host=aHost,}……public final String[]getAllApps(){Container[]children=host findChildren(),String[]appNames=new String[children.length],for(int i=0,i<children length,i++){appNames[i]=children[i].getName(),}return appNames,}……} |
这样便完成了本文所提出的Web容器集成系统在PKUAS上的实现。
以上通过具体实施例详细描述了本发明,本领域的技术人员应当理解,在不脱离本发明实质的范围内,可以对本发明进行各种变形和修改。
Claims (8)
1. 一种Web容器集成系统,其特征在于,该系统是一个两层结构,用来集成各种特定的Web容器实现,所述的系统包括:
1)外层接口,独立于Web容器实现,用于实现应用服务器中其他模块与Web容器交互的接口,Web容器作为所述应用服务器中的一个模块;
2)内层接口,对特定Web容器进行包装、扩展或改良,实现接入应用服务器内核的管理和用于将系统外层所定义的功能映射到特定Web容器所提供的功能,用于匹配外层接口。
2. 如权利要求1所述的Web容器集成系统,其特征在于,所述的外层接口包括:
WebController接口,用于启动与停止Web容器;
VirtualHost接口,用于启动与停止相应的虚拟主机;
VirtualApp接口,用于部署、启动、停止和卸载应用。
3. 如权利要求1所述的Web容器集成系统,其特征在于,所述的内层接口包括:
接入应用服务器管理框架所需的接口,用于实现接入应用服务器内核的管理;
实现系统外层中定义的接口,用于将系统外层所定义的功能映射到特定Web容器所提供的功能。
4. 如权利要求2所述的Web容器集成系统,其特征在于,所述的WebController接口还用于添加、删除虚拟主机以及获取已定义的虚拟主机实例。
5. 如权利要求2所述的Web容器集成系统,其特征在于,所述的VirtualHost接口还用于部署与卸载Web应用。
6. 如权利要求2所述的Web容器集成系统,其特征在于,所述的VirtualApp接口还用于获取具体应用的信息,包括应用根目录的本地路径和映射的上下文路径。
7. 如权利要求3所述的Web容器集成系统,其特征在于,所述的内层接口包括以下几类:
Server和WebControllerBase类,是对外层WebController接口的实现;
HostWrapper和VirtualHostBase类,是对外层VirtualHost接口的实现;
AppWrapper和VirtualAppBase,是对外层VirtualApp接口的实现。
8. 如权利要求7所述的Web容器集成系统,其特征在于,所述的Server类还用于实现管理接口ServerMBean。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005101306617A CN100412793C (zh) | 2005-12-20 | 2005-12-20 | 一种J2EE应用服务器中Web容器的集成系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005101306617A CN100412793C (zh) | 2005-12-20 | 2005-12-20 | 一种J2EE应用服务器中Web容器的集成系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1987773A CN1987773A (zh) | 2007-06-27 |
CN100412793C true CN100412793C (zh) | 2008-08-20 |
Family
ID=38184585
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005101306617A Expired - Fee Related CN100412793C (zh) | 2005-12-20 | 2005-12-20 | 一种J2EE应用服务器中Web容器的集成系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100412793C (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102546683B (zh) * | 2010-12-10 | 2015-09-02 | 厦门市美亚柏科信息股份有限公司 | 一种主机域名收集方法和装置 |
CN102316163B (zh) * | 2011-09-07 | 2014-01-15 | 山东中创软件工程股份有限公司 | 一种实现Web容器扩展的方法及实现Web容器扩展的装置 |
CN107025124B (zh) * | 2015-06-24 | 2021-02-19 | 上海信联信息发展股份有限公司 | 网页技术开发单机软件的系统架构 |
CN107133055B (zh) * | 2017-06-07 | 2020-04-24 | 百卓网络科技有限公司 | 一种基于ClassLoader实现定制开发的方法 |
CN113114482B (zh) * | 2021-03-08 | 2022-06-14 | 中国—东盟信息港股份有限公司 | 一种基于容器的混合云管理系统及方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005011355A (ja) * | 2003-06-19 | 2005-01-13 | Microsoft Corp | モジュール型Webアプリケーションを作成するためのフレームワーク |
-
2005
- 2005-12-20 CN CNB2005101306617A patent/CN100412793C/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005011355A (ja) * | 2003-06-19 | 2005-01-13 | Microsoft Corp | モジュール型Webアプリケーションを作成するためのフレームワーク |
CN1627257A (zh) * | 2003-06-19 | 2005-06-15 | 微软公司 | 用于创建模块化web应用的框架 |
Non-Patent Citations (4)
Title |
---|
基于J2EE的Web框架技术. 赵开芹,于伟海,王峰.现代电子技术,第192期. 2005 |
基于J2EE的Web框架技术. 赵开芹,于伟海,王峰.现代电子技术,第192期. 2005 * |
开发基于J2EE的Web Services应用研究. 梁俊斌,苏德富.微计算机应用,第26卷第1期. 2005 |
开发基于J2EE的Web Services应用研究. 梁俊斌,苏德富.微计算机应用,第26卷第1期. 2005 * |
Also Published As
Publication number | Publication date |
---|---|
CN1987773A (zh) | 2007-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CA2777443C (en) | Automated enterprise software development | |
US6834284B2 (en) | Process and system for providing name service scoping behavior in java object-oriented environment | |
US7716665B2 (en) | System and method for developing portal applications and for automatically deploying portal applications into a portal server application | |
CN100530160C (zh) | 分布式计算系统的架构和分布式应用程序的自动设计,部署及管理 | |
US20030181196A1 (en) | Extensible framework for code generation from XML tags | |
US20020078255A1 (en) | Pluggable instantiable distributed objects | |
US20030225774A1 (en) | Conversion of an object model to a source file generation model | |
US20030237050A1 (en) | Markup compiler that outputs MIDlets | |
US20030182626A1 (en) | On-demand creation of MIDlets | |
AU2002319843A1 (en) | General and reusable components for defining net-centric application program architectures | |
EP1428115A2 (en) | General and reusable components for defining net-centric application program architectures | |
CN100412793C (zh) | 一种J2EE应用服务器中Web容器的集成系统 | |
Huang et al. | Runtime software architecture based on reflective middleware | |
Pour | COMPONENT TECHNOLOGIES | |
Marrs et al. | JBoss at Work: A Practical Guide: A Practical Guide | |
Deng et al. | Evolution in model-driven software product-line architectures | |
EP1249755A2 (en) | A method and system for accessing software-based systems | |
CN102065133B (zh) | 支持Portlet协作构建复杂业务逻辑的方法和系统 | |
Balasubramanian | Model-driven engineering of component-based distributed, real-time and embedded systems | |
Rettberg et al. | Embedded system design based on webservices | |
Sztajnberg et al. | An integration experience of a software architecture and a monitoring infrastructure to deploy applications with non‐functional requirements in computing grids | |
Pour | Component Technologies: Expanding the Possibilities for Development of Web-Based Enterprise Applications | |
KR100914250B1 (ko) | 프로바이더 시스템 및 프로바이더 시스템에서의 프로바이더호출 방법 | |
Künzl | Development of a Workflow-based Infrastructure for Managing and Executing Web Services | |
Giannakakis | Adopting Existing Communication Platforms for Security Enabling Technologies |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20080820 Termination date: 20121220 |