快捷搜索:

Apache门户项目组的相关介绍

小序

JEE作为建立在 Java平台上的企业级利用办理规划,颠末这些年赓续成长,已经成为企业级开拓的工业标准和首选平台。浩繁厂商如IBM,BEA和Oracle等都环抱该规范推出了响应的,功能强大年夜的产品。JEE规范组中最受业界认同和取得最大年夜成功的便是JEE Web层面规范,成长到本日,已经步入门户(Portal)的期间。

门户,简言之便是供给包括内容聚合、单点登岸、个性化定制和安然治理等办事的根基Web平台。浩繁JEE产品供给商基于JEE Web层技巧推出了自己的Portal产品,闻名的产品有IBM WebSphere Portal Server,BEA Weblogic Portal Server等。不停处于技巧前沿的闻名开源社区Apache,颠末这几年的技巧积累也形成了自己的门户项目组。该项目组今朝已经初具规模,并且拥有了必然的用户群体,经受了必然的市场磨练。

本文主要面向有必然JEE编程履历的Java开拓者和试图构建自己的门户软件产品的产品经理,由于基于开源项目构建企业级的商用产品,已经在国外取得了许多成功案例。

名词解释

名词

解释

Portal

门户,供给包括内容聚合、单点登岸、个性化定制和安然治理等办事的根基Web平台。

Portlet

Portlet 是基于web的Java组件。它由Portlet容器治理,能够处置惩罚哀求,产活跃态内容。Portlet被Portal用作为可插拔的用户接口组件,为信息系统供给展现。由Portlet动态孕育发生的内容也被叫做fragment。fragment是遵照某种规则的标记(例如:HTML, XHTML,WML),可与其他的fragment一路建立一个完备的文档。一样平常一个Portlet孕育发生的内容和其他的Portlet孕育发生的内容凑集在一路形成Portal网页。

Portlet Container

Portlet在Portlet容器中运行,Portlet容器为Portlet供给必需的运行情况。Portlet容器包孕Portlet(组件)并且治理它们的生命周期,它也为 Portlet的参数设置供给持久化的存储。Portlet 容器不是一个类似于 servlet 容器的自力容器。它是在 servlet 容器上经由过程扩展要领实现的,并重用 servlet容器供给的功能。从Portal的角度来看,Portlet Container是Portal平台所供给的浩繁办事之一。

JSR168,JSR286

因为越来越多的公司开拓了各自的Portal组件和基于其的Portal产品(如Bea, IBM, Oracle, Sun, Sybase, Novell, SAP, Jetspeed, Vignette 等.这种互不兼容的接口实现赓续带给法度榜样供给商各类问题和麻烦, 为了办理这种问题, JCP宣布了JSR168 (Java Specification Request), Portlet Specification, 用以供给不合Portal和Portlets之间的互用性。JSR 286是168规范的延伸,是今朝最新标准规范,今朝仍处在draft状态。

SSO Single

Sign- On,即单点登岸。当一个大年夜系统中存在多个子系统时,用户只必要精确登岸此中任何一个子系统,就可以在各个子系统中往返自由切换和应用赋予该用户权限的各类资本。一样平常可以分为两种类型:Web利用之间的单点登岸和门户Web利用和它所连接的后台系统之间的单点登岸。SSO是任何一个门户产品必须办理的问题,必须供给的办事。

WSRP

WSRP是OASIS组织的一个规范,它定义了远程门户网站的Web办事。经由过程Web Service将远程内容抓取到本地,着末经由过程本地内容聚合引擎展示出来。

Apache门户项目组整体架构

在小序中已经枚举了Apache门户项目组的组成项目包括:Jetspeed-1/2,Bridges,Pluto,WSRP-4J和Graffito。因为Jetspeed-1和Jetspeed-2角色相同,下文中假如没有分外指出,所有Jetspeed都是指Jetspeed-2。

图一Apache门户项目组架构图

上图中粉血色困绕部分为Apache门户项目,其它由土黄色困绕部分为它们的依附项目。经由过程上图可以很清楚看到,整个项目都构建在JEE Web Tier上,理论上只要支持Servlet 2.3或以上版本规范的Web容器,都可以作为Apache门户项目的根基平台,但Jetspeed官方着实仅仅声明Tomcat是其独一支持的Web容器。另一块需要的依附,是构建在O/R mapping项目Apache OJB之上的数据仓库,用于寄放Portal系统信息和用户个性化设置设置设备摆设摆设(Profile)。

Portals Bridges项目其本色便是由一组类库构成的轻量级框架,经由过程该桥接器框架可以在门户上支持浩繁盛行的Web框架,如上图括号中所枚举。用户经由过程它可以很轻易的将已有的基于这些盛行Web框架的Web利用法度榜样,经由过程少量的改动和设置设置设备摆设摆设,作为Portlet利用法度榜样宣布单元宣布到Portal上。这个项目不只在Jetspeed上取得的成功,还被浩繁开源的,以致商用的门户实现所应用,如JBoss Portal,GridSphere Portal,Stringbeans Portal,Vignette Application Portal,Apache Cocoon Portal和Jetspeed Portal。

Jetspeed项目是全部Apache Portal项目组的核心,它是一个功能完整的,易于扩展的企业级Portal实现,将鄙人面的文章中着重先容它。

Pluto是Jetspeed默认的本地 Portlet Container实现,它是一个完全相符JSR-168规范的Portlet容器实现,其前身为IBM捐赠的源代码,是以我们至今还能够在 WebSphere Portal 5.1.1中看到它的身影。这里要留意本地的意思是指运行在该Portlet容器里的Portlet利用法度榜样在物理上与Portal在同一个JVM进程中。

WSRP-4j是WSRP规范的JAVA实现,今朝该项目还处在孵育状态,尚未吸引到足够多的开拓者的兴趣。着实,我小我觉得这是一个很有出路的技巧成长偏向,它可以供给类似Html IFrame这样速成的内容抓取能力。Jetspeed已经为WSRP-4j预留了远程Portlet Container的设置设置设备摆设摆设选项。

Graffito是用于构建内容治理利用法度榜样的框架,从它自身的架构设计上来看应该是一个自力平台,但事实上该项目复用了大年夜量Jetspeed的模块,并且其体现层为宣布到Jetspeed上的几个Portlet利用法度榜样,是以,我在上面的架构图中,将它放在了Jetspeed之上。该项目今朝也处在孵育状态下,因为其该项目今朝不太生动,那几个Portlet利用法度榜样都有些小问题。

企业级的门户实现--Jetspeed

产品特点

标准

完备兼容Java Portlet API标准1.0(JSR-168)

经由过程JSR-168规范兼容性测试

基于JAAS标准的认证和授权办事(默认支持数据库的实现)

基于LDAP的用户认证

体系架构

基于Spring Framework的组件架构

机动可设置设置设备摆设摆设的哀求通道(经由过程Spring Bean XML设置设置设备摆设摆设)

Portlet利用宣布单元热支配

Jetspeed AJAX XML API(基于闻名的开源AJAX Framework - DOJO)

扩展的Portlet页面布局说话(支持持久化到文件或数据库)

门户核心特点

声明风格的安然约束

基于角色的Portlet安然方面的API

门户内容治理和导航,包括页面、菜单、文件夹和超链接

单线程或多线程的内容聚合引擎(经由过程Spring Bean可以随意马虎切换)

高度可扩展的Jetspeed 单点登岸办事框架

基于权限和规则的门户页面和资本定位设置设置设备摆设摆设

支持所有主流的数据库,包括:Derby、MySQL、MS SQL、Postgres、Oracle、DB2、 Hypersonic

不依附客户端类型的capability engine (html, xhtml, wml,vml)

多说话支持(12国说话,包括简体中文和繁体中文),而且完全可扩展

完备的机能统计日志引擎

使用闻名开源搜索引擎Lucene供给对所有门户资本的全文本检索和元数据搜索办事

用户注册办事和忘怀密码的邮件看护办事

富厚的登岸密码设置设置设备摆设摆设策略

门户治理

用户,角色,用户组,密码和Profile治理

JSR 168协议规范定义的用户属性编辑器

门户页面治理

单点登岸办事治理

Portlet利用法度榜样治理

Profiler治理

门户机能统计申报

对Web框架的支持和例子Portlets

经由过程Bridges项目支持险些所有的主流Web Framework与Jetspeed门户的整合,包括:JSF(Sun的标准JSF实现和Apache MyFaces)、Apache Struts、PHP、Perl、Velocity

例子Portlet包括:RSS、IFrame(经由过程Jetspeed SSO API还可以支持SSO效果)、日历、书签。

支持Spring MVC

用户个性化

门户页面治理

页面用户定制(包括增删查改门户页面,页面的风格,Portlet框体风格,Portlet的位置,Portlet的结构等等)

支持两种门户定制风格,包括传统的基于页面刷新的风格和基于AJAX技巧的风格

门户设计

支持Portlet和Portal页面皮肤的打包宣布

基于CSS技巧的可设置设置设备摆设摆设结构

支持Velocity模版引擎

门户开拓对象

支持Maven 1.x和Maven2.0.x,部分功能支持Ant脚本

支持经由过程Maven插件天生自定义门户根基框架

热支配Portlet利用宣布单元和门户资本

支持经由过程API调用的要领支配Portlet利用宣布单元

支持Eclipse3.2.x开拓情况

利用办事器

Apache Tomcat 5.0.x

Apache Tomcat 5.5.x

IBM WebSphere Application Server 5.1/6.0

JBoss

Geronimo 1.0(非官方支持,详见:JS2-444)

架构体系

本节将从Jetspeed和Spring的关系,运行时架构以及Jetspeed service架构这三方面具体先容Jetspeed的架构体系。

Jetspeed和Spring

Jetspeed架构体系最大年夜特征,也是其高度可订制的基本便是,它选用闻名开源POJO框架Spring作为其底层实现。在项目之初,Jetspeed的开拓者们也面临着Spring和PicoContainer的决定,但事实证实当初的选择是精确的,由于跟着Spring赓续生长完善,Jetspeed的组件架构也随着收益良多。从另一个角度来看,Jetspeed也可以作为使用Spring构建自己产品架构的经典范例,值得我们考察和进修。

下图简单描述了今朝Jetspeed对Spring的依附关系:

图二 Jetspeed应用到的Spring组件

Beans BeanFactory and the ApplicationContext

Jetspeed主要应用了Spring最核心的IoC引擎BeanFactory和ApplicationContext,治理所有 Jetspeed Components的生命周期和依附关系,所有这些组件的Spring声明整个定义在名为assembly的文件夹中的XML文件里。假如第三方开拓者觉得默认的Jetspeed组件不够以满意要求,只要按照自己需求编写Jetspeed Component的Interface的实现类,然后改动Spring Bean XML定义,就可以随意马虎调换掉落默认的实现。例如:

Jetspeed SearchEngine Component Definition

${applicationRoot}/WEB-INF/search_index

true

Jetspeed在实现历程中遵照着面向接口编程的最佳实践,上图中的Bean id为org.apache.jetspeed.search.SearchEngine,事实上这是一个定义在核心jetspeed-api组件中的接口,org.apache.jetspeed.search.lucene.SearchEngineImpl为该接口的实现类,这个类定义在 components/search组件中,后面的内容便是SearchEngineImpl的构造函数的输入参数,留意着末一个参数 org.apache.jetspeed.search.HandlerFactory也是一个Java Interface的接口。Spring在实例化SearchEngine的时刻,会首先阐发它的构造函数参数是否已经整个满意前提(实例化),Spring会根据搜索bean id为org.apache.jetspeed.search.HandlerFactory的bean,假如已经实例化就直接注入到 SearchEngineImpl的构造函数调用里;假如没有就实例化这个bean之后,再注入。

Apache OJB O/R Mappers

因为Spring对Apache OJB供给优越的支持,是以Jetspeed中与数据库相关的功能基础上都用过Spring的PersistenceBrokerDaoSupport实现。这些组件包括:Capablity、DatabasePageManager、PipeLine、Preferences、Profiler、 Registry、Security、SSO等。O/R Mapping的信息定义在上面这些组件jar包中的JETSPEED-INF/ojb/%component name%_repository.xml文件中,此中%component name%必要用组建名称替代。

Declarative transaction management

在Jetspeed中,你找不到一行有关于数据库事务的代码,这是由于它采纳了Spring的declarative transaction机制,下面一段XML定义了SSOProvider的事物治理:

Declarative Transaction

JETSPEED-INF/ojb/sso_repository.xml

org.apache.jetspeed.sso.SSOProvider

PROPAGATION_REQUIRED

PROPAGATION_REQUIRED

PROPAGATION_REQUIRED

PROPAGATION_REQUIRED

PROPAGATION_REQUIRED

PROPAGATION_REQUIRED

PROPAGATION_REQUIRED

PROPAGATION_SUPPORTS

由上图可知,经由过程Spring 的Declarative Transaction机制,Jetspeed很随意马虎实现了细颗粒度的事物治理,用户可以很轻易设置设置设备摆设摆设必要治理事务的措施,如"addSite*"、"updateSite*"和"removeSite"等等,此中"*"为通配符。

Spring MVC

因为Jetspeed对Spring的生成依附,很自然Jetspeed也支持基于Spring MVC framework,详见Jetspeed自带的例子Portlet利用法度榜样。

Jetspeed 组件架构启动历程

看了前面的先容,你必然想知道Jetspeed是若何将基于Spring的组件架构和标准JEE Web Application架构交融在一路,本节将经由过程描述Jetspeed Web Application的启动历程来懂得交融的细节。首先请看下图:

图五 Jetspeed Portal启动流程图

由上图可知,Jetspeed Portal从JEE角度来看着实便是一个标准的Web利用法度榜样,只不过在Servlet架构上引入了Component Manager的观点,然后用Spring实现了ComponentManager接口。是以假如你不知足Spring :,替换它也是有可能的。当Servlet被容器竣事时,也会同时关闭SpringComponentManager。Servlet启动完毕后,所有经由过程Spring Bean XML定义POJO都被实例化了,除了那些指定了lazy init属性为true的Bean。

Runtime架构

JetspeedServlet

Jetspeed的运行时大年夜情况是相符Servlet 2.3或以上规范的JEE Web容器,是以大年夜家可以经由过程察看其web.xml懂得或扩展其功能。下面是Jetspeed.war的web.xml:

Jetspeed-2 Enterprise Portal

log4j.config.file

/WEB-INF/conf/Log4j.properties

log4j.config.webApplicationRoot.key

applicationRoot

AJAXFilter

org.apache.jetspeed.ajax.AJAXFilter

AJAXFilter

*.ajax

org.apache.jetspeed.webapp.logging.

Log4JConfigurator

org.apache.jetspeed.engine.JetspeedServlet

jetspeed

org.apache.jetspeed.engine.JetspeedServlet

properties

/WEB-INF/conf/jetspeed.properties

applicationRoot

webContext

1

-

velocity

org.apache.jetspeed.velocity.

JetspeedVelocityViewServlet

org.apache.velocity.toolbox

/WEB-INF/toolbox.xml

org.apache.velocity.properties

/WEB-INF/velocity.properties

org.apache.jetspeed.cache.size

50

org.apache.jetspeed.cache.validation.interval

10000

10

LoginProxyServlet

org.apache.jetspeed.login.LoginProxyServlet

LoginServlet

org.apache.jetspeed.login.LoginServlet

LoginErrorServlet

org.apache.jetspeed.login.LoginErrorServlet

LoginRedirectorServlet

org.apache.jetspeed.login.LoginRedirectorServlet

LogoutServlet

org.apache.jetspeed.login.LogoutServlet

ManagerServlet

org.apache.jetspeed.manager.ManagerServlet

jetspeed

/portal/*

jetspeed

/portlet/*

jetspeed

/jetspeed/*

jetspeed

/fileserver/*

jetspeed

/ajaxapi/*

jetspeed

/desktop/*

jetspeed

/action/*

-

velocity

*.vm

LoginProxyServlet

/login/proxy

LoginServlet

/login/login

LoginErrorServlet

/login/error

LoginRedirectorServlet

/login/redirector

LogoutServlet

/login/logout

ManagerServlet

/manager/*

index.jsp

DB Connection

jdbc/jetspeed

javax.sql.DataSource

Container

Login

/login/redirector

portal-user

Manager

/manager/*

admin

FORM

Jetspeed

/login/login

/login/error

因为信息太多,这里只能拔取紧张的来解释。首先,请留意名为 jetspeed的servlet,这便是前面一个小节里提到的进口servlet,它同时也是Portal runtime的进口,它被映射到险些所有的URL Pattern。当来自客户真个Http哀求满意这些Pattern时,jetspeed servlet将会触发如下图所示的处置惩罚流程:

图六 Jetspeed runtime execution process

JetspeedServlet 首先会经由过程RequestContextComponent为当前Http Request创建RequestContext实例,然后在这个context下调用engine的service措施。然后就会进入Pipeline 的处置惩罚历程。

Pipeline

Jetspeed Pipeline实际上便是设计模式中常见的Chain of Responsibility模式的详细实现,其设计观点类似Servlet Filter,一个封装了HttpServletRequest和HttpServletResponse Object的Context在Pipeline中通报,每个valve都根据自己的必要从HttpServletRequest 工具中获守信息并将处置惩罚的结果写入context或HttpServletResponse工具,以通报给后面的valve应用。

这些Valve的定义和排序都是经由过程Spring Bean来设置设置设备摆设摆设的,定义文件为pipelines.xml,下面为该文件片断截取:

JetspeedPipeline

portlet-pipeline

jetspeed-pipeline

ajax-pipeline

jetspeed-pipeline

fileserver-pipeline

desktop-pipeline

desktop-action-pipeline

上面表格第一行定义了Security Valve,第二行定义了名为JetspeedPipeline的一个Pipeline,第三行定义了这些Pipeline对应的URL Pattern。门户开拓者可以很轻易的定义自己特有的Pipeline Valve(只必要实现org.apache.jetspeed.pipeline.valve.Valve接口,并在这个xml文件中定义它),或者改变现有Pipeline中valve履行顺序,以致创建新的Pipeline,并把它映射到某个URL Pattern上。但这里必要留意的是新URL Pattern映射不能跟现有的重复,这是由于映射是经由过程Map数据布局实现。让我们再把留意力返回到图六,接下来的Container处置惩罚由一个竖线分隔,这是因为在Pipeline的aggregatorValve发生了cross context dispatch。必要留意的是Valve的实现类并不是Thread Safe的,开拓者必须自己治理共享变量,最好便是不要定义工具成员变量,整个应用措施内部变量。

Jetspeed的设计者之以是要自己实现这种链式模式而不直接应用Filter的可能缘故原由有二:其一,Filter是标准Servlet规范定义的接口,应用上肯定受规范限定,为了获取更大年夜的节制权和机动度必要自己的Pipeline。其二, Application Server,因为每种利用办事器可能对Filter的实现和设置设置设备摆设摆设措施上有异,为了实现一个Jetspeed Portal能够在各类利用办事器上宣布并运行,因而必须自己实现类似Filter的功能。

Container

讲到这里,我们必须首先理清楚Portal和Portlet Container之间的关系。Portal并不等价于Portlet Container,一个企业级的门户实现,可以包孕或者说支持多种Portlet Container同时运行,例如IBM WebSphere Portal就既包孕兼容JSR-168规范的Portlet Container又包孕了支持一些IBM特有功能属性的Portlet Container;BEA WebLogic也是采纳相同策略,既有其旧有的基于Struts技巧的Portlet Container,又支持JSR-168标准。跟着JSR标准规范进一步深化完善,如JSR-286规范定稿,大概这些大年夜的Portal厂商会徐徐放弃其旧的架构,完全拥抱标准。

对付Jetspeed而言,它同样关注的是门户本身的实现,而不是Portlet Container的实现,但因为Jetspeed-2完全扬弃Jetspeed-1的架构,而抉择彻底拥抱标准,是以Jetspeed只有一个标准的 Portlet Container实现,这便是Pluto项目。

Pluto的设计目标,着实既是一个完备的、自包孕的轻量级门户,又是一个易于内置的Portlet Container。它不必要Jetspeed也能够零丁事情,例如Apache独一的利用办事器项目Geronimo就内置Pluto Portlet Container,作为它的Console实现平台。然而,这与Jetspeed的定位起了冲突。在2005岁尾的Apache Con上,门户项目组开拓者齐聚一堂,就该问题作了深入的探究,大概这两个项目在将来会加倍关注于自身的技巧领域。

Jetspeed所内置的Pluto版本为稳定的1.0.1版,它所供给的内置集成要领不如今朝尚未正式宣布的Pluto1.1版本富厚,是以 Jetspeed采纳了Servlet 规范中的Cross Context Dispatch机制,将之集成了起来,这便是为什么Runtime架构图上,两者要用竖线分隔开来,由于他们着实是两个完全不合的Web利用,有着不一样的Context设置,之间经由过程Cross Context Dispatch机制联系起来的。是以当门户开拓者必要在其它利用办事器上支配Jetspeed门户时,必须留意开启Cross Context Dispatch机制,也同时要留意这种应用要领所带来的安然问题。例如Tomcat是经由过程设置文件%TOMCAT_ROOT%/conf /Catalina/localhost/jetspeed.xml(留意粉血色高亮字体):

在Pluto和Jetspeed互相共同下,经由过程JetspeedContainerServlet,终极履行节制权会交给Portlet的实现类。JetspeedContainerServlet就定义在Portlet利用法度榜样所属的Web利用单位中,也便是说所有在Jetspeed中运行的 Portlet Web利用都必须在Web.xml中包孕JetspeedContainerServlet的定义。在Tomcat中,这是经由过程deploy-tool组件完成的,在其它利用办事器平台,很可能就要靠利用宣布者手动添加了,需添加的信息包孕:

JetspeedContainer

Jetspeed Container

MVC Servlet for Jetspeed Portlet

Applications

org.apache.jetspeed.container.

JetspeedContainerServlet

contextName

rss

0

JetspeedContainer

/container/*

http://java.sun.com/portlet

/WEB-INF/tld/portlet.tld

Jetspeed Portlet Extension Service

前面先容了实现架构和运行时架构,接下来我们一路来看看Jetspeed为Portlet利用供给的Jetspeed Service架构。假如懂得JSR-168规范的开拓者就会知道,这个规范是基于Servlet 2.3规范根基上的一个简单扩展,是以并没有对Portlet开拓供给任何特其余支持。因而每家Portal厂商都供给了自己的扩展。

Jetspeed 供给的扩展要领跟很多厂商对Servlet规范的扩展一样,定义了一个名为jetspeed-portlet.xml的文件,作为标准的 portlet.xml的扩展。只要你在打包宣布portlet利用时将这个文件与portlet.xml放在一路,Jetspeed的宣布法度榜样就会自动读取这个文件,并根据其内容履行一系列的操作。它们的关系犹如BEA Weblogic利用办事器里面的weblogic.xml与web.xml;JBoss利用办事器里面的jboss-web.xml与web.xml。

下面我们来看看这个文件的款式:

xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"

xmlns:js="http://portals.apache.org/jetspeed"

xmlns:dc="http://www.purl.org/dc">

跟据XML Element的名字,可以理解便是供给给j2-admin这个Portlet利用法度榜样应用的一些Services。那么这些Services是怎么定义的呢?以UserManager这个办事为例,首先回到前面提到过的assemble目录下,找到jetspeed-services.xml和 security-managers.xml,下面分手是它们的内容节选:

jetspeed-services.xml

security-managers.xml

由上面的两个文件,我们可以清楚地看出UserManager是定义security-managers.xml文件中的,然则为了能够在portlet办事中引用它,还必须在jetspeed- services.xml中再次引用它的bean name,org.apache.jetspeed.services.JetspeedPortletServices封装了一个Map数据布局,Map中寄放的便是办事名称和该办事POJO工具引用,这统统便利都是由Spring带来的。

下面是在Portlet的代码中应用该办事的例子:

protected UserManager userManager = null;

public void init(PortletConfig config) throws PortletException {

super.init(config);

userManager = (UserManager)

getPortletContext().getAttribute(CommonPortletServices.

CPS_USER_MANAGER_COMPONENT);

if (null == userManager) {

throw new PortletException("Failed to find the User Manager

on portlet initialization");

}

}

Jetspeed鼓励Portlet开拓者在开拓历程中,将公共的Service用Spring Bean的要领封装起来,然后添加到Jetspeed-services中,这样就可以在Portlet代码中轻松复用这些公共Service了,并且还可以使用Spring来治理这些Service的生命周期。事实上,Jetspeed自带治理界面Portlet利用法度榜样就大年夜量采纳了这种技巧。

还有一个必要留意的问题是,用户自定义的Service必须放到Tomcat的sharedlib下面去,以包管JAVA Classloader能够找到它。

Jetspeed核心组件简介

先容了那么多Jetspeed架构方面的信息,下面我们一路来快速浏览一下Jetspeed Portal的核心组件。

Jetspeed-Api

路径:components/jetspeed-api

定义险些所有的jetspeed-api interfaces,一样平常的开拓者都应用这个组件中定义的接口进行二次开拓。

Component Manager

路径:components/cm

Jetspeed组件治理器,经由过程接口org.apache.jetspeed.components.ComponentManager樊篱了Spring的实现细节。可以经由过程实现该接口调换Spring。

Deploy-Tool

路径:components/deploy-tool

当Web Container为Tomcat时,经由过程该组件,读取已打包好的portlet利用法度榜样中的portlet.xml和web.xml,反省是否包孕JetspeedContainerServlet的定义,假如没有则改动web.xml加入这部分信息。

Id-Generator

路径:components/id-generator

用于天生全局独一的portlet实例id。

Locator

路径:components/locator

供给定位门户资本的办事,资本包括:模板,Profiler等。

Page-Manager

路径:components/page-manager

对闻名的门户布局描述文件-PSML(Portal Structure Markup Language),供给了Java工具模型映射,并且支持文本风格的PSML和数据库风格的PSML,以及PSML治理器。

Portal

路径:components/portal

实现绝大年夜部分的jetspeed-api组件中定义的interface,是最核心的组件。

Preferences

路径:components/prefs

实现了Portlet属性偏好功能,供给将这些属性持久化到数据库的办事。

RDBMS

路径:components/rdbms

Jetspeed中所有与Apache OJB O/R Mapping框架有关的组建的根基组件。

Search

路径:components/search

供给全部门户资本的全文本搜索办事,详细实现依附于Apache Lucene。

Security

路径:components/security

供给基于标准JAAS的认证办事,支持数据库和LDAP作为认证信息仓库。基于角色的授权办事,默认支持数据库作为权限仓库。

Single Sign-on

路径:components/sso

供给一个可扩展的单点登岸办事接口和一个简单的基于JAAS Subject的实现,该组件主要供给Portal门户与后台利用之间的单点登岸功能。

Statistics

路径:components/statistics

供给一个简单的造访哀求统计办事的实现,支持将统计信息持久化到数据库。在Jetspeed-2治理界面中,还供给了专门的Portlet浏览这些统计信息。

总结

本文带读者浏览了Apache Portal项目组的所有成员,并着重先容了Apache Jetspeed-2 Portal。盼望能够使不懂得门户技巧的同伙对它有一个初步的熟识,找到自己感兴趣的偏向,继承深入钻研;同时对那些试图在项目中应用开源软件的开拓者,供给一些可以借鉴的信息。纵不雅今朝开源软件中的门户实现,还没有哪一个社区能够供给像Apache Portal项目组这样完备的办理规划同时,还拥有如斯友好的许可策略。只要去深入懂得,开源软件每每能够给人们带来意外的惊喜。

您可能还会对下面的文章感兴趣: