使用消息驱动 BE 时,接收消息的目标名称被硬编码在注释中@MessageDriven(mappedName = "someDestinationName")
有没有办法在运行时添加这些信息?下面是一个示例消息驱动 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
}
}
据我所知,不,你不能那样做。
因为,目标(这是一个字符串)和 bean(这是一个类)的耦合已经完成once在部署时,您无法以编程方式更改目标。
也许有一个重新绑定的技巧;我的意思是强制容器释放 MDB,然后更改目标并重新初始化(通过依赖项注入,然后后构建步骤等),但我怀疑应用程序服务器是否会允许这样做。
摘自 JSR-318(EJB 3.1 规范);
5.4.17 消息驱动 Bean 与目标或端点的关联
当消息驱动 Bean 部署在容器中时,该 Bean 与目标或端点相关联。部署者负责将消息驱动 Bean 与目标或端点关联起来。
5.4.17.1 JMS 消息驱动 Bean
当 JMS 消息驱动 bean 部署在容器中时,该 bean 与 JMS 目标(队列或主题)相关联。部署者负责将消息驱动 bean 与队列或主题相关联。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)