清单 3. 调用删除 JAAS 登录模块 – DeleteLoginModule.sh
01 $WAS_HOME/bin/wsadmin.sh
02 -conntype SOAP
03 -host 172.16.0.124
04 -username wasadmin -password passw0rd
05 -lang jython
06 -f DeleteLoginModule.py
清单 3 展示了如何通过 wsadmin 工具调用删除 JAAS 登录模块的方法。
第 1 行 $WAS_HOME/bin/wsadmin.sh 为 wsadmin 工具,用于管理 WAS 以及配置、应用程序部署和服务器运行时操作。
第 2 行指定使用的连接方式为 SOAP,连接方式可能的类型包含:SOAP、RMI 和 NONE。第3行指定目标 WAS 的主机名。第4行指定用来连接到远程 WAS 的用户名和密码。第5行指定脚本文件的语言采用 Jython 语言,可能的语言包括: Jacl 和 Jython 。第6行指定在目标 WAS 上要运行的脚本。
(注:第 1 行到第 6 行为一条完整的命令,此处为讲解方便分解成 6 行)
WAS 重启脚本
在更新(安装或删除) JAAS 登录模块之后,必须重新启动 WAS,以使更新生效。每个WAS 机器上都需要准备重启的脚本,该脚本在本地运行,控制指令通过 STAF/STAX 远程发起。 WAS重启脚本,如清单 4 所示。
清单 4. 重启WAS
[Windows Platform]
%WAS_HOME%\bin\stopServer.bat server1 -user wasadmin -password passw0rd
%WAS_HOME%\bin\startServer.bat server1
[Linux Platform]
$WAS_HOME/bin/stopServer.sh server1 -user wasadmin -password passw0rd
$WAS_HOME/bin/startServer.sh server1
清单4展示了如何重启 WAS。其中,stopServer.sh 用于停止 WAS。如果启用了全局安全,则需要设定连接 WAS 的用户名和密码。startServer.sh 用于启动 WAS。
在部署服务器上准备部署脚本
在每次测试之前,需要将 WAS 上部署的应用程序更新到最新的版本。为了保证最新版本的成功更新,我们首先要将旧版本的应用程序删除(如果存在的话),然后按照新版本的应用程序,最后启动新安装的应用程序。完整的过程如清单 5 所示。
清单 5. 部署应用程序 – UpdateApplication.py
01 import sys
02 # define uninstall application
03 def uninstallApp(appName):
04 try:
05 print '\nUninstall ' + appName + '...'
06 AdminApp.uninstall(appName)
07 AdminConfig.save()
08 except:
09 print sys.exc_type, sys.exc_value
10 print '[FAIL]'
11 else:
12 print '[OK]'
13 # define install application
14 def installApp(appName, earFileName):
15 try:
16 print '\nInstall ' + appName + ' (' + earFileName + ')...'
17 AdminApp.install(earFileName, ['-appname', appName])
18 AdminConfig.save()
19 except:
20 print sys.exc_type, sys.exc_value
21 print '[FAIL]'
22 else:
23 print '[OK]'
24 # define start application
25 def startApp(appName):
26 try:
27 print '\nStart ' + appName + '...'
28 appMgr = AdminControl.queryNames('type=ApplicationManager,process=server1,*')
29 AdminControl.invoke(appMgr, 'startApplication', appName)
30 AdminConfig.save()
31 except:
32 print sys.exc_type, sys.exc_value
33 print '[FAIL]'
34 else:
35 print '[OK]'
36 # parse command line arguments
37 argLen = len(sys.argv)
38 appName = ''
39 if argLen > 0:
40 appName = sys.argv[0]
41 earFileName = appName + '.ear'
42 if argLen > 1:
43 earFileName = sys.argv[1]
44 # update application
45 uninstallApp(appName)
46 installApp(appName, earFileName)
47 startApp(appName)
清单 5 展示了如何在 WAS 上重新部署应用程序。
其中,第 1 行导入了系统函数库 sys。
第 2-12 行定义了函数 uninstallApp,用于卸载已安装的应用程序。第 3 行是函数的声明,该函数包含一个参数 appName,即待卸载的应用程序名称。第 4、8、11 行是一个 try…except…else… 的异常处理模块,用于对卸载过程中发生的任何异常进行处理,并将异常信息返回给用户。第 6 行执行卸载操作,第 7 行保存卸载操作的更改。如果在卸载过程中发生异常,第 9 行将异常的类型和异常的信息显示给用户,第 10 行告知用户操作失败。反之,第 12 行告知用户操作成功。
第 13-23 行定义了函数 installApp,用于安装新的应用程序。第 14 行是函数的声明,该函数包含两个参数: appName 为待安装的应用程序名称, earFileName 为待安装的EAR包的文件名。第 17 行执行安装操作。其它代码与函数 uninstallApp 中的相应代码类似。
第 24-35 行定义了函数 startApp,用于启动应用程序。第 25 行是函数的声明,该函数包含一个参数 appName ,即待启动的应用程序名称。第 28 行获取 Application Manager 对象,第 29 行执行启动操作。其它代码与函数 uninstallApp 中的相应代码类似。
第 36-43 行解析命令行参数,第一个参数为应用程序名称,是必须的;第二个参数为应用程序EAR 包的名称,是可选的,如果省略,则在应用程序名称后加上 ’.ear’ 来代替。
第 44-47 行更新应用程序,首先删除现有的应用程序,然后按照新的应用程序,最后启动新安装的应用程序。
在我们的示例中,部署应用程序脚本是存放在一台 Linux 系统中,这台 Linux 系统称为部署服务器。我们要通过部署服务器上的 WAS 来更新环境中的其它系统上的 WAS 中的应用程序。这个调用过程是通过 wsadmin 工具来完成的,脚本和“调用删除 JAAS 登录模块”脚本类似,请参见清单 3,此处不再赘述。