為 WebSphere Portal 開發 JACL 管理指令碼
如何執行 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 |
下面我們對以上命令中所使用的引數做出說明:
- -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 物件提供了 Portal 登入認證的介面。登入 WebSphere Portal 需要提供使用者名稱和密碼,通過 JACL 指令碼訪問 Portal 也同樣需要提供登入認證資訊,只有先登入成功之後才能對 Portal 中的各種物件進行操作,這是每個實現 Portal 管理的 JACL 指令碼首先必須要做的事情。
用文字編輯工具新建一個檔案 stock.jacl 並輸入如下內容:
清單 2 實現登入和退出 Portal
$Portal login |
這已經是一個可以被 wpscript.sh 呼叫的 JACL 指令碼了,只是簡單的登入 Portal 然後再退出。JACL 支援命令列引數,我們可以把 Portal 登入資訊通過命令列傳入,這樣 Portal 的使用者名稱或密碼變化後不用修改 JACL 指令碼。修改後的指令碼如下所示:
清單 3 從命令列接收登入 Portal 的使用者名稱和密碼
if { $argc != 2 } { puts "Syntax: wpscript. sample.jacl |
在後面的介紹中,將逐步擴充這個指令碼,使它完成管理功能。
除了登入驗證的介面外,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 方式進行瀏覽,如下圖所示:
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
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 物件提供了對 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。
# 找到 My Stock Portlet set pid [$Portlet find portlet cn "My_Stock"] |
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 |
在命令列下執行 wpscript.sh,如下圖所示:
圖 4. 指令碼執行結果
成功執行後,用管理員登入,結果如下所示:
圖 5. 管理員登入後的Portal頁面
用普通使用者登入訪問,在 Home 下看不到 Stock 頁面,如下所示:
圖 6. 普通使用者登入後的Portal頁面
本文對 Portal Scripting Interface 進行了簡要的介紹,WebSphere Portal Server 通過這些物件提供了強大的管理介面,使用者可以通過這些介面編寫出功能強大的管理指令碼。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14789789/viewspace-586927/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- WebSphere Portal 7.0的主題與皮膚部署方法Web
- IBM WebSphere Portal當機或效能低常見問題分析 及解決措施IBMWeb
- Portal開發與配置技巧集錦(一)
- Portal開發與配置技巧集錦(二)
- Portal開發與配置技巧集錦(三)
- 用現代 js 開發碼良指令碼JS指令碼
- 原始碼分析 @angular/cdk 之 Portal原始碼Angular
- Android開發之指令碼替換PackageNameAndroid指令碼Package
- 為什麼要有Shell指令碼註釋?linux系統開發基礎指令碼Linux
- 測試開發之自動化篇-Appium指令碼開發APP指令碼
- MQL5教程7 交易指令碼開發MQ指令碼
- Appium iOS 測試指令碼開發實戰APPiOS指令碼
- React Native開發中自動打包指令碼React Native指令碼
- 如何開發一個油猴(TamperMonkey)指令碼指令碼
- AE指令碼:顏色管理快速配色指令碼ColorBob-Macw指令碼ORBMac
- 【Excel】Excel 拆分以及批次匯入指令碼開發Excel指令碼
- Nifi元件指令碼開發—ExecuteScript 使用指南(三)Nifi元件指令碼
- Nifi元件指令碼開發—ExecuteScript 使用指南(一)Nifi元件指令碼
- systemd 編寫服務管理指令碼指令碼
- illustrator外掛--拼版功能開發--印前角線--js指令碼開發JS指令碼
- Python基於周立功ZCANPRO開發刷寫指令碼Python指令碼
- Flutter與已有iOS工程混合開發與指令碼配置FlutteriOS指令碼
- Vmware fusion cli(nogui) 虛擬機器linux無GUI介面管理指令碼,方便開發人員使用GUI虛擬機Linux指令碼
- portal掃碼登入重構----對外版本
- Flyway版本化管理資料庫指令碼資料庫指令碼
- Day1: 用Github管理Pipeline指令碼Github指令碼
- 平臺設計中的指令碼管理指令碼
- Jmeter 本身能錄製指令碼,為什麼還要用 Fiddler 生成指令碼?JMeter指令碼
- SharePoint Online 為Modern Page新增指令碼指令碼
- WebSphere配置https協議訪問WebHTTP協議
- websphere 受管節點問題Web
- WebSphere 叢集建立及故障排除Web
- 以太坊Solidity程式語言開發框架————10、外部指令碼Solid框架指令碼
- 為什麼說無程式碼開發比低程式碼開發更好?
- 在SAP雲平臺的API portal裡建立和管理APIAPI
- Rabbitmq 開機啟動指令碼MQ指令碼
- hyperf 服務管理指令碼 start、restart、stop、status指令碼REST
- 用於管理應用程式得shell指令碼指令碼
- InDesign外掛--常規功能開發--隨機填充--js指令碼開發--ID外掛隨機JS指令碼