快速业务通道

在Apache Geronimo上开发和部署Apache Pluto门户应用程序 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-07-04
gt;   </dependencies> </sys:environment> <security-realm-name>pluto-properties-file-realm</security- realm-name> <security>   <default-principal realm-name="pluto-properties-file-realm">    <principal class=      "org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal"  name="user"/>   </default-principal>   <role-mappings>    <role role-name="tomcat">     <realm realm-name="pluto-properties-file-realm">      <principal class=       "org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal"       name="admin"/>      <principal class=       "org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal"       name="system"/>     </realm>    </role>   </role-mappings> </security> <tomcat:cross-context/> </web-app>

您可以看到清单 1 中的部署计划有三个主要配置:

依赖性: <dependency> 元素用于指定 Web 应用程序与任何其他模块 、应用程序或服务之间的 依赖性。它还可以指明与位于 Geronimo 存储库中的第三方库之间的依赖性。在 清单 1 中, <dependency> 元素内的 <artifactId>sharedlib</artifactId> 将指定与 sharedlib 服务之间的依赖性。

安全性:Pluto Web 应用程序要求配置安全性。特别是,它要求使用 <security-realm> 验证 用户登录和主要角色,并使用 <role-mappings> 映射在 Pluto 的 Web 部 署描述符 (web.xml) 中 定义的角色。在 清单 1 中,pluto-properties-file-realm 安全领域被配置为 强制执行特定于应用程序 的验证策略,它用作登录域的入口点。它被配置为使用 org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal。在 Pluto 应用程序的 web.xml 文件中定义的 tomcat 角色被映射为使用这个 security-realm。

跨上下文:Pluto 服务器要求使用的一项重要功能是能够调用部署在 Geronimo 服务器上的其他 Web 应用程序中提供的 portlet。默认情况下,这个功能 —— 允许一个 Web 应用程 序把请求分派给其他 Web 应用程序 —— 是禁用状态。您可以通过在部署计划中指定 <cross- context> 元素来启用它 。清单 1 中出现的 <tomcat:cross-context/> 将为 Pluto 服务器应用程 序激活此功能。

在 Geronimo 中部署 Pluto

如果已下载的是 Pluto 源代码版本,您可以将其构建为获得 Pluto Web 应用 程序 PLUTO_SRC\pluto\portal\target\pluto.war。如果使用的是 Pluto 的二进制版 本,请使用以下命令从 PLUTO_HOME\webapps\pluto 文件夹创建 pluto.war(其中 pluto_xxx 是您选定 的文件夹):

c:\pluto_xxx>jar cvf pluto.war

拥有 pluto.war 之后,请使用 Web 控制台或命令行部署工具(在一行中键入 以下命令)部署它:

c:\geronimo-1.1.1\bin>deploy --user system deploy c:\pluto_xxx\pluto.war c:\pluto_xxx\geronimo-web-pluto.xml

在Apache Geronimo上开发和部署Apache Pluto门户应用程序(4)

时间:2011-08-27 IBM Rakesh Midha

开发样例门户应用程序

作为一个演示门户应用程序的开发及部署的样例场景,您将开发一个购票应用 程序。由于要开发的是 基于 JSR 168 和 J2EE 的应用程序,因此对于部署在 Geronimo 中的 Pluto 的 门户应用程序的服务器设 置与所有其他服务器设置完全相同。要创建样例门户应用程序,需要创建四个文 件:

Portlet 类

Portlet 描述符

Web 应用程序描述符

Portlet 视图页面

这些文件内容的详细说明不在本文讨论范围内。有关更多信息,请阅读 “使 用 Apache Pluto 构建和 测试 JSR 168 兼容的 portlets”(developerWorks,2006 年 4 月)。

portlet 类

门户类中的每个 portlet 都有一个用于实现 javax.portlet.Portlet 接口的 portlet 类。为了便于 操作,JSR 168 为 javax.portlet.Portlet 定义了一个默认实现 —— javax.portlet.GenericPortlet 类。清单 2 显示了 org.sample.geronimo.buyticket.BuyTicketPortlet 类,它 将扩展 BuyTicket portlet 的 GenericPortlet。同样地,本文的样例代码将包括 org.sample.geronimo.buyticket.TShirtPortlet(请参阅 下载 部分)。

清单 2. portlet 类 —— org.sample.geronimo.buyticket.BuyTicketPortlet

package org.sample.geronimo.buyticket; import java.io.*; import javax.portlet.*; import  org.apache.pluto.portlet.admin.util.PlutoAdminContext; public class BuyTicketPortlet extends GenericPortlet {    private static String VIEW_JSP = "/view.jsp";    protected void doView(RenderRequest request,  RenderResponse response)     throws PortletException, IOException {    response.setContentType(request.getResponseContentType ());    PortletContext context = getPortletConfig ().getPortletContext();    context.getRequestDispatcher(VIEW_JSP).include(request,  response);    }    public void processAction(ActionRequest request,  ActionResponse response)     throws PortletException, java.io.IOException {    String game = request.getParameter("game");    String name = request.getParameter("name");    String card = request.getParameter("card");     String errorMessage = null;    if(game != null && name != null &&  card != null      && !game.equals("") && !name.equals("")      && !card.equals("")){     response.setRenderParameter("game", game);     response.setRenderParameter("name", name);    }else     response.setRenderParameter("errorMessage",     "You entered invalid data, please check the name and  credit information");    } }

在Apache Geronimo上开发和部署Apache Pluto门户应用程序(5)

时间:2011-08-27 IBM Rakesh Midha

portlet 描述符

清单 3 中显示的 portlet.xml 文件将为门户应用程序中包含的所有 portlet 提供诸如 portlet 名 称、标题、类和模式之类的信息。

清单 3. portlet 描述符 —— portlet.xml

<?xml version="1.0" encoding="UTF-8"?> <portlet-app    xmlns="http://java.sun.com/xml/ns/portlet/portlet- app_1_0.xsd"    version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema- instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet- app_1_0.xsd    http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"    id="org.sample.geronimo.buyticket.BuyTicketPortlet">    <portlet>     <portlet-name>BuyTicket</portlet-name>     <display-name>Buy Ticket Portlet</display-name>     <portlet-class>       org.sample.geronimo.buyticket.BuyTicketPortlet     </portlet-class>     <supports>       <mime-type>text/html</mime-type>       <portlet-mode>view</portlet-mode>     </supports>     <portlet-info>       <title>Buy Ticket Title</title>     </portlet-info>    </portlet>    <portlet>     <portlet-name>TShirt</portlet-name>     <display-name>TShirt Portlet</display-name>     <portlet-class>       org.sample.geronimo.buyticket.TShirtPortlet     </portlet-class>     <supports>       <mime-type>text/html</mime-type>       <portlet-mode>view</portlet-mode>     </supports>     <portlet-info>       <title>TShirt</title>     </portlet-info>    </portlet> </portlet-app>

在Apache Geronimo上开发和部署Apache Pluto门户应用程序(6)

时间:2011-08-27 IBM Rakesh Midha

Web 应用程序描述符

web.xml 是用于提供关于 Web 应用程序组件信息(例如 servlet 和 taglib )的 J2EE 指定的标准 XML 描述符。清单 4 将显示 buyticket 门户应用程序的 WEB-INF\web.xml 文件 。

清单 4. Web 应用程序描述符 —— WEB-INF\web.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web  Application  2.3//EN"   "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app>    <display-name>GetPortlet</display-name>    <servlet>     <servlet-name>BuyTicket</servlet-name>     <display-name>BuyTicket Wrapper</display-name>     <description>Automated generated Portlet  Wrapper</description>     <servlet-class>org.apache.pluto.core.PortletServlet</servlet- class>     <init-param>      <param-name>portlet-guid</param-name>      <param-value>buyticket.BuyTicket</param-value>     </init-param>     <init-param>      <param-name>portlet-class</param-name>      <param- value>org.sample.geronimo.buyticket.BuyTicketPortlet</param- value>     </init-param>    </servlet>    <servlet-mapping>     <servlet-name>BuyTicket</servlet-name>     <url-pattern>/BuyTicket/*</url-pattern>    </servlet-mapping>    <servlet>     <servlet-name>TShirt</servlet-name>     <display-name>TShirt Wrapper</display-name>     <description>Automated generated Portlet  Wrapper</description>     <servlet-class>org.apache.pluto.core.PortletServlet</servlet- class>     <init-param>      <param-name>portlet-guid</param-name>      <param-value>buyticket.TShirt</param-value>     </init-param>     <init-param>      <param-name>portlet-class</param-name>      <param- value>org.sample.geronimo.buyticket.TShirtPortlet</param- value>     </init-param>    </servlet>    <servlet-mapping>     <servlet-name>TShirt</servlet-name>     <url-pattern>/TShirt/*</url-pattern>    </servlet-mapping>    <welcome-file-list>     <welcome-file>index.html</welcome-file>    </welcome-file-list>    <taglib>     <taglib-uri>http://java.sun.com/portlet</taglib-uri>     <taglib-location>tld/portlet.tld</taglib-location>    </taglib>    <taglib id="PortletTLD">     <taglib-uri>http://java.sun.com/portlet</taglib-uri>     <taglib-location>/WEB-INF/tld/portlet.tld</taglib- location>    </taglib> </web-app>

在Apache Geronimo上开发和部署Apache Pluto门户应用程序(7)

时间:2011-08-27 IBM Rakesh Midha

portlet 视图页面

BuyTicketPortlet 包括一个视图页面以通过调用 context.getRequestDispatcher ("view.jsp").include(request, response); 来解除视图部分与 portlet 代码 之间的耦合。清单 5 中 显示的 view.jsp 文件用于呈现实际的 HTML 页面。

清单 5. 初始页面 —— view.jsp

<%@ taglib uri="http://java.sun.com/portlet"  prefix="portlet"%> <%@ page language="java" contentType="text/html; charset=ISO- 8859-1"    pageEncoding="ISO-8859-1" session="false"%> <portlet:defineObjects />    <%     String game = renderRequest.getParameter("game");     if (game == null) game = "";     String name = renderRequest.getParameter("name");     if (name == null) name = "";     String errorMessage = renderRequest.getParameter ("errorMessage");     if (errorMessage != null) {    %>    <p><%=errorMessage%></p>    <%     }else if (name != null && !name.equals("")  && game !=  null && !game.equals("") ) {    %>    <p><b> Thank you <%= name %>, you purchased  ticket for <%=  game %></b></p>    <%     }    %>    <FORM name="<portlet:namespace/>ticketform"  action="<portlet:actionURL/>">    <table border="0">    <tr><td>     Select Game/Event     </td><td>     <select name="game">    <%     java.util.ArrayList  map=org.sample.geronimo.buyticket.GameConstants.map;     java.util.Iterator itr=map.listIterator();     while(itr.hasNext())     {      String gamelist=(String)itr.next();    %>    <option value=<%= gamelist %> selected="true"><%=  gamelist % ></option>    <%     }    %>     </select>     </td></tr>     <tr><td>Name</td><td><INPUT type="text"  name="name"  size="20"/></td></tr>     <tr><td>Card</td><td><INPUT type="text"  name="card"  size="20"/></td></tr>     <tr><td>Exp. Date</td><td><INPUT  type="text" name="date"  size="20"></td></tr>     </table>    <INPUT type="submit" name="<portlet:namespace/>submitTicket"   value="Buy"/>    <INPUT type="submit" value="Cancel"/>     </FORM>

现在把 portlet.tld 文件从 PLUTO_HOME\webapps\pluto\WEB-INF\tld 复制 到 WEB-INF\tld 文件夹 中。编译 WEB-INF\classes 文件夹中的 Java 文件,并把以上所有文件打包成一 个 WAR 文件,如下所示 :

c:\buyticket>jar -cvf buyticket.war

在Apache Geronimo上开发和部署Apache Pluto门户应用程序(8)

时间:2011-08-27 IBM Rakesh Midha

为样例应用程序创建部署计划

当 Pluto 被部署到 Geronimo 上时,必须把将要部署到 Pluto 中的所有门户 应用程序作为 Web 应用 程序部署到 Geronimo 服务器中。您需要有一个 buyticket 门户应用程序的 Geronimo Web 部署计划, 就像需要有一个 Pluto 服务器应用程序 Web 部署计划一样。清单 6 中显示了 buyticket 的部署计划 —— geronimo-web-app.xml。

清单 6. 门户应用程序部署计划 —— geronimo-web-app.xml

<?xml version="1.0"?> <web-app xmlns="http://geronimo.apache.org/xml/ns/web"    xmlns:naming="http://geronimo.apache.org/xml/ns/naming"    xmlns:tomcat="http://geronimo.apache.org/xml/ns/web/tomcat/config- 1.0"    xmlns:sys="http://geronimo.apache.org/xml/ns/deployment- 1.1"> <sys:environment>    <dependencies>      <dependency>        <artifactId>sharedlib</artifactId>      </dependency>    </dependencies> </sys:environment> </web-app>

Pluto 门户应用程序要求使用常见的 Pluto 文件,这些文件都是通过 Geronimo 中的 sharedlib 服 务共享的。门户应用程序与 sharedlib 服务的依赖性是在清单 6 所示的门户应 用程序部署计划中指定的 。

在 Geronimo 上部署和测试样例应用程序

门户应用程序必须执行两级部署。在第一级中,它将作为 Web 应用程序被部 署到 Geronimo 中。您可 以通过使用 Geronimo 部署工具轻松完成此操作:

在一行中键入以下命令:

c:\geronimo-1.1.1\bin>deploy --user system deploy c:\buyticket\buyticket.war c:\buyticket\geronimo-web-app.xml

此命令将把应用程序作为 Web 应用程序部署到 Geronimo 中,但是要使用 Pluto 服务和功能,必须 通过 Pluto 把应用程序重定向(第二个部署级别)。

为此,您必须把应用程序配置信息存储到 Pluto 注册库中。您可以手动更新 pluto\WEB- INF\data\pageregistry.xml、pluto\WEB-INF\data \portletcontexts.txt 和 pluto\WEB- INF\data\portletentityregistry.xml 文件,也可以执行下一步使用 Pluto admin 应用程序。

打开 http://localhost:8080/pluto/portal,并单击 Admin 链接。此操作将 打开图 1 中所示的 http://localhost:8080/pluto/portal/adminportletapp 应用程序。

图 1. Pluto admin 应用程序 —— 部署 buyticket portlet 应用程序

在Apache Geronimo上开发和部署Apache Pluto门户应用程序(9)

时间:2011-08-27 IBM Rakesh Midha

在此应用程序中,浏览到 buyticket.war 文件,并单击 Submit。此操作将部 署 buyticket 应用程序 并把门户应用程序的具体配置添加到 portletentityregistry.xml 中。

在 admin 部署的下一个页面中,请为新部署的门户应用程序提供标题、描述 和布局信息(参见图 2) 。

图 2. Pluto admin 应用程序 —— 门户布局

把行数和列数更改为显示门户应用程序所包含的行数和列数。

接下来,选择显示在每行每列的 portlet,如图 3 所示。

图 3. Pluto admin 应用程序 —— 定义页面布局

在此步骤中,使用门户应用程序中进行 portlet 定位的布局设置更新 pageregistry.xml。执行完此 步骤就完成了把门户应用程序部署到在 Geronimo 上运行的 Pluto 服务器中的任 务。

现在可以开始通过单击 buyticket 链接来测试和使用应用程序。图 4 将显示 已部署到 Pluto 服务器 中并且正在运行的 buyticket 应用程序。

图 4. buyticket 门户应用程序

结束语

Apache Pluto 是用于 JSR 168 兼容性测试的易于使用的小型门户测试环境。 门户服务器支持并未预 先集成到 Geronimo 中,但是任何门户服务器 —— 例如 Pluto、Jetspeed 或 Liferay —— 都可以作 为插件或外部应用程序安装到 Geronimo 中。即使您引入了重量级的 Jetspeed 或 Liferay 作为部署环 境,也只有 Pluto 能够满足轻量级开发和测试的要求。通过把 Pluto 和 Geronimo 集成到一起,您将获 得结合了开源门户服务器与应用服务器的精华的门户环境。

本文配套源码

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号