如何使 MDB 激活规范上下文属性可配置?
Posted
技术标签:
【中文标题】如何使 MDB 激活规范上下文属性可配置?【英文标题】:How to make MDB Activation Spec contextual properties configurable? 【发布时间】:2016-03-05 23:12:40 【问题描述】:在我们的项目中,我们正在使用一个 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
-----------
【问题讨论】:
【参考方案1】:Wildfly 中有一个简单的方法(我在 Wildfly 11 中使用过)。
-
通过更新 standalon-xx.xml 或 domain.xml 中的“ee”子系统来启用注释中的属性替换
<subsystem xmlns="urn:jboss:domain:ee:4.0">
...
<annotation-property-replacement>true</annotation-property-replacement>
...
</subsystem>
在 standalon-xx.xml 或 domain.xml 中定义系统属性
<system-properties>
<property name="property.maxsessions" value="50"/>
</system-properties>
或者你自己的属性文件使用-P myconfigured.properties
,同时启动wildfly
或者在启动wildfly时通过命令行-Dproperty=value
修改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
【讨论】:
【参考方案2】:我开始写一篇关于 Wildfly8 和 Websphere MQ 集成的要点,允许为 MDB 或 JMS 消息生产者配置和维护环境上下文配置。
基本上,我必须在我的应用程序中声明一个 jboss-ejb3.xml 自定义部署描述符,它使用系统属性进行 MDB 使用的上下文配置。
系统属性在wildfly Standalone-full.xml 文件中配置,在system-properties 元素下。所以不在属性文件中,但在我看来,standalone-full.xml 配置是此类配置的好位置。
这是链接:https://gist.github.com/remibantos/33c366803f189db9b225
【讨论】:
Rémi,activemq 和 wildfly 能做到吗? 我没有用 ActiveMQ 测试过,但我猜是因为有一个现有的资源适配器实现了本文所述的 JCA(Java 连接器架构):mastertheboss.com/jboss-server/jboss-jms/…。顺便说一句,我了解到 Wildfly 10 现在使用 ActiveMQ,因为 HornetQ 成为 Artemis,现在是 ActiveMQ 保护伞的一部分(参见 hornetq.blogspot.co.uk/2015/06/…) jboss 4 可以做到这一点吗? 对于 jboss 4,我假设您需要额外的 XML 配置(我已经很长时间没有使用 Jboss 4),并且它与实现的 Java EE 版本不同。您是否为此使用 jboss4(因为您的问题被标记为“wildfly”? 我已更改您的问题标题以澄清。如果您认为它可以解决您的问题,您可以将答案标记为已接受。以上是关于如何使 MDB 激活规范上下文属性可配置?的主要内容,如果未能解决你的问题,请参考以下文章