ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 为 WebSphere Portal 开发 JACL 管理脚本

为 WebSphere Portal 开发 JACL 管理脚本

原创 Linux操作系统 作者:CloudSpace 时间:2009-04-09 18:27:28 0 删除 编辑

如何运行 Portal Scripting Interface

Portal Scripting Interface 是 WebSphere Portal Server 提供的基于 JACL 的管理程序。在 WPS_HOME/bin 下有一个脚本程序 wpscript.bat(非 windows 平台对应于 wpscript.sh),它就是 WebSphere Portal 的脚本管理接口。wpscript.bat 需要在命令行下运行,有两种方式使用 Portal Scripting Interface:

  • 交互方式:在命令行下一边输入 JACL 脚本一边解释运行,比较适用于一些简单的和一次性的操作;
  • 提交脚本方式:事先编写好 JACL 脚本,然后将 JACL 脚本文件名作为命令行的参数传入执行,适用于复杂操作和需要重复执行的操作。

wpscript.bat 调用方式如下所示:


清单 1 运行Portal Scripting Interface
wpscript.bat –conntype  -port  -user  
-password  -f 

下面我们对以上命令中所使用的参数做出说明:

  • -conntype:连接方式,可选参数,默认为 SOAP;
  • -port: 连接端口,对应于 wpconfig.properties 中的 WpsSoapPort 属性值;
  • -user 和 -password:用于创建连接的用户名和密码;
  • -f:JACL 文件的路径名,如果通过交互方式,省略这个参数。

打开 wpscript.bat,可以看到它的内容很简单,传入一些参数调用 wsadmin。wsadmin 是 WebSphere Application Server 的脚本管理接口,支持 JACL 和 Perl 脚本。wpscript.bat 是对 wsadmin 的扩展,传入 Portal 管理对象,在 JACL 脚本里通过对 Portal 管理对象的方法调用实现对 WebSphere Portal Server 的管理。

PSI 为用户提供了如下几个 Portal 管理对象:

  • Portal:Portal 登录接口
  • Content:内容组织管理接口
  • Layout:页面布局接口
  • Portlet:Portlet 管理接口
  • Look:Portal 外观主题管理接口
  • Access 和 PacList:这两个对象一起实现对 Portal 的 ACL 控制

本文不是 Portal Scripting Interface 的参考手册,因此只对示例中用到的对象和方法进行介绍。其他对象和方法可参考WebSphere Portal 信息中心,或者在 wpscript.bat 中使用 help 方法。


Portal Bean-在 JACL 中登录 Portal

Portal 对象提供了 Portal 登录认证的接口。登录 WebSphere Portal 需要提供用户名和密码,通过 JACL 脚本访问 Portal 也同样需要提供登录认证信息,只有先登录成功之后才能对 Portal 中的各种对象进行操作,这是每个实现 Portal 管理的 JACL 脚本首先必须要做的事情。

用文本编辑工具新建一个文件 stock.jacl 并输入如下内容:


清单 2 实现登录和退出 Portal
$Portal login  
$Portal logout

这已经是一个可以被 wpscript.sh 调用的 JACL 脚本了,只是简单的登录 Portal 然后再退出。JACL 支持命令行参数,我们可以把 Portal 登录信息通过命令行传入,这样 Portal 的用户名或密码变化后不用修改 JACL 脚本。修改后的脚本如下所示:


清单 3 从命令行接收登录 Portal 的用户名和密码
if { $argc != 2 }  {
    puts "Syntax: wpscript. sample.jacl  ."
exit
}

set user [lindex $argv 0]
set pwd [lindex $argv 1]

$Portal login $user $pwd
$Portal logout

在后面的介绍中,将逐步扩充这个脚本,使它完成管理功能。

除了登录验证的接口外,Portal 对象还提供了 Virtual Portal 选择的接口,如下所示:

$Portal setvp

通过这个方法用户可以指定要登录哪个 Virtual Portal。

Content Bean-管理 Portal 内容(页面,标签和 URL)

Content 对象负责 Portal 内容的管理,这里的内容指页面、标签和 URL。通过 Content 对象我们可以遍历 Portal 中的所有页面、标签和URL。定位到操作的页面后,还可以通过Content对象对页面进行创建、删除和修改等操作。比如,要在实现在某个页面上部署一个 Portlet,就必须先通过这个接口定位要部署 Portlet 的页面。

在使用这个对象前,我们必须先弄清楚 Portal 中的内容是如何的管理的。在 WebSphere Portal 中,内容被组织成树状结构,并以一个不存在的虚节点 root 为根。每一个页面、标签和 URL 都是树中的一个节点。每个节点都有一个全局唯一的标志,通过遍历和查找,可以访问内容树中的每一个节点。Portal 的内容组织可以通过 Web 方式进行浏览,如下图所示:


图 1 WebSphere Portal 内容组织结构

Content 对象提供的方法可分为以下几类:

  • 遍历和搜索:快速准确的定位到要指定的节点;
  • 属性:获取和设置节点的属性,如uniquename,commonname,language等;
  • 生命周期:节点的创建,删除等;
  • 组织结构:节点在整个组织树中的位置变更。

本文将结合例子只讲述搜索和生命周期管理的方法,其他可参考WebSphere Portal 信息中心

搜索

在脚本中通常要对某些指定的节点进行操作,之前必须找到并选定这个节点。每个节点都由全局唯一的 uniquename 标志的。脚本接口提供了如下两类查询方式:

$Content search

search方法是返回所有符合条件的节点列表。

$Content find

find 是返回唯一一个符合条件的节点,如果符合条件的节点多于一个或者不存在,find 调用将失败。

type 是查询类型,可以是 page,label,url 等,或者不带 type 参数,返回符合条件的任意类型的节点。

By 是查询标准,下面是一些常用的查询标准。

  • id:全局唯一标志;
  • uniquename:全局唯一名称;
  • commonnameis: 节点的通用名称;
  • commonnamehas: 节点通用名称中含有特定字符串。

通过调用 $Content help search-types 可以获取查询标准列表。

此示例中我们要在 My Work 目录下创建页面,因此必须先找到 My Work 节点,如下所示:

$Content find label uniquenane "wps.My Portal.My Work" select

在最后加上 select 方法表示查找到这个节点后并选中这个节点,以后所有的操作都是针对这个节点。

Content 提供的搜索是针对事先指定的节点以及它的子节点树的,如果事先没有选中哪个节点,将从虚节点 root 开始搜索。

生命周期管理

Content 提供了创建和删除节点的方法。

创建节点:

$Content create

type 可以是 page,label,externalurl,分别表示创建页面、标签和 url。在 create 调用中还可以加上 public,private 等标志,表示创建的页面是公共的还是私有等。

以父节点页面为模板创建新页面:

$Content derive from

name 是新页面的名称,id 是父节点的 ID 值,只有父节点是共享的页面时才可以调用。

删除节点:

$Content delect

继续扩充 stock.jacl,在 Home 下创建一个标题为 Stock 的新页面。


清单 4 在 Home 下创建名为 Stock 的新页面并选定

# 找到并选中Home,新页面的父节点将是Home。
$Content find label uniquename " ibm.portal.Home " select

# 创建标题为Stock的页面并选中
set thePage [$Content create page "Stock" html public]
$Content select $thePage


Portlet Bean-操作 Portlet

Portlet 对象提供了对 WebSphere Portal 中部署的 Portlet 的控制,它提供了对 Portlet 部署的层次结构的访问。通过 JACL 脚本访问某个 Portlet,必须先通过 Portlet 对象进行定位,然后才能进行相应的操作。

在 Portal Scripting Interface 中所有的 Portlet 也是以树状结构组织的,但与 Content 不同,Portlet 组织树有特定的结构。

  • Portlet 组织树也以一个不存在的 root 节点为根;
  • 它的所有子节点是 web module,对应于 Portlet 所在的 war 包;
  • 第二层是 application,对应于 war 中所包含的 portlet application;
  • 第三层是 portlet,对应于 application中所包含的所有 portlet。
  • 每个 web module 节点的结构同 portlet.xml 中的组织结构一致。

对于 Portlet 组织树结构,是在 Portlet 打包时决定的,不能通过 Portlet 对象进行修改。

Portlet 对象提供了两类方法,搜索遍历和属性操作,具体的方法调用同 content 对象类似。Portlet 查询支持这些类型:webmodule,application,portlet,concrete(portlet或application),abstract,all 或 any。具体的查询标准可以参考 $Portlet help search-criteria 的输出。

继续扩充我们的例子,我们要通过 Portlet 对象搜索到 My Stock Portlet。


清单 5 查找 My Stock Portlet

# 找到 My Stock Portlet
set pid [$Portlet find portlet cn "My_Stock"]

Layout Bean-实现 Portal 页面布局

Layout 对象提供了页面布局管理的接口。我们知道 Portal 里的页面是用来放置 Portlet 的,页面可以划分成多个区域,每个区域上放置一个 Portlet,Layout 对象正是提供了对应的管理接口,允许用户控制页面的区域划分和每个区域中部署的 Portlet。

要使用 Layout 对象,必须先通过 Content 对象选中某个页面,然后Layout对象才能生效并指向该页面,当 dselect 该节点后 Layout 对象就不可用了。

我们先来看看 portal 中对页面布局的管理,页面的布局中只允许两种类型的组件存在,container 和 control。

  • Container 里可以包含 container 和 control,与 html 中的 table 概念类似,相当于行和列,在 $Layout 中可以创建水平或垂直 container。
  • Control 是叶子节点,对应于 portlet。

下面是一个含有两个 portlet 的页面的布局结构。


图 2. 页面布局结构

Layout 对象提供了三类方法调用,

  • 搜索和遍历,同 Content 类似,支持 container,control 和 all or any 查询标准;
  • 属性操作,具体参考 Info Center;
  • 生命周期管理,container 或 control 的创建和删除。

创建一个container:

$Layout create container

创建一个control:

$Layout create control

回到本文的例子,我们在页面上部署一个 Portlet。参照上面的例子,只需要在页面中创建一个 container,并在该 container 中创建一个 control,结构如下图所示:


图 3. 页面 Stock 布局结构


清单 6 在页面 Stock 上部署 My Stock Portlet
$Layout create container horizontal select
$Layout create control $pid

其中,$pid 是 My Stock Portlet 的 id。


Access Bean 和 PacList Bean-控制 Portal 对象 ACL

WebSphere Portal 提供了完备的权限管理,其中的每个对象(页面、Portlet 等)都有自己的访问控制列表,可以对每个对象单独设置哪些用户进行访问。Access 和 PacList 这两个对象提供了对 Portal 中这套完备的权限管理体系的访问接口。通过这两个对象提供的接口,用户在 JACL 脚本中,可以对任何一个可以被访问到的 Portal 对象(页面、Portlet 等)进行访问控制列表的设置。

访问权限控制对 Content 和 Portlet 有效,在做相应操作前必须先选中 Content 节点或者 Portlet。

Access 对象用于读写控制对象,在读出控制对象后由 PacList 对象进行操作,最后再由 Access 对象写入。基本步骤如下所示:

1. 通过 Access 对象获取指定对象的访问权限对象并载入 PacList 对象。

set acl [$Access getacl Content [$Content current]]

$PacList view acl 或 $PacList edit acl

2. 通过 PacList 提供的方法对访问权限对象进行操作,如 grant,block,unblock 等。

3. 通过 Access 对象将访问权限对象写回。

$Access setacl $acl

在本文的例子,普通用户不能访问页面 Stock,如下所示:


清单 7 设置页面 Stock 的访问控制
set acl [$Access getacl Content [$Content current]]
$PacList block User propagation
$PacList block User inheritance
$PacList block PrivilegedUser propagation
$PacList block PrivilegedUser inheritance
$Access setacl $acl






完整的脚本代码

至此对 Portal Scripting Interface 提供的管理对象介绍完毕,下面是本文例子的完整脚本,在 WebSphere Portal Server V6.0 中调试通过。


清单 8 完整的stock.jacl
# stock.jacl
if { $argc != 2 }  {
    puts "Syntax: wpscript. stock.jacl  ."
exit
}

set user [lindex $argv 0]
set pwd [lindex $argv 1]

$Portal login $user $pwd

# 找到并选中Home,新页面的父节点将是Home。
$Content find label uniquename "ibm.portal.Home" select

# 创建标题为Stock的页面并选中
set thePage [$Content create page "Stock" html public]
$Content select $thePage 

# 找到My Stock Portlet
set pid [$Portlet find portlet cn "My_Stock"]

# 在页面上部署My Stock Portlet
$Layout create container horizontal select
$Layout create control $pid

# 设置访问权限,普通用户不能访问该页
set acl [$Access getacl Content [$Content current]]
$PacList block User propagation
$PacList block User inheritance
$PacList block PrivilegedUser propagation
$PacList block PrivilegedUser inheritance
$Access setacl $acl

puts "The deployment of My Stock portlet succeeded."

$Portal logout






运行和结果

在命令行下运行 wpscript.sh,如下图所示:


图 4. 脚本运行结果

成功运行后,用管理员登录,结果如下所示:


图 5. 管理员登录后的Portal页面

用普通用户登录访问,在 Home 下看不到 Stock 页面,如下所示:


图 6. 普通用户登录后的Portal页面







结束语

本文对 Portal Scripting Interface 进行了简要的介绍,WebSphere Portal Server 通过这些对象提供了强大的管理接口,用户可以通过这些接口编写出功能强大的管理脚本。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14789789/viewspace-586927/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-07-08

  • 博文量
    355
  • 访问量
    858876