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 に答える