【问题标题】:How do I set XAConnectionFactoryEnabled in WLST Offline Mode如何在 WLST 离线模式下设置 XAConnectionFactoryEnabled
【发布时间】:2013-09-25 04:55:57
【问题描述】:

我正在尝试在 Weblogic 中设置一个 JMS 队列以进行事务处理。这需要在我正在使用的连接工厂上启用 XA。

我知道一旦 weblogic 启动并运行,我可以从管理控制台执行此操作。但是,在创建域时,我确实需要在离线模式下进行。现在我有这个:

#*Setting up resources and JDBC*
cd('/')
create('JMSServer-0', 'JMSServer')
cd('/')
create('JMSQueues', 'JMSSystemResource')
cd('JMSSystemResource/JMSQueues/JmsResource/NO_NAME_0')

queue=create('AQueue', 'Queue')
queue.setJNDIName('jms/AQueue')
queue.setSubDeploymentName('subdeploymentA')

queue=create('BQueue', 'Queue')
queue.setJNDIName('jms/BQueue')
queue.setSubDeploymentName('subdeploymentB')

connFact=create('AConnFact', 'ConnectionFactory')
connFact.setJNDIName('jms/AConnFact')
connFact.setSubDeploymentName('subdeployment_fact_A')

connFact=create('BConnFact', 'ConnectionFactory')
connFact.setJNDIName('jms/BConnFact')
connFact.setSubDeploymentName('subdeployment_fact_B')

cd('/JMSSystemResource/JMSQueues/JmsResource/NO_NAME_0/ConnectionFactory/BConnFact')
tp=create('BConnFactTp', 'TransactionParam')
tp.setXAConnectionFactoryEnabled(true)

#TransactionParam does not show up here
print "\n" + pwd() + "\n"
ls()

#TransactionParam DOES show up here
cd('/JMSSystemResource/JMSQueues/JmsResource/NO_NAME_0/ConnectionFactory/AConnFact')
print "\n" + pwd() + "\n"
ls()

#Finalization follows here

现在,这是一个现有的脚本,并且 AConnFact 和 AQueue 在 XA 禁用的情况下已经存在了一段时间,所以我宁愿不理会它们。那么,如何使 BConnFact 实际上是获得新 TransactionParam 设置的那个呢?

我应该注意到我确实对此有一个“meh”修复。 Create 将按照创建 ConnectionFactories 的顺序放置 TransactionParams。我可以按照我想要的顺序放置它们。但是,我宁愿不这样做。

【问题讨论】:

    标签: jms weblogic weblogic-10.x wlst


    【解决方案1】:

    这可能有点过时,但在离线时这适用于 12.2.1:

    connFact = create('PubSubSelectorsConnectionFactory','ConnectionFactory')
    connFact.setJNDIName('jms/PubSubSelectorsConnectionFactory')
    cd('/JMSSystemResource/PubSubSelectorsJMSModule/JmsResource/NO_NAME_0/ConnectionFactory/PubSubSelectorsConnectionFactory')
    set('DefaultTargetingEnabled','true')
    create('PubSubSelectorsConnectionFactoryTP', 'TransactionParams')
    cd('TransactionParams/NO_NAME_0')
    set('XAConnectionFactoryEnabled', 'true')
    

    【讨论】:

      【解决方案2】:

      看看下面的例子是否适合你:

      cd('/JMSSystemResources/MyModule/JMSResource/MyModule')
      cmo.createConnectionFactory('MyConnFac')
      cd('/JMSSystemResources/MyModule/JMSResource/MyModule/ConnectionFactories/MyConnFac')
      cmo.setJNDIName('jms/MyConnFac')
      cmo.setSubDeployment('my_sub')
      cd('/JMSSystemResources/MyModule/JMSResource/MyModule/ConnectionFactories/MyConnFac/TransactionParams/MyConnFac')
      cmo.setTransactionTimeout(3600)
      cmo.setXAConnectionFactoryEnabled(true)
      

      在 10.3.6 中为我们工作

      编辑:啊可能。如果您确实需要离线执行并且 wlst 无法正常工作,您可以手动编辑您的 <domain home>/config/jms/<jms module>.xml 文件并添加

      <transaction-params>
        <transaction-timeout>900</transaction-timeout>
        <xa-connection-factory-enabled>true</xa-connection-factory-enabled>
      </transaction-params>
      

      在您的连接工厂下。

      【讨论】:

      • 我见过类似的代码 sn-ps(使用 cmo)。我之前曾尝试将其插入脚本但没有运气。所以我只是尝试通过使用 WLST 命令行提示符(而不是在脚本中)来做到这一点。收到一条错误消息,指出“错误:仅支持 getter 和 setter”。解释为什么它在脚本中不起作用。虽然这让我很困惑,因为创作作品......
      • 也许cmo无法创建是WLST离线的限制。
      • 查看添加的编辑以回答。也许这是目前可能的解决方法。
      • 现在我有我在编辑中提到的解决方法。不幸的是,我真的需要在创建连接工厂期间完成它(我正在更改一个脚本,该脚本是一群人使用的更大设置的一部分,所以我试图避免使用管理控制台或任何其他手动编辑)。不过感谢您的帮助。
      • 那么为什么服务器必须关闭呢?如果不是“实时”更新,为什么不能只更改文件?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-21
      • 1970-01-01
      • 2015-03-19
      • 2014-03-02
      相关资源
      最近更新 更多