本文介绍了<BEA-050001>WLContext.close() 在与创建它的线程不同的线程中被调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经编写了 wlst 脚本来递归地完成以下任务

I have written wlst script to achieve the below tasks recursively

  • 停止应用程序
  • 取消部署应用程序
  • 部署应用程序

当我执行脚本时,只有 1 个应用程序会发生取消部署或部署.对于其他应用程序,它失败并显示以下错误消息.你能帮我解决这个问题吗?

When ever i execute the script, Either undeploy or Deploy happens only for 1 application. For other applications it fails with below error message.Can you please help me to fix the issue?

File "<iostream>", line 1116, in domainConfig
  File "<iostream>", line 1848, in raiseWLSTException
WLSTException: Error cding to the MBean
<Feb 20, 2014 11:28:44 AM IST> <Warning> <JNDI> <BEA-050001> <WLContext.close() was called in a different thread than the one in which it was created.>

WLST 脚本我写了什么

WLST Script what i have written

import sys
import os
import getopt
#========================
#Usage Section
#========================
def usage():
    print "Usage:"
    print "java weblogic.WLST manageApplication.py -u username -p password -a adminUrl [<hostname>:<port>] -t deploymentTarget\n"
    print "java weblogic.WLST manageApplication.py -u weblogic -p weblogic1 -a t3://localhost:7001 -t AdminServer\n"
    sys.exit(2)
#========================
#Connect To Domain
#========================
def connectToDomain():
    try:
        connect('weblogic','weblogic1','t3://localhost:7001')
        print 'Successfully connected to the domain\n'
    except:
        print 'The domain is unreacheable. Please try again\n'
        exit()
#========================
#Application undeployment Section
#========================

def undeployApplication():
    cd ('AppDeployments')
    myapps=cmo.getAppDeployments()
    for appName in myapps:
        domainConfig()
        cd ('/AppDeployments/'+appName.getName()+'/Targets')
        mytargets = ls(returnMap='true')
        domainRuntime()
        cd('AppRuntimeStateRuntime')
        cd('AppRuntimeStateRuntime')
        for targetinst in mytargets:
            curstate4=cmo.getCurrentState(appName.getName(),targetinst)
            print '-----------', curstate4, '-----------', appName.getName()
            deploymentName=appName.getName()
            deploymentTarget=targetinst
            print deploymentName
            print deploymentTarget
            stopApplication(deploymentName, targets=deploymentTarget)
            undeploy(deploymentName, targets=deploymentTarget)

#========================
#Input Values Validation Section
#========================

if __name__=='__main__' or __name__== 'main':
    try:
        opts, args = getopt.getopt(sys.argv[1:], "u:p:a:t:", ["username=", "password=", "adminUrl=", "deploymentTarget="])
    except getopt.GetoptError, err:
            print str(err)

username = ''
password = ''
adminUrl = ''
deploymentTarget = ''

for opt, arg in opts:
    if opt == "-u":
        username = arg
    elif opt == "-p":
        password = arg
    elif opt == "-a":
        adminUrl = arg
    elif opt == "-t":
        deploymentTarget = arg

if username == "":
    print "Missing \"-u username\" parameter.\n"
    usage()
elif password == "":
    print "Missing \"-p password\" parameter.\n"
    usage()
elif adminUrl == "":
    print "Missing \"-a adminUrl\" parameter.\n"
    usage()
elif deploymentTarget == "":
    print "Missing \"-c deploymentTarget\" parameter.\n"
    usage()
#========================
#Main Control Block For Operations
#========================

def deployMain():
    for line in open("c:\\wlst\\applicationsList.txt"):
        temp_line = line
        fields = temp_line.strip().split(",")
        print(fields[0]+" "+fields[1])
        deploymentName = fields[0]
        deploymentFile = fields[1]
        print deploymentName+" "+deploymentFile+" "+deploymentTarget+"/n"
        deploy(deploymentName,deploymentFile,targets=deploymentTarget)
#==================
#main block
#=====================
connectToDomain()
undeployApplication()
deployMain()
disconnect()

推荐答案

WLContext.close() 可能不是真正的问题(它甚至在一些 Oracle 示例中).调用 deploy 和 undeploy 时会看到哪些错误消息?

WLContext.close() is probably not the real problem (it's even in some of the Oracle examples). What error messages do you see when deploy and undeploy are being called?

您应该会看到如下内容:

You should see something like:

Deploying application from /tmp/something/myapp.ear
Current Status of your Deployment:
Deployment command type: deploy
Deployment State       : completed
Deployment Message     : no message

我还看到您永远不会在脚本的最后调用 activate(),因此如果您在生产模式下运行,这可能是问题.

I also see that you never call activate() at the very end of your script so that could be the issue if you are running in production mode.

尝试在脚本的最后 deployMain() 之后添加以下内容:

Try adding the following at the very end of your script after deployMain():

save()
status = activate(300000, "block='true'")
status.getStatusByServer()
status.getDetails()

更新:

出现激活错误是因为在取消部署之前没有调用edit():

The activation error occurs because you have not called edit() before the undeploy:

# Get edit/lock for upcoming changes
edit()
startEdit(120000, 120000, 'false')
undeployApplication()

我认为您最好大大简化您的取消部署.您不需要经历确定目标的复杂性,因为您已经从所有目标中取消部署.试试这个,看看你是否可以取得进展:

I think you will be better off greatly simplifying your undeploy. You don't need to go through the complexity of determining targets because you are already undeploying from ALL targets. Try this instead and see if you can make progress:

cd ('AppDeployments')
myapps=cmo.getAppDeployments()
for appName in myapps:
   try:
      appPath = "/AppDeployments/" + appName.getName()
      cd(appPath)
      print "Stopping deployment " + appName.getName()
      stopApplication(appName.getName())
      print "Undeploying " + appName.getName()
      undeploy(appName.getName(), timeout=60000)
   except Exception , e:
      print "Deployment " + appName.getName() + " removal failed."

这篇关于&lt;BEA-050001&gt;WLContext.close() 在与创建它的线程不同的线程中被调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-17 10:46
查看更多