Как включить инъекцию MessageDrivenContext? - PullRequest
2 голосов
/ 17 января 2011

Я бы хотел, чтобы explicity установил откат транзакции в 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. Какой волшебный соус мне нужен, чтобы добавить контекст?

Ответы [ 2 ]

6 голосов
/ 17 января 2013

Вы должны аннотировать MessageDrivenBeanContext с помощью @Resource:

@Resource private MessageDrivenContext context;

Тогда контейнер будет вводить контекст.Вам не нужен метод setMessageDrivenContext.

2 голосов
/ 17 января 2011

Мне нужно было также реализовать javax.ejb.MessageDrivenBean, прежде чем он распознает этот метод обратного вызова. (Даже при том, что он функционировал как законный MDB без того интерфейса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...