在IBM Portal6.1上自动发布主题、外观和Portlet

本文介绍如何使用 IBM 自带的 xmlaccess 工具实现 Portal 的主题、外观及 Portlet 的自动化部署。通过命令行调用 xmlaccess 并提供配置文件的方式,详细展示了部署过程中的关键步骤与注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主题、外观和Portlet开发好以后,一般都是从Portal的界面上,由管理员进行安装。但如果需要制作安装程序自动安装,就需要另一种方式了,这里使用IBM自带的xmlaccess工具来完成任务。该工具位于<profile_root>/PortalServer/bin中,例如C:\IBM\WebSphere\wp_profile\PortalServer\bin。另外在<portal_server_root>/bin下也能找到一个xmlaccess工具,具体差别我没有比较过。

 

完整的命令行示例:

xmlaccess.bat -in DeployPortlet.xml -user wpsadmin -password 123123 -out Out_ DeployPortlet.xml -url http://localhost:10040/wps/config

 

xmlaccess支持很多命令行参数,在命令提示符环境下,直接执行xmlaccess可以显示详细的帮助信息,这里我只介绍用到的几个:
-in:指定输入xml文件路径。需要让xmlaccess做的事情,在命令行里没法写,太多了,因此需要保存在一个专门的xml文件中,具体格式后面详细介绍。
-user:用户名。
-password:密码。
-out:输出文件名,如果没有,则xmlaccess会将结果直接输出到控制台。这个选项对于“发布”这种一次性工作没有多大用处,但对于后面要说到的页面迁移,则是必不可少的。
-url:门户网站配置 URL,缺省为http://localhost/wps/config

 

知道怎么运行xmlaccess之后,接下来就是要准备输入文件了。需要说明的是,xmlaccess只是负责将配置信息写入到Portal中,因此在运行xmlaccess之前,先要将主题和外观拷贝到对应目录中,并将Portlet的war文件拷贝到服务器上。

 

完整的输入文件示例:

<?xml version="1.0" encoding="UTF-8"?>
<request 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="PortalConfig_6.1.0.xsd"
    type="update" create-oids="true">
    <portal action="locate">
        <skin action="locate" domain="rel" objectid="noSkin" uniquename="wps.skin.noSkin"/>
        <skin action="locate" domain="rel" objectid="thinSkin" uniquename="wps.skin.thinSkin"/>
        <skin action="update" active="true" objectid="EKP_Html_skin" uniquename="landray.portal.skin.EKP_Html" resourceroot="EKP_Html">
            <localedata locale="zh">
                <title>EKP_夏</title>
                <description>EKP蓝色风格皮肤</description>
            </localedata>
        </skin>
        <theme action="update" active="true" defaultskinref="EKP_Html_skin" uniquename="landray.portal.theme.Portal_EKP_Blue" resourceroot="Portal_EKP_Blue">
            <localedata locale="zh">
                <title>EKP_夏</title>
            </localedata>
            <allowed-skin skin="EKP_Html_skin" update="set"/>
            <allowed-skin skin="noSkin" update="set"/>
            <allowed-skin skin="thinSkin" update="set"/>
        </theme>
        <web-app action="update" active="true" uid="com.landray.portal.portlet.navigation.EKPNavigationTreePortlet.webmod">
           <url>file:///$server_root$/installableApps/EKP_navigation_tree.war</url>
           <servlet action="update" active="true" objectid="EKPNavigationTreeServlet" referenceid="EKPNavigationTreePortlet.servlet"/>
           <portlet-app action="update" active="true" uid="com.landray.portal.portlet.navigation.EKPNavigationTreePortlet">
              <portlet action="update" active="true" objectid="EKPNavigationTreePortlet" name="EKPNavigationTreePortlet" servletref="EKPNavigationTreeServlet"/>
            </portlet-app>
        </web-app>
    </portal>
</request>

 

  • action属性,常用的取值有两个:locate和update。locate表示做一个定义,有点像写程序的时候定义变量;update表示更新,如果Portal中不存在该项目,则是新建,否则就是更新。
  • objectid属性,类似于变量名称,用于上下文的引用。
  • uniquename属性,这个要跟Portal中的“唯一名称”对应。Portal中每个页面、主题、外观、Portlet等,都可以指定一个唯一名称。

 

下面具体来看相关配置项

 

<skin action="locate" domain="rel" objectid="noSkin" uniquename="wps.skin.noSkin"/>

表明定义了一个外观对象,该外观对象通过唯一名称"wps.skin.noSkin"与Portal中IBM自带的“无外表”外观对应。因为下文中我们要发布的主题,需要使用到此外观,因此要在前面先定义好,然后通过objectid进行引用。

 

 skin节点定义了我们自己开发的一个外观。

<skin action="update" active="true" objectid="EKP_Html_skin" uniquename="landray.portal.skin.EKP_Html" resourceroot="EKP_Html">
    <localedata locale="zh">
        <title>EKP_夏</title>
        <description>EKP蓝色风格皮肤</description>
    </localedata>
</skin>
  • action="update" —— 要进行更新操作;
  • active="true" —— 设置为活动状态;
  • objectid="EKP_Html_skin" —— 定义名称为"EKP_Html_skin";
  • uniquename="landray.portal.skin.EKP_Html" —— 定义全局唯一名称为"landray.portal.skin.EKP_Html";
  • resourceroot="EKP_Html" —— 在外观目录下的目录名称。(外观目录为<profile_root>\installedApps\<节点名>\wps.ear\wps.war\skins\html例如:C:\IBM\WebSphere\wp_profile\installedApps\sam6a\wps.ear\wps.war\skins\html);
  • localedata —— 指定不同区域下该外观的名称和描述,这里只指定了中国地区。

theme节点定义了我们自己开发的一个主题。

<theme action="update" active="true" defaultskinref="EKP_Html_skin" uniquename="landray.portal.theme.Portal_EKP_Blue" resourceroot="Portal_EKP_Blue">
    <localedata locale="zh">
        <title>EKP_夏</title>
    </localedata>
    <allowed-skin skin="EKP_Html_skin" update="set"/>
    <allowed-skin skin="noSkin" update="set"/>
    <allowed-skin skin="thinSkin" update="set"/>
</theme>
  • action="update" —— 要进行更新操作;
  • active="true" —— 设置为活动状态;
  • defaultskinref="EKP_Html_skin" —— 该主题的缺省外观指定为"EKP_Html_skin",注意这里外观的名称与上面那个外观的objectid属性值一致,相当于引用变量时变量名要一致;
  • uniquename="landray.portal.theme.Portal_EKP_Blue" —— 指定唯一名称;
  • resourceroot="Portal_EKP_Blue" —— 指定该主题所在目录名称。(主题目录为<profile_root>\installedApps\<节点名>\wps.ear\wps.war\themes\html例如:C:\IBM\WebSphere\wp_profile\installedApps\sam6a\wps.ear\wps.war\themes\html);
  • localedata —— 指定不同区域下该外观的名称和描述,这里只指定了中国地区。
  • allowed-skin —— 指定在该主题中允许使用的外观,skin属性值与相应外观的objectid属性值一致。

web-app节点定义一个Portlet。这个节点的配置就比较容易出错了,一定要小心。

<web-app action="update" active="true" uid="com.landray.portal.portlet.navigation.EKPNavigationTreePortlet.webmod">
   <url>file:///$server_root$/installableApps/EKP_navigation_tree.war</url>
   <servlet action="update" active="true" objectid="EKPNavigationTreeServlet" referenceid="EKPNavigationTreePortlet.servlet"/>
   <portlet-app action="update" active="true" uid="com.landray.portal.portlet.navigation.EKPNavigationTreePortlet">
      <portlet action="update" active="true" objectid="EKPNavigationTreePortlet" name="EKPNavigationTreePortlet" servletref="EKPNavigationTreeServlet"/>
    </portlet-app>
</web-app>
  • action="update" —— 要进行更新操作;
  • active="true" —— 设置为活动状态;
  • uid —— 必须与下面portlet-app子节点的uid属性值匹配,规则是在portlet-app子节点的uid属性值后面加上“.webmod”,注意大小写!
  • url子节点定义了该Portlet的war文件位置,一般我们应该将其拷贝到<portal_server_root>/installableApps中,作为统一的Portlet安装程序备份。建议在打包Portlet时,给文件名加上固定的模块或者公司名简称前缀,便于查找。
  • servlet子节点值得注意的地方是referenceid属性,该属性值必须与portlet子节点的name属性匹配,规则是在portlet子节点的name属性值后面加上“.servlet”。
  • portlet-app子节点的uid属性值,必须与该Portlet的war包中的portlet.xml文件中portlet-app节点的id值相同。如果在portlet.xml文件中没有指定portlet-app节点的id值,则必须与war包的文件名一致。这也是一个经常出错的地方。
  • portlet子节点,name属性值必须与portlet.xml文件中portlet-name节点值相同;servletref属性值则要与上面的servlet节点的objectid属性值相同。

另外还要注意输入文件本身的编码,如果包含中文,最好使用系统缺省编码,否则可能会出现安装上去的主题和外观的名称是乱码的情况。

 

正常执行xmlaccess,成功的话,可以在输出文件或控制台中看到如下执行成功提示:
<status element="all" result="ok"/>

 

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在 IT 领域,文档格式转换是常见需求,尤其在处理多种文件类型时。本文将聚焦于利用 Java 技术栈,尤其是 Apache POI iTextPDF 库,实现 doc、xls(涵盖 Excel 2003 及 Excel 2007+)以及 txt、图片等格式文件向 PDF 的转换,并实现在线浏览功能。 先从 Apache POI 说起,它是一个强大的 Java 库,专注于处理 Microsoft Office 格式文件,比如 doc xls。Apache POI 提供了 HSSF XSSF 两个 API,其中 HSSF 用于读写老版本的 BIFF8 格式(Excel 97-2003),XSSF 则针对新的 XML 格式(Excel 2007+)。这两个 API 均具备读取写入工作表、单元格、公式、样式等功能。读取 Excel 文件时,可通过创建 HSSFWorkbook 或 XSSFWorkbook 对象来打开相应格式的文件,进而遍历工作簿中的每个 Sheet,获取行列数据。写入 Excel 文件时,创建新的 Workbook 对象,添加 Sheet、Row Cell,即可构建新 Excel 文件。 再看 iTextPDF,它是一个用于生成修改 PDF 文档的 Java 库,拥有丰富的 API。创建 PDF 文档时,借助 Document 对象,可定义页面尺寸、边距等属性来定制 PDF 外观。添加内容方面,可使用 Paragraph、List、Table 等元素将文本、列表表格加入 PDF,图片可通过 Image 类加载插入。iTextPDF 支持多种字体样式,可设置文本颜色、大小、样式等。此外,iTextPDF 的 TextRenderer 类能将 HTML
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值