【问题标题】:WLSTException: Error cding to the MBean while creating JMS QueueWLSTException:创建 JMS 队列时错误 cding 到 MBean
【发布时间】:2015-12-04 21:31:48
【问题描述】:

我正在尝试使用以下代码创建 JMSQueue,但出现错误

cd ('/JMSSystemResources/BAMJMSSystemResource/JMSResource/BAMJMSSystemResource/Queues/SampleQueue')

当我连接到服务器运行时并检查时,我可以看到 JMS 模块不可用,但从管理控制台我可以清楚地看到它(JMS 模块 BAMJMSSystemResource)可用,而且它也没有给出错误

注意:我是在调用 createJMSQueue 函数之前创建 JMS 模块)

def createJMSQueue(jmsQueueName, jmsModuleName, jndiName, subdeployment):
    print '   Creating Queue '+jmsQueueName
    cd('/')
    cd("/JMSSystemResources/"+jmsModuleName+"/JMSResource/"+jmsModuleName)
    cmo.createQueue(jmsQueueName)
    print('DEBUG >> '+jmsModulePath+'/Queues/'+jmsQueueName)
    cd("/JMSSystemResources/"+jmsModuleName+"/JMSResource/"+jmsModuleName+'/Queues/'+jmsQueueName)
    set('JNDIName',jndiName)
    set('SubDeploymentName',subdeployment)
    cd('/JMSSystemResources/'+jmsModuleName+'/SubDeployments/'+subdeployment)
    cmo.addTarget(getMBean('/JMSServers/BAMMonitoringServer'))

错误是,

Starting an edit session ...
Started edit session, please be sure to save and activate your 
changes once you are done.
*** Creating JMS Queues ....
    Creating Queue SampleQueue 
DEBUG >> JMSSystemResources/BAMJMSSystemResource/JMSResource/BAMJMSSystemResource/Queues/SampleQueue 
No stack trace available.
Problem invoking WLST - Traceback (innermost last):
  File "/home/oracle/JMSConfigurations.py", line 188, in ?
  File "/home/oracle/JMSConfigurations.py", line 77, in createJMSQueue
  File "<iostream>", line 182, in cd
  File "<iostream>", line 1847, in raiseWLSTException
WLSTException: Error cding to the MBean

真的想了解问题所在吗?

【问题讨论】:

    标签: weblogic wlst


    【解决方案1】:

    Shanaka,在 DEBUG 语句之后给出的 'cd' 命令可能有问题。你可以给 cd 行如下:

    cd(jmsModulePath+'/Queues/'+jmsQueueName)
    

    您还可以使用WLST by Examples 更清楚地了解 JMS 模块的创建

    【讨论】:

    • 谢谢帕万,我通过了你的例子。但是路径看起来还可以,这就是为什么我要打印以查看路径是否正确(来自调试)。我想知道的另一点是 JMS 模块在 MBean 树上也不可用?
    【解决方案2】:

    这部分脚本看起来不错,除了在“ cd("/JMSSystemResources/"+jmsModuleName+"/JMSResource/"+jmsModuleName+'/Queues/'+jmsQueueName)" 中混合使用双引号和单引号 并分配目标 "cmo.addTarget()" ,如果子部署已经针对 JMS 服务器,则不需要定位队列。 您可以检查创建 JMS 模块、子部署、目标 JMS 模块到服务器和子部署到 JMS 服务器的编辑会话是否已成功激活。 那么这个队列创建应该可以正常工作。

    问候, 克什蒂杰

    【讨论】:

      【解决方案3】:

      这可能意味着您尝试创建的 JMS 已经存在于 WebLogic 中。确认 JMS 名称不存在。

      【讨论】:

        【解决方案4】:

        我与你分享我的正确代码:

        def create_jms_object(name, module, subdeployment, type):
          cd('/JMSSystemResources/'+module+'/JMSResource/'+module)
          myob=create(name, type)
          myob.setJNDIName("jms/"+name)
          myob.setSubDeploymentName(subdeployment)
        

        我在这里调用函数:

        queue_name = queue['name']
          sub_depl_name = queue['sub_deployment']
          if(not_exists_jms_ud_qeue(jms_module_name, queue_name)):
            print 'Creating queue '+queue_name
            create_jms_object(queue_name, jms_module_name, sub_depl_name, 'UniformDistributedQueue')
            print 'Created queue '+queue_name
          else:
            print 'UniformDistributedQueue ' + queue_name + ' already exists'
          cmo = cd('/JMSSystemResources/'+jms_module_name+'/JMSResource/'+jms_module_name+'/UniformDistributedQueues/'+queue_name+'/DeliveryFailureParams/'+queue_name)
          redelivery_limit = queue.get('redelivery_limit',-1)
          set('RedeliveryLimit', redelivery_limit)
          errorDestinationName = queue.get('error_destination', None)
          if (errorDestinationName is not None):
            errorDestination = getMBean('/JMSSystemResources/'+jms_module_name+'/JMSResource/'+jms_module_name+'/UniformDistributedQueues/'+errorDestinationName)
            set('ErrorDestination', errorDestination)
            print 'Dead letter queue set to: '+errorDestinationName
          else:
            cmo.unSet('ErrorDestination')
            print 'Dead letter queue unset'
          cd('/JMSSystemResources/'+jms_module_name+'/JMSResource/'+jms_module_name+'/UniformDistributedQueues/'+queue_name+'/DeliveryParamsOverrides/'+queue_name)
          redelivery_delay = queue.get('redelivery_delay',-1)
          set('RedeliveryDelay', redelivery_delay)
          time_to_deliver = queue.get('time_to_deliver',-1)
          set('TimeToDeliver', time_to_deliver)
        

        其中队列对象如下:

        {
            "name" : "events_reg_queue",
            "sub_deployment" : "Registry-SD",
            "redelivery_limit" : 1
        }
        

        以及以下实用功能:

        def not_exists_jms_ud_qeue(jmsModuleName, jmsResourceName):
          try:
            myMBean = getMBean('/JMSSystemResources/'+jmsModuleName+'/JMSResource/'+jmsModuleName+'/UniformDistributedQueues/'+jmsResourceName)
            if (myMBean is None):
              return true
            return false
          except:
            return true
        

        【讨论】:

          【解决方案5】:

          您是否尝试过手动遍历路径?

          您可以使用 wlst 命令行遍历 /edit 位置。 使用 cd("") 和 ls() 遍历并列出您创建的那些属性。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-02-01
            • 1970-01-01
            • 2010-12-07
            • 2021-08-12
            • 2015-04-12
            • 2011-02-10
            • 1970-01-01
            相关资源
            最近更新 更多