我有一个设置,在一组 WebLogic 9.2 服务器中运行 Oracle BPEL Process Manager。我在另一台服务器上有一个发布管理系统,该系统使用 Ant 构建 BPEL 套件并将其部署到这些服务器中。Oracle 的建议是将套件明确部署到 BPEL PM 集群中的第一个节点,然后重新启动所有其他节点(而不是直接将套件部署到每个节点)。
我在 Ant 脚本中有以下任务来执行这组活动:
<wlserver host="${node.hostname}" port="${node.port}"
configFile="${user.home}/.ant/weblogic/config/${env}/${node.config}"
username="${bpel.cluster.user}" password="${bpel.cluster.password}"
action="reboot"/>
但是,此任务似乎想要启动本地服务器,然后向其发出“reboot”命令,而不是连接到远程实例并重新启动它。事实上,到目前为止,我发现的几乎每个示例似乎都假设我将在我的工作站上部署/配置/管理域,或者我将在配置域的同一台服务器上执行 Ant 脚本。这些我都不想。
有没有办法从 Ant 以编程方式管理远程 WebLogic 域?
答案1
您可以通过 wlserver ANT 任务远程重新启动 WebLogic 托管服务器,但此类请求必须通过域管理服务器完成。例如:
<wlserver
adminserverurl="t3://myadminhost:7001"
username="weblogicAdminUser"
password="weblogicPassword"
servername="MyManagedServer"
action="reboot"
noExit="true"/>
话虽如此,使用 ANT 任务重新启动托管服务器可能不可靠。我建议改用 Weblogic 脚本工具 (WLST)。
答案2
答案是肯定的。可能有更好的方法,但我的做法如下:
我的 Ant 设置使用 maverick-ssh 库打开到服务器的 ssh 连接(ssh 任务)。然后它将我们的部署(zip 和 war 文件)传输到服务器,然后执行使用 WLST 将其部署到“本地”服务器的 shell 脚本。
这是蚂蚁任务:
<target name="transfer-build" description="">
<property name="transfer.host" value="${deploy.host}"/>
<property name="transfer.user" value="${deploy.user}"/>
<property name="transfer.pass" value="${deploy.pass}"/>
<property name="transfer.cwd" value="${dir.war.tmp}"/>
<property name="transfer.conf" value="${file.conf_zip}"/>
<property name="transfer.war" value="${file.tds_war}"/>
<ssh host="${transfer.host}" username="${transfer.user}" password="${transfer.pass}" version="2">
<sftp action="put" remotedir="${dir.deploy}" verbose="false">
<fileset dir="${transfer.cwd}" >
<include name="${transfer.conf}"/>
<include name="${transfer.war}"/>
</fileset>
</sftp>
<exec cmd="~/deploy-build.sh ${transfer.conf} ${transfer.war}"/>
</ssh>
</target>
deploy-build.sh 脚本中的相关部分:
# issue the redeploy command
java weblogic.Deployer -adminurl t3://`hostname`:9000 -user weblogic -password weblogicadmin -name fooapp -deploy /path/to/weblogic/user_projects/domains/mydomain/fooapp.war
WLST 命令调用归功于一些 BEA 帮助文档,但我再也找不到它们了……