服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

用导航组件来构建动态 portal 菜单


  简介:gridsphere 门户框架
  在上一年,基于 portlet 的门户已成为门户服务器平台的最令人兴奋的领域之一。java specification request (jsr)168(即 portlet api)的出现将允许门户供应商提供公共编程模型,该模型允许开发人员更快地将新功能插入到门户服务器中,消费者可以轻松地使用这些功能。现在,许多门户供应商支持 portlet,包括 ibm websphere、sun one portal server、oracle 9ias 和 jakarta jetspeed 项目。
  
  gridsphere 门户 提供一个基于 portlet 的高级开放源代码门户。gridsphere 是在欧盟提供基金的 gridlab 项目 下开发的,提供了一个非常复杂的门户,该门户为各种终端用户提供高度定制的环境。portlet 模型向用户提供了一个灵活易用的接口,并向门户开发人员提供了一个模型,用于创建可插入的和动态的应用程序支持。下面简要列出核心的 gridsphere 特性:
  
  portlet api 的实现与 ibm websphere portal server 4.2 或更高版本紧密兼容。
  易于开发并易于与插入到 gridsphere portlet 容器中的“第三方 portlet”集成。
  级别更高的模型,用于使用可视的 bean 和 gridsphere user interface (ui) 标签库构建复杂的 portlet。
  灵活的基于 xml 的门户表示描述,可以轻松对其进行修改来创建自定义的门户布局。
  对基于角色的访问控制(role based access control,rbac)提供内置的支持,rbac 将用户分为 guest、user、admin 和 super user。
  复杂的服务模型,允许创建“用户服务”,可以按照用户权限限制服务方法。
  通过 hibernate for rdbms 数据库支持提供数据的持久性。
  为 portlet 服务的服务端测试集成了 junit/cactus 单位测试,包括生成测试报告。
  gridsphere 核心 portlet 提供基本功能,包括登录、注销、用户和访问控制管理。
  由于 gridsphere portlet api 几乎与 websphere portlet api 完全相同,所以您应该多看看 developerworks 文章,这些文章在 参考资料 和 ibm websphere portal zone 中列出。在理论上,使用 ibm websphere portal server 开发本文中的示例 portlet 应该不难。gridsphere api 与 jsr portlet api 1.0 最后的规范非常类似,gridsphere 的将来版本是符合 jsr 168 的。
  
  gridsphere 项目
  gridsphere web 站点提供关于开发 portlet 的附加文档、有关使用 gridsphere 的信息和其他资源的集合。要获得这些信息,请加入 gridsphere 邮件列表中。
  
  当前的 gridsphere 版本提供了一个门户、一个 portlet 容器和一组有用的核心 portlet,包括用户和组管理以及布局定制和 portlet 订阅。
  
  安装 gridsphere
  从 http://www.gridsphere.org 下载最新的 gridsphere 版本并按照指示安装该门户。前提条件是您必须在系统中安装了 java 技术 ant 和 tomcat 4.1.x servlet 容器。安装了 gridsphere 后,可以只启动 tomcat,然后在 web 浏览器中,单击 http://127.0.0.1:8080/gridsphere/gridsphere 查看该门户。初始配置允许您以“root”身份登录,而且不用输入口令。登录后,转至 administration->users 选项卡,单击 root 用户来编辑配置文件。更改口令和其他设置,包括您的登录名和电子邮件地址。登录后,您就成为 gridsphere 门户管理员。
  
  图 1. gridsphere 用户管理器 portlet
  
 用导航组件来构建动态 portal 菜单(图一)

  网格服务简介
  在提供对用户的虚拟组织(virtual organization,vo)内的计算资源和数据资源的安全统一访问方面,门户正变得越来越复杂,所以网格 portlet 必须依靠某种类型的中间件来执行这些操作。开放网格服务基础设施(open grid services infrastructure,ogsi)规定如何创建网格服务,而 ogsi 是整体开放网格服务体系结构(open grid services architecture,ogsa)的一部分。globus toolkit 3.0 (gt3) 提供了 ogsi 的 java 参考实现。gt3 提供了强制性网格服务特性,如服务调用、生存期管理、服务数据接口、依赖底层公钥基础设施(public key infrastructure,pki)的安全接口。网格服务扩展了 web 服务,因此在实际中,编程模型很相似。
  
  简而言之,使用 gt3 创建网格服务的步骤如下所示:
  
  创建定义服务接口的 wsdl 接口。可以采用工具转换采用 java 或 c 语言编写现有接口以生成 wsdl。
  使用 gt3 工具从 wsdl 服务器接口生成客户机和服务器存根(stub)。
  填写服务器骨架(skeleton)实现代码。
  配置服务部署描述符并部署服务到宿主容器。
  幸运的是,gt3 与一组供我们使用的示例服务绑定在一起。因此,我们将集中讨论使用现有服务和现有的客户机存根代码来访问服务。 幸运的是,您下载的 tomcat 服务器还可以充当 ogsi 网格服务宿主环境,允许 gridsphere 门户框架和 ogsa gt3 示例服务一起运行。
  
  下一节准备开发示例 portlet,您应从 globus web site 下载最新的 gt3 版本。要构建示例并部署到 tomcat 容器中,请发出下列命令,其中 $catalina_home 设置为下载 tomcat 的位置。
  
   %> ant
   %> ant samples
   %> ant -dtomcat.dir=$catalina_home deploytomcat
  
  现在,由于示例 portlet 需要一些 gt3 类,所以需要将 ogsa web 应用程序的库复制到 portlet 可以找到的 tomcat 共享库目录。
  
   %> cp $catalina_home/webapps/ogsa/web-inf/lib/*.jar $catalina_home/shared/lib/
  
  根据 gt3 user's guide(请参阅“参考资料”),最后一步是将下列条目添加到 $catalina_home/conf/web.xml 中,配置 tomcat 以接受 wsdl、gwsdl 和 xsd 文件扩展名:
  
  <mime-mapping>
    <extension>gwsdl</extension>
    <mime-type>text/xml</mime-type>
  </mime-mapping>
  <mime-mapping>
    <extension>wsdl</extension>
    <mime-type>text/xml</mime-type>
  </mime-mapping>
  <mime-mapping>
    <extension>xsd</extension>
    <mime-type>text/xml</mime-type>
  </mime-mapping>
  
  编写网格计数器服务 portlet
  在网格 portlet 示例中,我们使用 globus toolkit 提供的示例 ogsi 计数器服务编写一个简单的加减数字的 portlet。计数器服务表示为 counterporttype,它是基 gridservice 接口的子类,有三个方法,如下面的图 2 所示:
  
  图 2. 计数器服务的 uml 图
  
 用导航组件来构建动态 portal 菜单(图二)

  add(int a) 和 subtract(int b) 方法添加或减去提供的值并返回新值。getvalue() 方法只返回静态计数器值的当前结果。
  
  1. 编写 portlet
  在计数器 portlet 示例中,用户可以输入整数值,然后单击 "add" 或 "subtract" 按钮加上或减去计数器服务的值,并显示已更新的计数器值。
  
  当第一次实例化 portlet 时,init() 方法被调用,向该 portlet 提供由任何后续 portlet 请求使用的所有必需的初始信息或配置信息。portlet 编程模型将表示(portlet 的呈现)和逻辑(当某个动作发生时必须执行的操作)分为不同的 portlet 方法。portlet 容器负责调用 doview() 呈现方法来显示 portlet,并在 portlet 收到事件(如按钮单击或表单提交)时,负责调用 actionperformed() 方法。portlet 可以向用户提供几种模式,包括 edit、configure 或 help,从而向用户提供特定模式的接口。portlet 必须提供适当的呈现方法,如 doedit 用于支持编辑模式。对于熟悉 servlet 的人员而言,portlet 开发非常相似,只是 servlet 的 doget 或 dopost() 方法由 actionperformed() 和 doxxx() portlet 方法取代。portlet 编程和 servlet 编程的另一个显著差别在于 portletresponse、portletconfig 和 portletcontext 类的使用,这些类在现有的由 java servlet api 提供的 httpservletrequest、httpservletresponse、servletconfig 和 servletcontext 类的基础上装饰(也就是提供)了附加的功能。
  
  最终的 portlet 如下所示:
  
  清单 1. 计数器服务 portlet
  
  public class gridcounterportlet extends abstractportlet {
  
  public static final string view_jsp = "/jsp/ogsa/counter/view_counter.jsp";
  
  // create a url for the counter service
  private static final string counterurl =
  "http://127.0.0.1:8080/ogsa/services/samples/counter/basic/counterfactoryservice";
  
  private locatortype locator = null;
  private counterporttype counter = null;
  
  public void init(portletconfig config) throws unavailableexception {
  super.init(config);
  try {
   // create a grid service handle from the service url
   url gsh = new url(counterurl);
  
   // get a reference to the counterservice factory
   ogsiservicegridlocator gridlocator = new ogsiservicegridlocator();
   factory factory = gridlocator.getfactoryport(gsh);
   gridservicefactory counterfactory = new gridservicefactory(factory);
  
   // create a new counterservice instance and get a refe

扫描关注微信公众号