首页 > 解决方案 > 如何将 CDI bean 注入到消息驱动消费者

问题描述

我想问一下实现CDI +消息驱动消费者的最佳方式或最佳方式是什么。下面的示例代码是我的应用程序的实际实现。另外,我使用 apache maven 作为应用程序构建工具。

ITransactionService.java

public interface ITransactionService{
     void process();
}

事务服务Bean.java

@RequestScoped
@TransService
public class TransactionServiceBean implements ITransactionService{
     @Override
     public void process(){
          /logic here
     }
}

TransService.java

@Documented
@Retention(RUNTIME)
@Target({TYPE, FIELD, METHOD, PARAMETER})
@Qualifier
public @interface TransService{

}

JMSConsumerService.java

@MessageDriven
@Transactional
public class JMSConsumerService implements MessageListener {

     @Inject @TransService
     private ITransactionService transactionService;

     @Override
     public void onMessage(Message message){
          transactionService.process();
     }

}

当我将应用程序运行到 JBoss 6.4 时,日志中出现以下错误,并且应用程序无法在应用程序服务器中启动。

无法解析注入点的 CDI bean

有人可以帮我吗?

标签: javajmscdi

解决方案


为什么是RequestScoped

我认为,Request-Context 不会被消息隐式传输。所以我可以想象,MessageDriven-Bean 将找不到可以安全使用的实例。您是否尝试使用@Dependent@ApplicationScoped


推荐阅读