2013-04-16 6 views
6

Wenn Message Driven Beans verwenden, die Zielnamen, von wo Nachrichten zu empfangen ist hart in der Anmerkung codiert @MessageDriven(mappedName = "someDestinationName")Konfigurieren MappedName Annotation in Message Driven Bean dynamisch

Gibt es eine Möglichkeit, diese Informationen zur Laufzeit hinzufügen? Unten ist eine Beispiel-Message-Driven-Bean-Klasse.

package mdb.beans; 

import javax.ejb.ActivationConfigProperty; 
import javax.ejb.MessageDriven; 
import javax.jms.Message; 
import javax.jms.MessageListener; 

@MessageDriven(mappedName = "someDestinationName", activationConfig = 
{ 
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), 
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") 
}) 
public class MDBSample implements MessageListener 
{  
    public MDBSample() 
    { 
     // constructor 
    } 

    @Override 
    public void onMessage(Message message) 
    { 
     // logic when message received 
    } 
} 

Antwort

2

Soweit ich weiß, nein, das können Sie nicht tun.

Da die Kopplung des Ziels (die eine Zeichenfolge ist) und der Bean (die eine Klasse ist) einmal in der Bereitstellungszeit erfolgt, können Sie das Ziel programmgesteuert nicht ändern.

Vielleicht gibt es einen Hack zum erneuten Binden; Ich meine, den Container zu zwingen, MDB freizugeben, dann das Ziel zu wechseln und wieder zu initialisieren (gehe durch Dependency-Injection, dann post-Konstrukt-Schritte usw.), aber ich bezweifle, dass die Anwendungsserver dies zulassen.

Auszug aus JSR-318 (EJB 3.1 spec);

5.4.17 Assoziation eines Message-Driven Beanwith ein Reiseziel oder Endpoint

A Message-Driven Bean mit einem Ziel oder Endpunkt zugeordnet wird, wenn die Bohnen in dem Behälter bereitgestellt wird. Es liegt in der Verantwortung des Deployers, die Message-Driven Bean einem Ziel oder Endpunkt zuzuordnen.

5.4.17.1 JMS Message-Driven Beans

ein JMS-Nachricht-driven bean ist mit einer JMS Destination (Queue oder Thema) zugeordnet ist, wenn die Bohnen in dem Behälter bereitgestellt wird. Es liegt in der Verantwortung des Deployers, die nachrichtengesteuerte Bean einer Warteschlange oder einem Zweig zuzuordnen.

Verwandte Themen