给定下面的消息驱动Bean,是否可以从CDI规范中定义一个全局修饰器来添加附加行为?
@MessageDriven
public class MyMessageDrivenBean implements MessageListener {
@Override
public void onMessage(Message m) {
}
}
装饰器看起来是这样的:
@Decorator
@Priority(Interceptor.Priority.APPLICATION)
public abstract DecorateMyMessageDrivenBean implements MessageListener {
@Inject
@Delegate
@Any
private MessageListener delegate;
@Override
public void onMessage(Message m) {
}
}
当前未执行装饰程序。我已经将一个beans.xml文件添加到我的模块中。
简短的答案(但不要失去希望)是否定的,因为@messagedrivenbean
不是CDI托管bean,只有CDI托管bean才能是装饰器。
现在,您可以做的(我自己没有这样做的经验)是这样的:
@javax.annotation.resource
调用MessageListener
由Java EE(而不是CDI)注入字段(因此将在JNDI中查找)createInterceptionFactory
方法的组合,编写一个@production
MessageListener
实例的生成器方法 @inject
MessageListener
在您想要使用的任何地方生成的MessageListener
InterceptionFactory
实际上是将拦截(而decorator只是一种非常特殊的拦截)动态添加到非CDI托管bean的东西中的唯一机制。
最后,只有使用CDI2.0(Java EE8或更高版本)时,这才起作用。
是否可以在MDB(消息驱动Bean)中为“目的地”动态分配运行时值? 我还尝试了ejb-jar.xml方法,但是“activation-config-property-name”=“destination”的值被理解为队列的文字物理名称。因此我无法对资源进行JNDI查找。 从属性读取和分配目标或使用-d参数传递值的正确方法是什么?
在企业应用程序中,我试图使用netBeans 8.1将MessageDriven beans注入Web应用程序(到REST服务)。我在IDE中没有得到任何警告,但是,在部署时,我得到以下错误: 严重:加载应用程序时出现异常:CDI部署失败:Weld-001408:未满足类型StatisticsBean的依赖关系,其限定符@Default在注入点[BackedAnnotatedField]@Inje
消息驱动Bean是一种企业bean,当EJB容器从队列或主题接收消息时由EJB容器调用。 消息驱动的bean是一个无状态bean,用于异步执行任务。 为了演示消息驱动bean的使用,我们将使用EJB-persistence章节,我们需要执行以下任务 - Step 1 - 在数据库中创建表(请参阅EJB-Persistence章节)。 Step 2 - 创建与表对应的实体类(请参阅EJB-Persi
早上好在我的时区。 事先表示感谢并致以最良好的问候
同事, 你能帮我解决以下问题吗? 我有JavaEE应用程序。它包含一些具有业务逻辑的消息驱动Bean和一些负责整个应用程序配置的不同方面的管理Bean。我想设置bean启动和初始化的顺序。这意味着在管理Bean完成应用程序的初始化之前,容器不应该调用消息驱动Bean。应用程序的初始化包括读取和解析一些配置文件,这需要一些时间。 有WebSphere配置选项吗? 或者它应该只以编程方式完成技巧?
在一个无状态bean中,我正在查找队列,这是正确的,并且发送没有抛出异常: 但不调用消息驱动bean的onMessage方法。 我错过了什么? 我的消息驱动bean有以下代码: