【问题标题】:Configuring MappedName annotation in Message Driven Bean dynamically在消息驱动 Bean 中动态配置 MappedName 注解
【发布时间】:2013-04-08 15:40:05
【问题描述】:

当使用消息驱动 BEans 时,接收消息的目标名称被硬编码在注解 @MessageDriven(mappedName = "someDestinationName")

有没有办法在运行时添加这些信息? Bellow 是一个示例消息驱动 Bean 类。

package mdb.beans;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.Message;
import javax.jms.MessageListener;

@MessageDriven(mappedName = "someDestinationName", activationConfig =
{
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue =   "Auto-acknowledge"),
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})
public class MDBSample implements MessageListener 
{    
    public MDBSample() 
    {
        // constructor
    }

    @Override
    public void onMessage(Message message) 
    {
        // logic when message received
    }
}

【问题讨论】:

    标签: java jakarta-ee annotations ejb-3.0 message-driven-bean


    【解决方案1】:

    据我所知,不,你不能那样做。

    因为目标(字符串)和 bean(类)的耦合是在部署时一次完成的,所以您无法以编程方式更改目标。

    也许有重新绑定的技巧;我的意思是强制容器释放 MDB,然后更改目标并重新初始化(通过依赖注入,然后发布构造步骤等),但我怀疑应用程序服务器会允许这样做。

    摘自 JSR-318(EJB 3.1 规范);

    5.4.17 消息驱动 Bean 与目的地或端点的关联

    当 bean 部署在容器中时,消息驱动 bean 与目标或端点相关联。将消息驱动的 bean 与目的地或端点相关联是 Deployer 的责任。

    5.4.17.1 JMS 消息驱动 Bean

    当 bean 部署在容器中时,JMS 消息驱动 bean 与 JMS 目标(队列或主题)相关联。将消息驱动 bean 与队列或主题相关联是 Deployer 的责任。

    【讨论】:

      【解决方案2】:

      您可以在应用程序启动时通过从系统变量中注入值来实现此目的。

      对于 Thorntail (2.6.0),我们在 project-defaults.yml 中引入了以下设置:

      thorntail:
        ee:
          annotation-property-replacement: true
      

      然后从MessageDrivenBean引用配置参数:

      @ActivationConfigProperty(
         propertyName = "destination",
         propertyValue = "java:/jms/queue/${configuration.customer}.queue")
         ...
      

      其中configuration.customer 是在启动时设置的系统变量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-13
        相关资源
        最近更新 更多