2011-01-17 3 views
2

Ich möchte ausdrücklich eine Transaktion auf eine JavaEE MDB rückgängig zu machen:Wie MessageDrivenContext-Injektion aktivieren?

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; 
    } 
} 

jedoch der Behälter nicht setMessageDrivenContext für mich nicht anrufen und ich NullPointerException bekommen. Welche magische Soße brauche ich, um den Kontext injizieren zu lassen?

+0

PS, ich verwende WebSphere 7. – Synesso

Antwort

2

Ich musste auch javax.ejb.MessageDrivenBean implementieren, bevor es diese Rückrufmethode erkennen würde. (Obwohl es als eine legitime MDB ohne diese Schnittstelle funktionierte).

+0

Das ist nicht erforderlich, wenn Sie Anmerkungen verwenden. –

5

Sie sollten die MessageDrivenBeanContext mit @Resource Anmerkungen versehen:

@Resource private MessageDrivenContext context; 

Dann wird der Kontext durch den Behälter injiziert werden. Sie benötigen die setMessageDrivenContext Methode nicht.