<project name="wasant" basedir="." default="installAndStart">
<!-- Important:本脚本要让 ant 使用 WAS 的 JRE 来执行
或者用 WAS_HOME/bin/ws_ant.bat 来执行,否则不能成功执行
有兴趣可去研究一下,让它在 SUN JRE 下也能成功执行
-->
<!--
修改 WAS_HOME/properties/wsadmin.properties 的
com.ibm.ws.scripting.connectionType=SOAP #可选RMI
com.ibm.ws.scripting.port=8879 #视协议和设置所对应端口,可能是 8880
com.ibm.ws.scripting.host=10.128.38.110 #要管理的WAS服务器IP
然后执行 WAS_HOME/bin/wsadmin.bat 就连接到了 10.128.38.110 的WAS上了
不过有些奇怪,WAS配置了安全性,但没有指定用户名和密码也行了
连上之后用 $AdminApp list 就能显示上面所有应用程序了
如果不配置 wsadmin.properties 文件,可以直接指定连接参数,如
wsadmin -conntype SOAP -host 10.128.38.110 -port 8879 -user xxxxxxx -password xxxxxx
wsadmin 中有四个对象可以在脚本中使用:
$AdminControl
$AdminConfig
$AdminApp
$Help
-->
<property name="was.root" value="D:\Program Files\IBM\WebSphere51\AppServer" />
<property name="wsanttasks.jar" value="${was.root}/lib/wsanttasks.jar"/>
<property name="app.name" value="test"/>
<property name="ear.file" value="c:/test.ear"/>
<!--登录信息-->
<property name="username" value="xxxxxx"/>
<property name="password" value="xxxxxx"/>
<property name="host" value="10.128.38.110"/>
<property name="port" value="8879"/>
<property name="conntype" value="SOAP"/>
<!-- WsAdmin 命令定义-->
<property name="startApp.sr3Serv1"
value="$AdminControl invoke [$AdminControl queryNames type=ApplicationManager,process=sr3Serv1,*] startApplication ${app.name}"/>
<property name="startApp.sr3Serv2"
value="$AdminControl invoke [$AdminControl queryNames type=ApplicationManager,process=sr3Serv2,*] startApplication ${app.name}"/>
<property name="stopApp.sr3Serv1"
value="$AdminControl invoke [$AdminControl queryNames type=ApplicationManager,process=sr3Serv1,*] stopApplication ${app.name}"/>
<property name="stopApp.sr3Serv2"
value="$AdminControl invoke [$AdminControl queryNames type=ApplicationManager,process=sr3Serv2,*] stopApplication ${app.name}"/>
<!--
启动应用服务器,加入了集群的服务器必须通过节点代理来启动,如
$AdminControl invoke [$AdminControl queryNames type=NodeAgent,node=sr3,*] launchProcess server1
$AdminControl invoke [$AdminControl queryNames type=NodeAgent,node=sr3,*] launchProcess sr3Serv1
如果是独立的 WAS 就简单些了,直接
$AdminControl startServer server1 启动
-->
<!--
停止应用服务器,无论有没加入集群,都可以不通过节点代理来停止,如
$AdminControl stopServer server1
$AdminControl stopServer sr3Serv1
节点下的应用服务器可通过节点代理来停止,但是 server1不能用这种方式
$AdminControl invoke [$AdminControl queryNames type=Server,node=sr3,name=sr3Serv1,*] stop {}
$AdminControl invoke [$AdminControl queryNames type=NodeAgent,node=sr3,*] launchProcess server1
-->
<taskdef name="wsStartServer" classname="com.ibm.websphere.ant.tasks.StartServer" classpath="${wsanttasks.jar}" />
<taskdef name="wsStopServer" classname="com.ibm.websphere.ant.tasks.StopServer" classpath="${wsanttasks.jar}" />
<taskdef name="wsInstallApp" classname="com.ibm.websphere.ant.tasks.InstallApplication" classpath="${wsanttasks.jar}" />
<taskdef name="wsUninstallApp" classname="com.ibm.websphere.ant.tasks.UninstallApplication" classpath="${wsanttasks.jar}" />
<taskdef name="wsStartApp" classname="com.ibm.websphere.ant.tasks.StartApplication" classpath="${wsanttasks.jar}" />
<taskdef name="wsStopApp" classname="com.ibm.websphere.ant.tasks.StopApplication" classpath="${wsanttasks.jar}" />
<taskdef name="wsListApps" classname="com.ibm.websphere.ant.tasks.ListApplications" classpath="${wsanttasks.jar}" />
<taskdef name="wsAdmin" classname="com.ibm.websphere.ant.tasks.WsAdmin" classpath="${wsanttasks.jar}" />
<!-- wsadmin 命令行下输入
llength [$AdminControl queryNames type=Application,name=hello_war,*]
运行的实例数,如果大于零表示正在运行,否则就是停止状态
-->
<!-- wsadmin 命令行下输入 $AdminApp list 的效果 -->
<target name="wsListApps" description="List All Applications">
<wsListApps conntype="SOAP" host="10.128.38.110" port="8879"
user="xxxxxx" password="xxxxxx" washome="${was.root}">
</wsListApps>
</target>
<!-- wsadmin 命令行下输入
$AdminApp install c:/test.ear {-cluster sr3Cluster -appname test -usedefaultbindings}
$AdminConfig save #不要忘记了,save一下,不然不生效
可以通过 $AdminApp options c:/test.ear 查看安装这个包可指定什么 options
-->
<target name="wsInstallApp" description="Install Application ${app.name}">
<wsInstallApp user="${username}" password="${password}" host="${host}"
ear="${ear.file}" port="${port}" conntype="${conntype}" washome="${was.root}"
options="-cluster sr3Cluster -appname ${app.name} -usedefaultbindings">
</wsInstallApp>
</target>
<!-- 卸载应用程序比较简单,只要
$AdminApp uninstall test
$AdminConfig save
-->
<target name="wsUninstallApp" description="Uninstall Application ${app.name}">
<wsUninstallApp user="${username}" password="${password}" host="${host}"
conntype="${conntype}" port="${port}" washome="${was.root}" application="${app.name}">
</wsUninstallApp>
</target>
<!--
启动应用,按照红皮书的介绍用$AdminControl invoke [$AdminControl queryNames type=ApplicationManager,node=sr3,*] startApplication test
无法启动应用程序,出现“无法创建 ObjectName”错误,必须在对所有所在服务器逐个的启动
$AdminControl invoke [$AdminControl queryNames type=ApplicationManager,process=server1,*] startApplication test
$AdminControl invoke [$AdminControl queryNames type=ApplicationManager,process=sr3Serv1,*] startApplication test
$AdminControl invoke [$AdminControl queryNames type=ApplicationManager,process=sr3Serv2,*] startApplication test
-->
<!--因为下面的脚本实质就是采用的
$AdminControl invoke [$AdminControl queryNames type=ApplicationManager,node=sr3,*] startApplication test
所以会报同样的错,“无法创建 ObjectName”错误,改用wsAdmin直接执行命令的方式来启动
<target name="wsStartApp" description="Start Application ${app.name}">
<wsStartApp user="${username}" password="${password}" host="${host}"
conntype="${conntype}" port="${port}" washome="${was.root}" application="${app.name}">
</wsStartApp>
</target>
-->
<!-- 采用 WsAdmin 直接执行命令的方式来启动应用程序 -->
<target name="wsStartApp" description="Start Application ${app.name}">
<echo>Start Application ${app.name} on sr3Serv1/sr3Serv2</echo>
<wsAdmin user="${username}" password="${password}" host="${host}"
conntype="${conntype}" port="${port}" washome="${was.root}"
command="${startApp.sr3Serv1};${startApp.sr3Serv2}">
</wsAdmin>
</target>
<!--
启动应用,按照红皮书的介绍用$AdminControl invoke [$AdminControl queryNames type=ApplicationManager,node=sr3,*] startApplication test
无法启动应用程序,出现“无法创建 ObjectName”错误,必须在对所有所在服务器逐个的启动
$AdminControl invoke [$AdminControl queryNames type=ApplicationManager,process=server1,*] stopApplication test
$AdminControl invoke [$AdminControl queryNames type=ApplicationManager,process=sr3Serv1,*] stopApplication test
$AdminControl invoke [$AdminControl queryNames type=ApplicationManager,process=sr3Serv2,*] stopApplication test
-->
<!--因为下面的脚本实质就是采用的
$AdminControl invoke [$AdminControl queryNames type=ApplicationManager,node=sr3,*] startApplication test
所以会报同样的错,“无法创建 ObjectName”错误,改用wsAdmin直接执行命令的方式来启动
<target name="wsStopApp" description="Stop Application ${app.name}">
<wsStopApp user="${username}" password="${password}" host="${host}"
conntype="${conntype}" port="${port}" washome="${was.root}" application="${app.name}">
</wsStopApp>
</target>
-->
<!-- 采用 WsAdmin 直接执行命令的方式来启动应用程序 -->
<target name="wsStopApp" description="Start Application ${app.name}">
<echo>Stop Application ${app.name} on sr3Serv1/sr3Serv2 </echo>
<wsAdmin user="${username}" password="${password}" host="${host}"
conntype="${conntype}" port="${port}" washome="${was.root}"
command="${stopApp.sr3Serv1};${stopApp.sr3Serv2}">
</wsAdmin>
</target>
<!-- 实际的任务组合 -->
<target name="installAndStart" description="Install and Start ${app.name}">
<antcall target="wsInstallApp"/>
<antcall target="wsStartApp"/>
</target>
<target name="stopAndUninstall" description="Stop and Uninstall ${app.name}">
<antcall target="wsStopApp"/>
<antcall target="wsUninstallApp"/>
</target>
</project>