Jetspeed-2 研究报告

zhm_001 贡献于2014-09-01

作者 wuchengzhi  创建于2010-10-09 02:27:00   修改者User  修改于2010-10-09 02:59:00字数10740

文档摘要:Jetspeed-2研究报告原理编Jetspeed-2概述Jetspeed是Apache的一个开源的portal框架,可以快速构建一个企业信息门户网站。提供了丰富的功能。Jetspeed使用Portlet技术进行门户设计,对于页面部分可以进行模块化的开发和管理,就是像现在很多门户提供的个人主页一样,可以根据每个人的爱好来定制自己喜欢的主题.
关键词:

 Jetspeed-2 研究报告 1. 原理编 1.1 Jetspeed-2概述 Jetspeed是Apache的一个开源的portal框架,可以快速构建一个企业信息门户网站。提供了丰富的功能。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) 1.2 Jetspeed-2体系架构 1.2.1 Jetspeed的架构 系统架构如图如图1-1所示 图1-1 Jetspeed是布署在Java Web的应用服务器之上的,并且数据访问是使用Apache OJB来存取Jetspeed所需要的Portal系统信息及个性化的配置信息。 Portals Bridges 项目其本质就是由一组类库构成的轻量级框架,通过该桥接器框架可以在门户上支持众多流行的Web框架,如上图括号中所列举。用户通过它可以很容易的将已有的基于这些流行Web框架的Web应用程序,通过少量的修改和配置,作为Portlet应用程序发布单元发布到Portal上。这个项目不但在Jetspeed上取得的成功,还被众多开源的,甚至商用的门户实现所使用,如JBoss Portal,GridSphere Portal,Stringbeans Portal,Vignette Application Portal,Apache Cocoon Portal和Jetspeed Portal。 Pluto Pluto是Jetspeed默认的本地Portlet Container实现,它是一个完全符合JSR-168规范的Portlet容器实现,其前身为IBM捐赠的源代码,因此我们至今还能够在WebSphere Portal 5.1.1中看到它的身影。这里要注意本地的意思是指运行在该Portlet容器里的Portlet应用程序在物理上与Portal在同一个JVM进程中。 WSRP-4j WSRP-4j是WSRP规范的JAVA实现,目前该项目还处在孵育状态,尚未吸引到足够多的开发者的兴趣。其实,我个人认为这是一个很有前途的技术发展方向,它可以提供类似Html IFrame这样速成的内容抓取能力。Jetspeed已经为WSRP-4j预留了远程Portlet Container的配置选项。 Graffito 用于构建内容管理应用程序的框架,从它自身的架构设计上来看应该是一个独立平台,但事实上该项目复用了大量Jetspeed的模块,并且其表现层为发布到Jetspeed上的几个Portlet应用程序,因此,我在上面的架构图中,将它放在了Jetspeed之上。该项目目前也处在孵育状态下,由于其该项目目前不太活跃,那几个Portlet应用程序都有些小问题。 Jetspeed 项目是整个Apache Portal项目组的核心,它是一个功能完备的,易于扩展的企业级Portal实现,将在下面的文章中着重介绍它。 1.2.2 JetSpeed与Spring 如图1-2,Jetspeed是使用Spring来管理它的相关对象及对象的依赖关系的。 图1-2 Beans BeanFactory and the ApplicationContext Jetspeed主要使用了Spring最核心的IoC引擎BeanFactory和ApplicationContext,管理所有Jetspeed Components的生命周期和依赖关系,所有这些组件的Spring声明全部定义在名为assembly的文件夹中的XML文件里。如果第三方开发者认为默认的Jetspeed组件不足以满足要求,只要按照自己需求编写Jetspeed Component的Interface的实现类,然后修改Spring Bean XML定义,就可以轻易替换掉默认的实现。 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机制通过Spring 的Declarative Transaction机制,Jetspeed很轻易实现了细颗粒度的事物管理,用户可以很容易配置需要管理事务的方法,如"addSite*"、"updateSite*"和"removeSite"等等,其中"*"为通配符,详细信息见 Spring MVC 由于Jetspeed对Spring的天生依赖,很自然Jetspeed也支持基于Spring MVC framework。 1.2.3 JetSpeed与Portlet Containers portlet container 是提供 portlets 执行的环境,包含了许多 portlets 并且管理他们的生命周期,他也会永远保存着 portlets 的喜好设置,一个 portlet container 接收到来自 portal 的请求后,接着将这个请求传递给存在 container 的 portlet 执行。portlet container 没有义务去组合 portlets 产生的信息內容,这个工作必须由 portal 来处理。portal 和 portlet container 可以放在一起视为同一个系统的组件,或者分开成为两个独立的组件。 Jetspeed使用Pluto作为它的Portlet Container。Pluto的设计目标,其实既是一个完整的、自包含的轻量级门户,又是一个易于内置的Portlet Container。它不需要Jetspeed也能够单独工作,例如Apache唯一的应用服务器项目Geronimo就内置Pluto Portlet Container,作为它的Console实现平台。 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 1.2.4 相关名词解释 名词 解释 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将远程内容抓取到本地,最后通过本地内容聚合引擎展示出来。 2. 安装编 Jetspeed2的安装很简单,只需要下载官方的安装包即可,安装包是一个jar文件,可以直接下载后使用java的命令进行安装。 下载:jetspeed-installer-2.2.1.jar安装包,地址为: http://www.apache.org/dyn/closer.cgi/portals/jetspeed-2/binaries/jetspeed-installer-2.2.1.jar 保存在目录中,进入到目录中执行 将会弹出图2-1, 选择Next进入下一步 图2-1 进入图2-2,选择Accept进入下一步 图2-2 图2-3中,如果第一次安装,选择Install Jetspeed Portal选项,点击Next 图2-3 选择安装路径,点击Next 图2-4 如图2-5,这里选择默认的,再点击Next 图2-5 图2-6是所选中要安装的所有项的一个列表,注意这里,也可以勾选Store PSML in the database选项,如果选中后,psml是存放在数据库中的 图2-6 如果确认安装后,选择Next继续安装,进入图2-7进行选择数据库,目前列出的都是Jetspeed支持的数据库,而对于Sybase的话,目前还不支持,因为它在操作进程中,需要进行一个级联删除(Delete on cacased).可以根据自已的开发环境选择一个合适的数据库,点击Next继续安装。 图2-7 图2-8所展现,输入连接数据库的相关配置信息后,点击Next就可以开始安装了,在此需要指定一下连接此数据库的jdbc驱动包. 3. 布署编 3.1 Jetspeed目录结构 安装完Jetspeed2.2.1后,如图3-1所示,其实它是一个Tomcat的目录结构的,其实它是6.0.18版本的tomcat,在它的目录下多了pages及databases文件夹.下面将讲解一下与标准tomcat不一致的文件进行讲解。 图3-1 展开Jetspeed安装后目录结构,如图3-2所示, 图3-2 位于conf/Catalina/localhost/下添加了jetspeed.xml这个文件,主要是注册一个jndi的数据源及JAASRealm 位于database下的目录,是各个数据库的删表语句与建表语句 位于pages下为Jetspeed的所有页面信息_user下存放的是注册用户的个人主页的定制页面,administrative是跟管理员相关的权限管理页面。 位于webapps中安装了一些WEB应用,其中jetspeed应用就是一个portal server,它内部包含了一个portlet container. 安装时还自带了j2-amdin,rss,demo,webcontent应用,它们都是jetspeed的portlet应用. Jetspeed应用内容较多,下面小节将详细介绍一下 3.2 Jetspeed 应用结构介绍 图3-3为jetspeed的应用目录结构 图3-3 WEB-INF目录的文件 Jetspeed2和Spring集成,spring配置文件主要放在WEB-INF/assembly下,及WEB-INF/assembly/boot目录。里面有四十多个Spring的xml配置文件,用于初始化及组装jetspeed的相关组件。启动时会加载/WEB-INF/conf/jetspeed.properties作为它的默认配置. 如果要覆盖一些默认的配置信息, 可以把相关的xml配置信息放到/WEB-INF/assembly/override/目录,把相关的配置项加入到/WEB-INF/conf/override.properties. 更详细的文件配置内容可以参照官方的文档说明,地址为: http://portals.apache.org/jetspeed-2/deployguide/jetspeed-properties.html decorations decorations目录主要是放置门户的样式如主题,布局资源,我们可以修改里面的配置及新加自已的LOGO,颜色方案,还有页头和页脚的内容。 具体的样式方案是放在layout目录下,我们可以仿照其它的来扩展我们的portal样式。 具体相关详细方法可以参考官方文档实现.地址为: http://portals.apache.org/jetspeed-2/tutorial/02/customizing-overview.html javascript javascript目录下存放的是一些javascript库,如dojo,yui,jetspeed自已的javascript库等,这些库都在decorations的layout中velocity模板文件中引用.我们可以把自已扩展的javascript包放到这个目录下,并在模板里引用。 3.3 Jetspeed 环境变量 与tomcat配置一样,只需要配置 CATALINA_HOME= %TOMCAT_HOME% PATH=%PATH%;%CATALINA_HOME%\bin; 即可 4. 开发编 Portlet的开发与servlet的开发极其相似,portlet的开发是JSR168的标准,可以参考另一份文档《JSR168_PORLET标准手册汉化整理.doc》进行portlet规范的学习。本文将以一个简单的helloworld来学习如何开发一个portlet,并把portlet布署到portlet tomcat,显示在页面中。 4.1 搭建开发环境 开发环境: JDK5.0 + Tomcat5.5+(这里使用安装完的Jetspeed) Myeclipse 5.1+ 使用myeclipse新建一个WEB项目”myportlet”,由于Portlet开发,需要使用Jetspeed2所提供的包来进行支持,所以要把Jetspeed(Tomcat)的lib目录下所有java包加入到classpath中。这样,就可以开始开发portlet了。 4.2 开发第一个portlet 第一步: 在web项目中我们新建HelloWorldPortlet,它继承自javax.portlet.GenericServletPortlet,覆写父类的doView方法.具体代码如下 @Override protected void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException { response.setContentType("text/html"); response.getWriter().println("Bonjour: View Mode"); } 第二步: 在WEB-INF/下新建一个portlet.xml,与web.xml目录同级.文件配置内容如下: HelloWorldPortlet Portlet HelloWorldPortlet HelloWorldPortlet He text/html VIEW EDIT HELP en HelloWorldPortlet Monde HelloWorldPortlet hello 第三步: 在web.xml将应用注册到portlet container中。加入如下代码 com.ibm.websphere.portletcontainer.PortletDeploymentEnabled false MVC Servlet for Jetspeed Portlet Applications Jetspeed Container JetspeedContainer org.apache.jetspeed.container.JetspeedContainerServlet contextName JetSpeedDemo 0 JetspeedContainer /container/* 4.3 布署我们的Portlet 将web应用发布到tomcat中有很多种方法,但是不要将classpath中的lib发布到应用中, 因为在tomcat/lib中已经有这些包了,我们可以建立一个context注册到tomcat中,具体是新建一个xml文件叫: myportlet.xml内容如下: 将myportlet.xml拷贝到%CATALINA_HOME%\conf\Catalina\localhost\目录下,里面应该有一个jetspeed.xml文件. 输入命令: 启动后,访问:http://localhost:8080/jetspeed/portal 可以通过右侧的工具把portlet,输入关键字HelloWorldPortlet找到我们的portlet并加入到页面.

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ] 2 人已下载

下载文档