如何使用WLST确定EAR是否已在WebLogic服务器中部署?
我正在尝试创建一个简单的Python脚本,用来把我的EAR文件部署到Weblogic的AdminServer上。我在网上和Oracle的文档中查找过,但找不到判断应用程序是否已经部署的方法。我希望我的脚本能先检查一下,如果已经部署过,就发出重新部署的命令;如果没有,就发出部署的命令。
我试着修改一些我找到的示例脚本,虽然它们能运行,但并没有按照我想要的方式工作。我想做的一件事是用cd命令检查我的EAR文件是否在WebLogic的部署文件夹里,如果在,就发出重新部署的命令;如果不在,就抛出一个异常,然后我再发出部署的命令。然而,每次我在脚本中使用cd命令时,都会抛出异常:
try:
print 'Checking for the existence of the ' + applicationName + ' application.....'
cd('C:\\Oracle\\Middleware\\user_projects\\domains\\base_domain\\config\\deployments\\MyTestEAR.ear\\')
print 'Redeploying....'
#Commands to redeploy....
except WLSTException:
#Commands to deploy
我在Windows上运行这个脚本,使用execfile("C:\MyTestDeployer.py")命令,并在使用WLST脚本工具设置了我的环境变量后执行。有没有什么建议?我也试着在cd命令中使用不同的路径,但都没有成功。还有什么想法吗?
3 个回答
在在线模式下,使用命令 listApplications()
可以列出当前在WebLogic域中部署的所有应用程序。
如果出现错误,这个命令会返回一个WLSTException。
示例:
wls:/mydomain/serverConfig> listApplications()
SamplesSearchWebApp
asyncServletEar
jspSimpleTagEar
ejb30
webservicesJwsSimpleEar
ejb20BeanMgedEar
xmlBeanEar
extServletAnnotationsEar
examplesWebApp
apache_xbean.jar
mainWebApp
jdbcRowSetsEar
来源:链接
我以前做过类似的事情,不过用的是不同的方法……
我使用了weblogic.Deployer这个接口,并加上-listapps这个选项,来列出已经部署到这个域里的应用程序和库。然后我会把这些和归档文件中生成的application.xml里的display-name元素进行比较。
我发现用普通的文件名来比较时,遇到的问题是归档文件的名字里包含了生成的日期。这就导致每次比较都是错误的。
所以我用display-name来统一部署的应用程序名称,之后再和一个新的归档文件进行比较,以便重新部署。
对我来说,这个方法有效:
print 'stopping and undeploying ...'
try:
stopApplication('WebApplication')
undeploy('WebApplication')
print 'Redeploying...'
except Exception:
print 'Deploy...'
deploy('WebApplication', '/home/saeed/project/test/WebApplication/dist/WebApplication.war')
startApplication('WebApplication2')