【问题标题】:A resource already exists资源已存在
【发布时间】:2020-12-12 21:55:47
【问题描述】:

我有一个 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,jndi,mqname)
    print("-------------------------------------------")
    AdminTask.createWMQQueue(server_id,
                                 ['-name', ime,
                                 '-jndiName', jndi,
                                 '-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,ime,jndi,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>

【问题讨论】:

    标签: python websphere jython wsadmin


    【解决方案1】:

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

    查看更新后的“createqueue”功能:

    def createqueue(server_id,ime,jndi,mqname):
        print(server_id)
        print("creating "+ime,jndi,mqname)
        print("-------------------------------------------")
        if AdminTask.listWMQQueues(server_id).find(ime) != -1:
            print ("Queue %s already exists, skip queue creation" % (ime) )
        else:
            AdminTask.createWMQQueue(server_id,
                                     ['-name', ime,
                                     '-jndiName', jndi,
                                     '-queueName', mqname
                                      ]
                                      )
        #end if
    #end def
    

    【讨论】:

      【解决方案2】:

      谢谢,它应该可以工作。但我采取了不同的方法。

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

      【讨论】:

        猜你喜欢
        • 2020-11-14
        • 2020-08-08
        • 1970-01-01
        • 2021-06-12
        • 2021-01-03
        • 2015-11-21
        • 2012-07-09
        • 2022-01-24
        • 2019-08-21
        相关资源
        最近更新 更多