使用命令幫助簡化管理指令碼

CloudSpace發表於2009-05-06

引言

在 IBM WebSphere Application Server V7 的開發過程中,可用性研究表明,命令幫助場景對使用者至關重要,強調了對指令碼的大量使用,並需要繼續提供高質量的指令碼工具和幫助。命令幫助是一種在 Jython 指令碼語言中提供 wsadmin 命令的功能,用於在 WebSphere Application Server 管理控制檯中執行各種操作。

命令幫助首先在 WebSphere Application Server V6.1 中使用,並對其提供了有限的支援,可以為大約 185 個任務提供命令。由於客戶請求和對該功能的大量積極好評,在 V7 中增加了支援的範圍和命令數量,支援數量提高到原來的四倍以上,可以支援 750 多個任務。

為使用者提供了四個用於管理 WebSphere Application Server 環境的 wsadmin 物件:AdminConfig、AdminTask、AdminApp 和 AdminControl。在使用命令幫助之前,負責編寫指令碼的管理員常常需要參考各種資源來準確地確定他們需要操作的專案的指令碼元件,其中包括適當的命令物件、語法和引數。在管理控制檯中實施命令幫助之後,您(作為管理員)只需通過使用者介面一次性完成任務,然後檢索並儲存生成的命令集。

為幫助您充分利用這些功能並從命令幫助中獲得最大的價值,本文將通過一些使用場景介紹命令幫助的一些基礎知識,還將介紹一些方便您開展工作的具體功能。

使用命令幫助

命令幫助提供三種搜尋命令的方法:

使用控制檯生成命令

第一種方法是命令幫助的最基本用法。您啟動管理控制檯,執行某項操作,並訪問命令幫助皮膚,其中顯示該操作的 wsadmin 命令。

例如,假設您希望建立一個新的業務級應用程式。作為該應用程式的一部分,首先需要將應用程式檔案匯入資產儲存庫。可以將資產視為構成業務級應用程式的構造塊;它表示物理二進位制檔案,並且是業務級應用程式體系結構中應用程式內容的最小管理單元。

要使用管理控制檯匯入資產,請按照下列步驟操作:

  1. 在左側的導航選單中展開 Applications 部分。
  2. 選擇 New Application,然後選擇 New Asset
  3. 指定檔案,完成所需的欄位,然後單擊 Next。圖 1 顯示了摘要皮膚。注意,命令幫助區域用紅色圓圈標明。

    圖 1. 管理控制檯中的命令幫助
    圖 1. 管理控制檯中的命令幫助

  4. 單擊 View administrative scripting command for last action 啟動命令幫助皮膚(圖 2)。此皮膚顯示了在 Jython 指令碼語言中提供的用於匯入資產的 wsadmin 指令碼命令。現在您可以直接複製命令並將其貼上到活動的 wsadmin 會話,或者貼上到一個檔案中以便以後修改和使用。當在 wsadmin 中執行這些命令時,請確保使用 Jython 從執行管理控制檯的概要的 /bin 目錄中啟動了 wsadmin,如:

    C:\IBM\WebSphere\AppServerGM\profiles\Dmgr01\bin> wsadmin -lang jython.



    圖 2. 命令幫助
    圖 2. 命令幫助

    圖 2 還顯示了命令幫助首選項:Enable command assistance notifications 和 Log command assistance commands。可以使用這些選項記錄命令的歷史記錄,這將在下幾節中詳細介紹。

使用日誌維護歷史記錄

命令幫助皮膚僅顯示在控制檯中執行的最後操作的命令。不過,您可以啟用日誌記錄選項,將生成的所有命令記錄在一個日誌檔案中。該檔案的名稱是 commandAssistanceJythonCommands_.log,並儲存在執行管理控制檯的概要的日誌目錄中,例如:

C:\IBM\WebSphere\AppServerGM\profiles\Dmgr01\logs\dmgr\commandAssistanceJythonCommands_phil.log.

命令幫助的日誌記錄可以在命令幫助皮膚(圖 2)中啟用,也可以在控制檯首選項(圖 3)中啟用。


圖 3. 控制檯首選項
圖 3. 控制檯首選項

我們還接著介紹業務級應用程式示例,假設您匯入一個或多個資產,新建一個空的業務級應用程式,然後向其新增資產或其他嵌入式業務級應用程式。清單 1 顯示了在日誌檔案中捕獲的、完成此任務所需的一些命令的示例。


清單 1. 命令幫助日誌檔案的示例內容

				
# [10/31/08 0:03:11:396 EST] Assets > Assets
AdminTask.importAsset('[-storageType FULL -source C:/IBM/WebSphere/AppServerGM/profiles/
Dmgr01/wstemp/null/upload/login.ear -AssetOptions [[login.ear login.ear defaultbinding.
virtual.host#defaultbinding.force "" "" "WebSphere:spec=Java EE ear" "" .*\.dll=755#.*\
.so=755#.*\.a=755#.*\.sl=755 false]]]')

# [10/31/08 0:04:01:489 EST] BLAManagement
AdminTask.listBLAs('[-includeDescription true ]')

# [10/31/08 0:04:45:146 EST] Business-level applications > New
AdminTask.createEmptyBLA('[-name DefaultApp_BLA -description "Sample BLA adding log-in 
capability to DefaultApplication." ]')

# [10/31/08 0:05:37:552 EST] Business-level applications > DefaultApp_BLA > Add
AdminTask.listAssets('[-includeDescription true -includeDeplUnit true -assetID login.
ear ]')

# [10/31/08 0:05:57:114 EST] Business-level applications > DefaultApp_BLA > Add
AdminApp.install('C:/IBM/WebSphere/AppServerGM/profiles/Dmgr01/logs/app2467.ear', '[  
-nopreCompileJSPs -distributeApp -nouseMetaDataFromBinary -nodeployejb -appname 
LoginApplication -createMBeansForResources -noreloadEnabled -nodeployws -validateinstall 
warn -noprocessEmbeddedConfig -filepermission .*\.dll=755#.*\.so=755#.*\.a=755#.*\.
sl=755 -noallowDispatchRemoteInclude -noallowServiceRemoteInclude -blaname WebSphere:
blaname=DefaultApp_BLA -asyncRequestDispatchType DISABLED -nouseAutoLink -MapWebModToVH 
[[ LoginWebApp login.war,WEB-INF/web.xml default_host ]]]' )

# [10/31/08 0:06:59:208 EST] Business-level applications > DefaultApp_BLA > Add
AdminTask.addCompUnit('[-blaID WebSphere:blaname=DefaultApp_BLA -cuSourceID WebSphere:
blaname=DefaultApplication -CUOptions [[WebSphere:blaname=DefaultApp_BLA WebSphere:
blaname=DefaultApplication DefaultApplication_0001 "" 1]]]')

# [10/31/08 0:08:26:442 EST] Adding asset to repository
AdminConfig.save()

# [10/31/08 0:09:41:708 EST] Business-level applications
AdminTask.startBLA('[-blaID WebSphere:blaname=DefaultApp_BLA ]')

應用程式部署是 WebSphere Application Server 使用者極為常見的任務,但是,由於業務級應用程式的概念(及其關聯的命令)在 V7 中是新增內容,因此能夠在數分鐘內生成此命令集足以證明命令幫助功能的價值和高效性。清單 1 中的命令幫助日誌檔案顯示了建立、儲存和啟動新的業務級應用程式所需的操作集。每個日誌條目的第一行都包含一個時間戳和在控制檯中生成命令的位置。此日誌檔案顯示:

  • 如何使用 AdminTask.importAsset 命令匯入資產。
  • 如何使用 AdminTask.createEmptyBLA 命令建立新應用程式。
  • 後續操作 AdminApp.install(新增 login.ear 資產)和 AdminTask.addCompUnit 用於構建業務級應用程式。
  • 其餘的兩個命令僅顯示如何保護和啟動新應用程式。

將命令傳送到指令碼工具

您還可以使用命令幫助通知自動儲存命令輸出。WebSphere Application Server 使用 Java Management Extensions (JMX) 通知將命令傳送到相容的 Jython 編輯器。

配置命令幫助通知

考慮到本文的目的,IBM Rational Application Developer for WebSphere Software 7.5 是本例中使用的 IDE。要將 Rational Application Developer 與管理控制檯一起使用,請執行以下操作:

  1. 您必須通過建立一個從工具的工作臺到伺服器的指標將應用伺服器與 IDE 工具關聯起來。如果對 WebSphere Application Server 概要啟用了管理安全性,則需要從 Rational Application Developer 向伺服器進行身份驗證。您必須對伺服器和工具提供相同的使用者名稱和密碼,因為此工具將僅從該經過身份驗證的控制檯使用者接收命令。
  2. 在 WebSphere Application Server 管理控制檯中,確保在命令幫助皮膚(圖 2)或控制檯首選項(圖 3)中選中了 Enable command assistance notifications 並應用了更改。
  3. 從 Rational Application Developer 的伺服器檢視中,啟動關聯伺服器的 WebSphere Administration Command Assist 視窗。
  4. 返回到 WebSphere Application Server 管理控制檯並執行相應任務。

在控制檯生成命令之後,它們將顯示在 Rational Application Developer 的 WebSphere Administration Command Assist 檢視中(圖 4)。在此檢視中顯示的命令可以插入任何 Jython 檔案的任何部分,只需將游標置於檔案中所需的位置,右鍵單擊該命令,並選擇 Insert 即可(圖 4)。


圖 4. Rational Application Developer 中的命令幫助視窗
圖 4. Rational Application Developer 中的命令幫助視窗  

使用帶變數的命令幫助

在整個管理控制檯中生成的命令可提供在環境中建立和操作專案的正確 wsadmin 物件型別、函式、語法、屬性和示例值。如果您是編寫 wsadmin 指令碼的新手,或者需要為新功能編寫指令碼,則上述功能對您開始工作提供有力幫助。

圖 4 中用於列出和修改埠的示例命令源自需要與每臺伺服器關聯的專案集清單(例如埠、應用程式、資源等等)的客戶。包含 70 多臺伺服器的環境絕對需要指令碼。為了向您介紹如何建立列出每臺伺服器的所有資源(如 JDBC 驅動程式)的指令碼,下面的步驟描述了為指令碼檔案生成命令的過程。儘管這是一個十分簡單的練習,但通過該練習可以瞭解如何將命令幫助建立的命令與 Jython 的基本功能合併在一起,以建立滿足特定需要的解決方案。

對於本例而言,您的需求是獲得列出所有 WebSphere Application Server 以及每臺伺服器的所有 JDBC 驅動程式的命令。本例的計算單元由一臺部署管理器和三臺伺服器構成。

在部署管理器的管理控制檯中:

  1. 導航到 Servers => Server Types => WebSphere application servers。皮膚的中央部分顯示了計算單元中此類伺服器的列表。
  2. 如果既未啟用命令幫助日誌記錄又未啟用通知,則請單擊 View administrative scripting command for last action 連結檢索、複製和儲存該命令。
  3. 將顯示以下命令:

    AdminTask.listServers('[-serverType APPLICATION_SERVER ]')

  4. 導航到 Resources => JDBC => JDBC providers。皮膚的中央部分顯示了計算單元中此類提供程式的列表。
  5. 將範圍更改為其中的一臺伺服器:

    Node=T60P-2007-CQ8Node03, Server=server1

  6. 如果既未記錄命令幫助又未啟用通知,則請單擊 View administrative scripting command for last action 連結檢索、複製和儲存該命令。
  7. 這時將顯示與以下內容類似的命令:

    AdminConfig.list('JDBCProvider', AdminConfig.getid( '/Cell:T60P- 2007-CQ8Cell01/Node:T60P-2007-CQ8Node03/Server:server1/'))

現在可以將這兩個命令與其他 Jython 程式碼合併在一起,以便為每臺伺服器生成所需 JDBC 提供程式的列表。要執行該指令碼,請使用以下指定的檔案選項和檔名啟動 wsadmin:

wsadmin -f c:\IBM\AppServer_list_jdbc.py.

清單 2 中顯示了示例指令碼。(注意:Jython 不使用行號,但本例中嚴格顯示行號是為了便於說明。)


清單 2. 合併命令和 Jython 指令碼語言的指令碼檔案內容

				
1  appServers = AdminTask.listServers('[-serverType APPLICATION_SERVER ]').splitlines()
2 
3  for appServ in appServers:   
4    print appServ
5    jdbc = AdminConfig.list('JDBCProvider', appServ) 
6    print jdbc

第 1 行使用一個字串函式 splitlines() 分隔伺服器列表,然後將這些值作為一個變數 appServers 進行儲存。在此列表中為每臺伺服器儲存的值是唯一標識。第 3-6 行迭代該列表,並輸出每臺伺服器的 ID(第 4 行),檢索該伺服器範圍內所有 JDBC 提供程式的列表(第 5 行),然後輸出每個提供程式的屬性和值(第 6 行)。請參見清單 3 瞭解示例輸出。注意,在第 5 行中,為了更加通用,對命令幫助生成的命令稍微進行了修改;無需檢索特定伺服器的 ID,現在可以為其提供 appServ 變數擁有的任何值。


清單 3. 指令碼檔案的部分輸出

				
server3(cells/T60P-2007-CQ8Cell01/nodes/T60P-2007-CQ8Node03/servers/server3|server.xml)
"Derby JDBC Provider (XA)(cells/T60P-2007-CQ8Cell01/nodes/T60P-2007-CQ8Node03/servers/
	server3|resources.xml#builtin_jdbcprovider)"
[classpath ${DERBY_JDBC_DRIVER_PATH}/derby.jar]
[description "Built-in Derby JDBC Provider (XA)"]
[implementationClassName org.apache.derby.jdbc.EmbeddedXADataSource]
[isolatedClassLoader false]
[name "Derby JDBC Provider (XA)"]
[nativepath []]
[providerType "Derby JDBC Provider (XA)"]
[xa true]
server1(cells/T60P-2007-CQ8Cell01/nodes/T60P-2007-CQ8Node03/servers/server1|server.xml)
		...

可以根據需要使用其他 wsadmin 命令(如 AdminConfig.showall())或 Jython 的其他各種功能和函式(如字串操作函式)來檢索、修改或格式化命令幫助的輸出。

總結

本文的目的是為了提高對命令幫助功能的認識,命令幫助是 WebSphere Application Server 中的一種 Jython 指令碼幫助工具,本文還提供了一些演示內建和外部解決方案的示例,以幫助您滿足管理需要。

管理大型環境和經常執行重複任務的人員會大量使用指令碼。四種 wsadmin 命令物件的語法、函式和命名約定之間沒有大量的一致性。準確地確定命令來完成所需的操作以及為 wsadmin 構建指令碼有時是一種極具挑戰性和非常耗時的任務,特別是對進行中級指令碼開發的新手而言更是如此。命令幫助顯著地簡化了此過程同時提高了開發效率。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14789789/viewspace-594329/,如需轉載,請註明出處,否則將追究法律責任。

相關文章