如何使用WLST确定EAR是否已在WebLogic服务器中部署?

3 投票
3 回答
3930 浏览
提问于 2025-04-17 00:36

我正在尝试创建一个简单的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 个回答

0

在在线模式下,使用命令 listApplications() 可以列出当前在WebLogic域中部署的所有应用程序。

如果出现错误,这个命令会返回一个WLSTException。

示例:

wls:/mydomain/serverConfig> listApplications() 
SamplesSearchWebApp
asyncServletEar
jspSimpleTagEar
ejb30
webservicesJwsSimpleEar
ejb20BeanMgedEar
xmlBeanEar
extServletAnnotationsEar
examplesWebApp
apache_xbean.jar
mainWebApp
jdbcRowSetsEar

来源:链接

2

我以前做过类似的事情,不过用的是不同的方法……

我使用了weblogic.Deployer这个接口,并加上-listapps这个选项,来列出已经部署到这个域里的应用程序和库。然后我会把这些和归档文件中生成的application.xml里的display-name元素进行比较。

我发现用普通的文件名来比较时,遇到的问题是归档文件的名字里包含了生成的日期。这就导致每次比较都是错误的。

所以我用display-name来统一部署的应用程序名称,之后再和一个新的归档文件进行比较,以便重新部署。

3

对我来说,这个方法有效:

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')

撰写回答