2017-11-05 8 views
0

In Wildfly 10 möchte ich einige der Anmerkungen einer MDB auf den zugehörigen Ressourcenadapter verschieben.Können in Wildfly 10 die MDB-Lookup-Eigenschaften in der Datei standalone-full.xml angegeben werden, anstatt zur Kompilierzeit im Java-Quellcode gebunden zu werden?

Nach Connect a pooled-connection-factory to a Remote Artemis Server könnte man die MDB mit Anmerkungen versehen (hier aus der referenzierten Seite kopiert) folgt:

@ResourceAdapter("remote-artemis") 
@MessageDriven(name = "MyMDB", activationConfig = { 
    @ActivationConfigProperty(propertyName = "useJNDI", propertyValue = "false"), 
    @ActivationConfigProperty(propertyName = "destination", propertyValue = "myQueue"), 
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), 
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") 
}) 
public class MyMDB implements MessageListener { 
//  
} 

Gibt es eine Möglichkeit, die Lookup-Entscheidung von der Kompilierung zu verschieben Zeit Aufruf? Ich möchte die Werte der Eigenschaften „useJNDI“ angeben und „Ziel“ in meinem Standalone-full.xml

Ich versuchte, das MDB mit Anmerkungen versehen, wie folgt:

@ResourceAdapter("my-remote") 
@MessageDriven(name = "MyMDB", activationConfig = { 
    //try specifying the next 2 properties in the configuration file 
    //@ActivationConfigProperty(propertyName = "useJNDI", propertyValue = "false"), 
    //@ActivationConfigProperty(propertyName = "destination", propertyValue = "myQueue"), 
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), 
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") 
}) 
public class MyMDB implements MessageListener { 
//  
} 

Und dann konfiguriert „my- remote“in der Standalone-full.xml wie folgt:

<pooled-connection-factory name="my-remote" entries="jms/RemoteCF" 
    connectors="batch-connector" consumer-window-size="0" 
    useJNDI="false" destination="myQueue" 
    user="user" password="password" /> 

Aber die folgende Fehlermeldung erhalten:

Message: WFLYCTL0376: Unexpected attribute 'useJNDI' encountered. Valid attributes are: 'entries, discovery-group, connectors, ha, client-failure-check-period, connection-ttl, call-timeout, call-failover-timeout, consumer-window-size, consumer-max-rate, confirmation-window-size, producer-window-size, producer-max-rate, protocol-manager-factory, compress-large-messages, cache-large-message-client, min-large-message-size, client-id, dups-ok-batch-size, transaction-batch-size, block-on-acknowledge, block-on-non-durable-send, block-on-durable-send, auto-group, pre-acknowledge, retry-interval, retry-interval-multiplier, max-retry-interval, reconnect-attempts, failover-on-initial-connection, connection-load-balancing-policy-class-name, use-global-pools, scheduled-thread-pool-max-size, thread-pool-max-size, group-id, transaction, user, password, min-pool-size, use-auto-recovery, max-pool-size, managed-connection-pool, enlistment-trace, initial-message-packet-size, initial-connect-attempts' 

Müssen die Lookup-Eigenschaften zur Kompilierzeit angegeben werden?
Wenn ich eine Wildfly-Instanz brauche, um mit jndi nachzuschlagen, und eine andere, die den Nicht-JNDI-Namen verwendet, muss ich wirklich zwei MDBs erstellen, die nur leicht anders kommentiert sind?

+0

Wenn Ihr Resort-Adapter in der XML-Datei konfiguriert ist, sollten Sie keine MDB-Anmerkungen außer @ResourceAdapter benötigen. – Nicholas

Antwort

2

Die < Pool-Verbindung-Fabrik> ist wirklich nur eine Fassade oben auf dem HornetQ JCA Resource Adapter, um die Konfiguration zu erleichtern. Abgesehen von einer begrenzten Anzahl von Konfigurationseigenschaften, die im Element inbound-config> < (siehe das Schema für weitere Details) angegeben sind, gelten alle Konfigurationseigenschaften nur für den Ausgangsadapter (dh sie gelten nicht für MDBs, die den Eingangsadapter verwenden). Der eingehende Adapter, der von MDBs verwendet wird, soll wirklich mit Annotationen oder mit einem Deployment-Deskriptor (d. H. Ejb-jar.xml) konfiguriert werden.

Um zu erreichen, was Sie wollen, können Sie die Konfiguration auf den Deployment-Deskriptor externalisieren oder Sie können die Systemeigenschaftensubstitution in Ihren Anmerkungen verwenden. Um letzteres Sie zu implementieren müssen:

  1. Set < Annotations-Eigenschaft-Ersatz> auf true in der Server-Konfiguration
  2. Set < jboss-Descriptor-Eigenschafts-Ersatz> auf true in Ihrem Server
  3. Config
  4. Verwenden Sie die $ {} Syntax in Ihren Anmerkungen, zB:

    @ActivationConfigProperty(propertyName = "destination", propertyValue = "${myDestinationProperty}") 
    
  5. definieren Systemeigenschaften in der Server-Konfiguration entspricht, zB:

    <system-properties> 
        <property name="myDestinationProperty" value="myQueue"/> 
    </system-properties> 
    

klar sein, nichts mit den Anmerkungen bei der Kompilierung durchgeführt. Sie werden alle zum Zeitpunkt der Bereitstellung gelesen, wenn die MDB aktiviert ist.

+0

Danke Justin. Übrigens musste ich jboss-descriptor-property-replacement in der Serverkonfiguration auf true setzen. vielleicht können Sie es zu Ihrer Antwort hinzufügen.Kann $ {} nur zum Abrufen des Werts einer Eigenschaft verwendet werden oder können Sie auch bedingte Ausdrücke angeben? – inor

+1

Sie können einen Standardwert für eine Eigenschaft mit einem Doppelpunkt angeben (z. B. $ {propertyName: defaultValue}), aber die Syntax $ {} unterstützt keine anderen Arten von Ausdrücken. –

Verwandte Themen