如何使 MDB 激活规范上下文属性可配置?

How to make MDB Activation Spec contextual properties configurable?

在我们的项目中,我们使用 MDB 侦听特定队列上的消息。它被定义为注释。

示例:

@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "maxSessions", propertyValue = "20")})

为了更改 maxSessions 的值,每次都必须编译代码。即使我在 ejb-jar.xml 中配置它而不是作为注释,我也需要编译代码并生成 EAR 文件。

有没有办法让它成为用户可配置的(从属性文件中读取),这样就不需要重新编译代码,只需将 maxSession 值更改为“30”并重新启动 jboss,它应该工作。

请帮忙。

参考代码:

@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "ABCQueue"),
@ActivationConfigProperty(propertyName = "maxSessions", propertyValue = "20"),    @ActivationConfigProperty(propertyName="maxMessagesPerSessions",propertyValue="15")})
public class ABCMDB implements MessageListener
{
   ----------- 
}

我开始写关于 Wildfly8 和 Websphere MQ 集成的要点,允许为 MDB 或 JMS 消息生产者配置和维护环境上下文配置。

基本上,我必须在我的应用程序中声明一个 jboss-ejb3.xml 自定义部署描述符,它使用系统属性进行我的 MDB 使用的上下文配置。

系统属性在 wildfly standalone-full.xml 文件中配置,位于 system-properties 元素下。所以不在 属性 文件中,但在我看来独立 - full.xml 配置是此类配置的好位置。

这是 link : https://gist.github.com/remibantos/33c366803f189db9b225

在 Wildfly 中有一个简单的方法(我已经在 Wildfly 11 中使用过)。

  1. 通过在独立 xx.xml 或 domain.xml
  2. 中更新 "ee" 子系统,在注释中启用 属性 替换

<subsystem xmlns="urn:jboss:domain:ee:4.0"> ... <annotation-property-replacement>true</annotation-property-replacement> ... </subsystem>

  1. 定义系统属性,独立-xx.xml或domain.xml

    <系统属性><br> <属性 名称="property.maxsessions" 值="50"/> </系统属性>

或者您自己的属性文件使用 -P myconfigured.properties ,同时启动 wildfly

或者在启动 wildfly 时通过命令行 -Dproperty=value

  1. 修改 MDB 注释

    @ActivationConfigProperty(propertyName = "maxSessions", propertyValue = "${property.maxsessions}")

参考:https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.0/html-single/developing_ejb_applications/#message_driven_beans-1