2011-01-17 3 views
2

私は明示的にJavaEEのMDBにロールバックするトランザクションを設定したいと思います:MessageDrivenContextの注入を有効にするには?

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を取得しますが。コンテキストを注入するにはどのような魔法のソースが必要ですか?

+0

PS、私はWebSphere 7を使用しています。 – Synesso

答えて

2

コールバックメソッドを認識するには、javax.ejb.MessageDrivenBeanも実装する必要がありました。 (たとえそれがそのインタフェースなしで正当なMDBとして機能していたとしても)。

+0

注釈を使用する場合は不要です。 –

5

あなたは@ResourceでMessageDrivenBeanContextに注釈を付ける必要があります。

@Resource private MessageDrivenContext context; 

は、コンテキストは、コンテナによって注入されます。 setMessageDrivenContextメソッドは必要ありません。

関連する問題