资源已经存在

问题描述

我有一个XML队列列表。我使用python脚本和wsadmin控制台进行配置时没有问题。 现在,我想将新队列添加到现有列表中并创建它们。 在创建时,控制台会识别出具有JNDI名称的队列已经存在,然后停止脚本。 我如何才能知道已经存在的资源并继续创建新添加的队列

我的python脚本

import sys
sys.modules['AdminConfig'] = AdminConfig
sys.modules['AdminControl'] = AdminControl
sys.modules['AdminApp'] = AdminApp
sys.modules['AdminTask'] = AdminTask
sys.modules['Help'] = Help
import myfunctions as fl

import xml.etree.ElementTree as ET
tree = ET.parse('queue_xml/queue.xml')
root = tree.getroot()

scopes = root.findall('.//scope')


def createqueue(server_id,ime,jndi,mqname):
    print(server_id)
    print("creating "+ime,mqname)
    print("-------------------------------------------")
    AdminTask.createWMQQueue(server_id,['-name','-jndiName','-queueName',mqname
                                  ]
                                  )                 

for scope in scopes:
        typee= scope.find('type').text
        scopename= scope.find('scopename').text
        qe = scope.findall('.//queue')
        for q in qe:
            ime = q.find('name').text
            jndi = q.find('jndi').text
            mqname = q.find('mqname').text
            x = fl.get_scope(typee,scopename)
            createqueue(x,mqname)

AdminConfig.save()

XML脚本

<data>
<scope>
    <type>cluster</type>
    <scopename>TRX</scopename>
    <queue>
        <name>AuthenticFlagUpdate100</name>
        <jndi>jms/as/AuthenticFlagUpdate100</jndi>
        <mqname>GCWOD1.QU.CCMS.AUTH.FLAG.UPDATE100</mqname>
    </queue>
</scope>

<scope>
    <type>Servernode</type>
    <scopename>Node:somenode/Server:someserver</scopename>
    <queue>
        <name>AuthenticFlagUpdate230</name>
        <jndi>jms/as/AuthenticFlagUpdate230</jndi>
        <mqname>GCWOD1.QU.CCMS.AUTH.FLAG.UPDATE200</mqname>
    </queue>
</scope>

<scope>
    <type>Node</type>
    <scopename>somenode</scopename>
    <queue>
        <name>AuthenticFlagUpdate310 </name>
        <jndi>jms/as/AuthenticFlagUpdate310</jndi>
        <mqname>GCWOD1.QU.CCMS.AUTH.FLAG.UPDATE300</mqname>
    </queue>
</scope>
</data>

解决方法

您可以先通过使用“ AdminTask.listWMQQueues”列出所有队列来检查服务器中是否已存在该队列,然后跳过该队列的创建(如果已存在)。

查看具有此更改的更新的“ createqueue”功能:

@ray.remote(resources={'Custom': 1})
class MyClass(object):
    # Methods
,

谢谢,它应该起作用。但是我采用了不同的方法。

def createqueue(server_id,name,jndi,mqname):
    try:
        AdminTask.createWMQQueue(server_id,['-name','-jndiName','-queueName',mqname
                                      ]
                                      )
        print("creating queue "+name,jndi)
    except:
        print("skip exception "+name,jndi)