作者:keyboardsun 轉載請標明出處,請尊重作者原創權利
Site:http://www.chinacsharp.net http://blog.csdn.net/keyboardsun
我們知道WAS,WPS的控制臺功能很強大,也同樣的很復雜,其實呢,這些控制太的操作我們都可以通過編寫jacl腳本實現,為什么要用腳本呢?呵呵,簡單的說方便管理吧,我舉個例子,大家就知道為什么要使用jacl腳本了。
我
們在做一個電信的投訴項目,里面涉及的流程,包括子流程一共有400多個,按照IBM的建議,一個EAR流程應用最多打20個流程,如果多的話,會影響性
能的,當然我們再按照我們的業務還要分類打包,那結果如何,我們打了40多個ear,這么多ear啊,呵呵,我們光是登陸某一臺機器的web控制臺,我們
一個一個發布,這要多久?呵呵,這需要半天,整整半天,當然我們的后臺的服務器是集群的,有7臺機器需要安裝呢。撇開這個不說,當我們某個應用需要更新的
時候,我們怎么辦?一個一個的控制臺登陸,然后一個一個的更新。這多麻煩啊,對于維護人員,壓力太大。
如果我們用jacl來解決這問題,那就簡單
多了,因為wsadmin支持遠程命令,可以通過SOAP登陸執行,也就是說,我們的ear在自己的windows里面,我們就可以通過遠程命令把程序安
裝我各個AIX系統的WPS,WAS里面,節省時間,而且容易控制,避免出錯。
本文我不打算詳細介紹jacl,本文側重于應用,根據一個需求,給出解決的辦法。
簡單的說,我們在WAS上安裝一個應用,jacl代碼如下:
puts "-------------------------------------------------------------------"
puts "—開始執行jacl代碼啦 --"
puts "-------------------------------------------------------------------"
#這是我們要發布的應用的存放路徑
set EARDIR /home/XXX.ear
#這是我們要發布的應用的名稱
set APPNAME APPNAME
set NODE [$AdminControl getNode]
#簡單的理解,取得當前的上下文
set APPMANAGER [$AdminControl queryNames type=ApplicationManager,node=$NODE,process=server1,*]
puts ""
puts "Stop Application $APPNAME"
puts ""
#停止應用
$AdminControl invoke $APPMANAGER stopApplication $APPNAME
puts ""
puts "Uninstall Application $APPNAME"
puts ""
#卸載應用
$AdminApp uninstall $APPNAME
puts ""
puts "Saving configuration"
puts ""
#保存修改
$AdminConfig save
puts "-----------------------------------------------------------------"
puts "-- Install EAR --"
puts "-----------------------------------------------------------------"
puts ""
puts "Install Application $APPNAME"
puts ""
#安裝應用
$AdminApp install $EARDIR {-appname $APPNAME}
puts ""
puts "Saving configuration"
puts ""
#保存修改
$AdminConfig save
puts ""
puts "Start Application $APPNAME"
puts ""
#啟動應用
$AdminControl invoke $APPMANAGER startApplication $APPNAME
以上的例子我們做的是更新一個應用,麻雀不大,東西不少。包括了停止,卸載,安裝,啟動應用。
有人會問,這個簡單,下面我來說不簡單的。在集群環境下該如何辦呢?需求如下。
現在我有一個cluster,名稱叫CLUSTER包括兩個節點NODE1,NODE2,每個節點對應兩個SERVER,分別為server1,server2我要把應用安裝在這樣的cluster上面改怎么辦呢?
呵呵,其實很簡單,安裝的口令是這樣的
$AdminApp install $EARDIR {-cluster CLUSTER}
這樣就可以了,安裝過后保存下就可以了,這里我們在后面加上一個參數 {-cluster CLUSTER} 這樣就會把這個安裝的應用更新到整個cluster了
$AdminConfig save
但是這里有個問題,什么問題呢,我安裝的時候可以一下子安裝到cluster,那么我停止呢?卸載呢?啟動呢?這里很遺憾,這里沒有這個功能。那我們該怎么辦呢?我們只能到每個server下面來停止了。比如我要停止一個叫TESTAPP的應用,代碼如下。
set APPMANAGER [$AdminControl queryNames type=ApplicationManager,node=NODE1,process=server1,*]
$AdminControl invoke $APPMANAGER stopApplication TESTAPP
set APPMANAGER [$AdminControl queryNames type=ApplicationManager,node=NODE1,process=server2,*]
$AdminControl invoke $APPMANAGER stopApplication TESTAPP
set APPMANAGER [$AdminControl queryNames type=ApplicationManager,node=NODE2,process=server1,*]
$AdminControl invoke $APPMANAGER stopApplication TESTAPP
set APPMANAGER [$AdminControl queryNames type=ApplicationManager,node=NODE2,process=server2,*]
$AdminControl invoke $APPMANAGER stopApplication TESTAPP
這樣要到各自的server下面停止就可以了,這樣這個應用就被停止了,卸載,啟動同樣。
下面還有一種情況,比如有好多臺服務器,不是集群,但是應用都一樣,我們如何在自己的電腦上面來解決這個問題呢?
比如有下面3臺機器
IP HOSTNAME
10.10.10.1 TEST1
10.10.10.2 TEST2
10.10.10.3 TEST3
應用在e:/test.ear
我要把應用安裝到這三臺機器上。呵呵,其實很簡單。
我們做一個bat文件,內容如下
F:
Cd F:"IBM"WebSphere"ID"602"runtimes"bi_v6"bin
wsadmin -conntype SOAP -host TEST1 -port 8879 -f test.jacl
wsadmin -conntype SOAP -host TEST2 -port 8879 -f test.jacl
wsadmin -conntype SOAP -host TEST2 -port 8879 -f test.jacl
test.jacl的代碼為:
$AdminApp install e:/test.ear
$AdminConfig save
這樣這個bat文件跑一下,三臺機器的應用就全部都安裝上了,當然啟動,停止如上。同樣的簡單。呵呵,如果每個服務器是集群的,那么加上{-cluster clustername}參數就可以了。