通过 JBoss CLI 在部署时更改 Activation-Config-属性

Change Activation-Config-Property on deployment via JBoss CLI

我们想使用 JBoss CLI 部署包含消息驱动 bean 的 EAR。每个环境都有不同的激活配置 属性 值。

我们的问题:在使用 JBoss CLI 部署 EAR 后是否可以更改激活配置属性的值?

我们知道我们可以使用 property substitution。但是,这似乎在服务器启动时设置了激活属性。相反,我们希望随时更改值(可能只要应用程序被禁用)。

2011年那里有similar question。今天的答案可能已经过时了。它在构建时建议一个解决方案。这是我们现在所拥有的,也是需要改进的。

背景:MDBS 由 IBM Websphere MQ 资源适配器激活。描述符 ejb-jar.xml 包含如下片段:

<message-driven>
  <ejb-name>MyMDB</ejb-name>
  <ejb-class>com.acme.MyMDB</ejb-class>
  <messaging-type>javax.jms.MessageListener</messaging-type>
  <activation-config>
    <activation-config-property>
      <activation-config-property-name>hostName</activation-config-property-name>
      <activation-config-property-value>hostName</activation-config-property-value>
    </activation-config-property>
    <activation-config-property>
      <activation-config-property-name>port</activation-config-property-name>
      <activation-config-property-value>1415</activation-config-property-value>
    </activation-config-property>
    <activation-config-property>
      <activation-config-property-name>queueManager</activation-config-property-name>
      <activation-config-property-value>queueManagerName</activation-config-property-value>
    </activation-config-property>
    <activation-config-property>
      <activation-config-property-name>channel</activation-config-property-name>
      <activation-config-property-value>channelName</activation-config-property-value>
    </activation-config-property>
    <activation-config-property>
      <activation-config-property-name>transportType</activation-config-property-name>
      <activation-config-property-value>CLIENT</activation-config-property-value>
    </activation-config-property>
    <activation-config-property>
      <activation-config-property-name>useJNDI</activation-config-property-name>
      <activation-config-property-value>true</activation-config-property-value>
    </activation-config-property>
    <activation-config-property>
      <activation-config-property-name>destination</activation-config-property-name>
      <activation-config-property-value>java:jboss/queueName</activation-config-property-value>
    </activation-config-property>
  </activation-config>
</message-driven>

一个可能的解决方案是 "try to convert your MDBs into AspectDomain",您可以从下面的 link 中得到一个想法:

https://developer.jboss.org/thread/178162

此处应提供更多详细信息:

如何使用 JBoss EAP 6 中的 JBoss AOP 在运行时设置 MDB ActivationConfigProperty

https://access.redhat.com/solutions/180233

方面域对您没有帮助。这在 JBoss 的早期版本中可用。文章 180233 的第二个 link 本质上说当前 JBoss 版本不再支持 AOP。

MDB 激活规范是在部署 MDB jar 时设置的。您可以按照说明使用 属性 替换来配置 MDB。您可以即时更改系统属性:

/system-property=wmq.port:remove
/system-property=wmq.port:add(value=1515)
/system-property=wmq.port:read-resource

如果您随后重新部署 MDB jar,将替换新的 属性 值。