如何使MDB Activation Spec上下文属性可配置?

时间:2015-12-01 21:21:52

标签: java jms wildfly jboss-mdb

在我们的项目中,我们正在使用侦听特定队列上的消息的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
{
   ----------- 
}

2 个答案:

答案 0 :(得分:1)

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

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

系统属性在wildfly standalone-full.xml文件中的system-properties元素下配置。所以不是在属性文件中,而是在我的视图中,standalone-full.xml配置是这种配置的好位置。

以下是链接:https://gist.github.com/remibantos/33c366803f189db9b225

答案 1 :(得分:1)

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

  1. 通过更新standalon-xx.xml或domain.xml中的“ ee”子系统来启用注释中的属性替换

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

  1. 在standalon-xx.xml或domain.xml中定义系统属性

    <system-properties>
    <property name="property.maxsessions" value="50"/> </system-properties>

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

或者在启动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