2012-03-28 4 views
0

Ich habe eine Message Driven BeanDer beste Weg, MDB mit JMS-Ziel zu binden

@MessageDriven(ejbName = "TestMDB", 
    destinationJndiName="test.QueueIn", destinationType = "javax.jms.Queue") 
public class TestMDB extends GenericMessageDrivenBean implements 
    MessageDrivenBean, MessageListener { 
    ..... 
} 

Ich mag die direkte Zielreferenz "test.QueueIn" mit dem „Java ersetzen: comp/env/jms/TestQueueIn "Notation. Dies sollte es mir ermöglichen, das MDB-Ziel im Deployment-Deskriptor anstatt im Java-Code anzugeben. Das heißt, ich möchte das MDB-Ziel in der Bereitstellungszeit bestimmen, nicht in der Kompilierzeit.

Ist das möglich? Oder gibt es eine bessere Möglichkeit, die Referenzindirektion zu erstellen?

+0

Möchten Sie es über Deployment-Deskriptor konfigurieren? –

+0

Ja, ich möchte im Code nur eine Ressourcenreferenz haben und die Ressource im Deployment-Deskriptor angeben lassen. Diese Frage besteht aus zwei Teilen: Welche Annotation wird im Code anstelle von "destinationJndiName" verwendet? Und was in den Deployment-Deskriptor geschrieben werden soll. – xarx

Antwort

1

Ich fand einen Weg, wie es geht, obwohl ich nicht weiß, ob es ideal ist.

@ResourceEnvRef(name="jms/RequestQueue", type="javax.jms.Queue", jndiName="test.QueueIn"), 
@MessageDriven(ejbName = "TestMDB", destinationJndiName="java:comp/env/jms/RequestQueue", destinationType = "javax.jms.Queue") 
public class TestMDB extends GenericMessageDrivenBean implements 
    MessageDrivenBean, MessageListener { 
    ..... 
} 

Die jndiName in @ResourceEnvRef ist ein optionales Attribut, so brauchen Sie nicht im Code angeben. Auch wenn Sie dies tun, dient es lediglich als Standardwert, Sie können es jedoch immer im (generierten) Deployment-Deskriptor ändern.