2

我想在 JavaEE MDB 中明确设置一个事务回滚:

private MessageDrivenContext context;
@MessageDriven(mappedName = "jms/ReaderQueue", activationConfig =  {
        @ActivationConfigProperty(
            propertyName = "acknowledgeMode", 
            propertyValue = "Auto-acknowledge"),
        @ActivationConfigProperty(
            propertyName = "destinationType", 
            propertyValue = "javax.jms.Queue")
    })
public class MessageReaderBean implements MessageListener {
    public void onMessage(Message message) {
        ctx.setRollbackOnly(); // <-- see here, my good fellow!
    }
    public void setMessageDrivenContext(MessageDrivenContext ctx) throws EJBException {
        this.context = ctx;
    }
}

但是容器不要求setMessageDrivenContext我,我得到一个NullPointerException. 我需要什么魔法酱来注入上下文?

4

2 回答 2

6

您应该使用 @Resource 注释 MessageDrivenBeanContext:

@Resource private MessageDrivenContext context;

然后上下文将由容器注入。你不需要这个setMessageDrivenContext方法。

于 2013-01-17T10:23:20.370 回答
2

我还需要实现javax.ejb.MessageDrivenBean它才能识别该回调方法。(即使它在没有该接口的情况下作为合法的 MDB 运行)。

于 2011-01-17T01:24:10.830 回答