Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

7.4.5. Activer la substitution de propriété des EJB et MDB dans une application

Red Hat JBoss EAP vous permet maintenant d'activer la substitution de propriétés dans les EJB et les MDB à l'aide des annotations @ActivationConfigProperty et @Resource. La substitution de propriétés nécessite la configuration et les changements de code suivants :
  • Vous devez activer la substitution de propriété dans le fichier de configuration du serveur JBoss EAP.
  • Vous devez définir les propriétés système dans le fichier de configuration du serveur ou les passer comme arguments quand vous démarrez le serveur JBoss EAP.
  • Vous devez modifier le code pour utiliser les variables de substitution.

Procédure 7.7. Implémenter la substitution de propriétés dans une application MDB

Les exemples de code suivants sont basés sur le guide de démarrage rapide helloworld-mdb fourni dans JBoss EAP 6.3 ou version supérieure. Cette section vous montre comment modifier le guide de démarrage rapide pour activer la substitution de propriété.
  1. Configurer le serveur JBoss EAP pour activer la substituion de propriété.

    Le serveur JBoss EAP doit être configuré pour activer la substitution de propriété. Pour cela, définir l'attribut <annotation-property-replacement> qui se trouve dans le sous-système ee du fichier de configuration du serveur à true.
    1. Sauvegarder le fichier de configuration du serveur. L'exemple de guide de démarrage rapide helloworld-mdb nécessite un profil complet pour les serveurs autonomes, donc il s'agit du standalone/configuration/standalone-full.xml. Si vous exécutez votre serveur dans un domaine géré, il s'agira du fichier domain/configuration/domain.xml.
    2. Démarrer le serveur JBos EAP avec le profil complet.
      Dans Linux :
      EAP_HOME/bin/standalone.sh -c standalone-full.xml
      Dans Windows :
      EAP_HOMEbin\standalone.bat -c standalone-full.xml
    3. Lancer l'interface CLI par la commande pour votre système d'exploitation.
      Dans Linux :
      EAP_HOME/bin/jboss-cli.sh --connect
      Dans Windows :
      EAP_HOME\bin\jboss-cli.bat --connect
    4. Saisir la commande suivante pour activer la substitution de propriété d'annotation.
      /subsystem=ee:write-attribute(name=annotation-property-replacement,value=true) 
    5. Vous devriez voir apparaître le résultat suivant :
      {"outcome" => "success"}
    6. Réviser les changements apportés au fichier de configuration du serveur JBoss EAP. Le sous-système ee doit maintenant contenir l'XML suivant.
      <subsystem xmlns="urn:jboss:domain:ee:1.2">
          <spec-descriptor-property-replacement>false</spec-descriptor-property-replacement>
          <jboss-descriptor-property-replacement>true</jboss-descriptor-property-replacement>
          <annotation-property-replacement>true</annotation-property-replacement>
      </subsystem>
  2. Définir les propriétés système.

    Vous pouvez spécifier les propriétés du système dans le fichier de configuration du serveur ou vous pouvez les passer comme arguments de ligne de commande lorsque vous démarrez le serveur JBoss EAP. Les propriétés système définies dans le fichier de configuration de serveur ont la priorité sur celles passées sur la ligne de commande lorsque vous démarrez le serveur.
    • Vous devez définir les propriétés système dans le fichier de configuration.
      1. Démarrez le serveur JBoss EAP et le Management API comme indiqué dans les étapes précédentes.
      2. Utiliser la syntaxe de commande suivante pour configurer une propriété système dans le serveur JBoss EAP :
        /system-property=PROPERTY_NAME:add(value=PROPERTY_VALUE) 
        Pour le guide de démarrage rapide helloworld-mdb, nous configurons les propriétés système suivantes :
        /system-property=property.helloworldmdb.queue:add(value=java:/queue/HELLOWORLDMDBPropQueue)
        /system-property=property.helloworldmdb.topic:add(value=java:/topic/HELLOWORLDMDBPropTopic)
        /system-property=property.connection.factory:add(value=java:/ConnectionFactory)
      3. Réviser les changements apportés au fichier de configuration du serveur JBoss EAP. Les propriétés système suivantes doivent maintenant apparaître après les <extensions>.
        <system-properties>
            <property name="property.helloworldmdb.queue" value="java:/queue/HELLOWORLDMDBPropQueue"/>
            <property name="property.helloworldmdb.topic" value="java:/topic/HELLOWORLDMDBPropTopic"/>
            <property name="property.connection.factory" value="java:/ConnectionFactory"/>
        </system-properties>
    • Passez les propriétés système comme arguments de ligne de commande quand vous démarrez le serveur JBoss EAP sous la forme d'un -DPROPERTY_NAME=PROPERTY_VALUE. Ce qui suit est un exemple de la façon dont on passe les arguments dans les propriétés système définies dans l'étape précédente.
      EAP_HOME/bin/standalone.sh -c standalone-full.xml -Dproperty.helloworldmdb.queue=java:/queue/HELLOWORLDMDBPropQueue -Dproperty.helloworldmdb.topic=java:/topic/HELLOWORLDMDBPropTopic -Dproperty.connection.factory=java:/ConnectionFactory
  3. Modifier le code pour utiliser les substitutions de propriétés système.

    Remplacer les valeurs d'annotation @ActivationConfigProperty et @Resource codées en dur par des substitutions pour les propriétés système nouvellement définies. Voici des exemples sur la façon de changer le guide de démarrage rapide helloworld-mdb pour qu'il utilise les substitutions de propriétés système nouvellements définies pour les annotations qui se trouvent dans le code source.
    1. Modifier la valeur de propriété @ActivationConfigProperty destination qui se trouve dans la classe HelloWorldQueueMDB afin d'utiliser la substitution pour la propriété système. L'annotation @MessageDriven devra ressembler à ceci :
      @MessageDriven(name = "HelloWorldQueueMDB", activationConfig = {
          @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
          @ActivationConfigProperty(propertyName = "destination", propertyValue = "${property.helloworldmdb.queue}"),   
          @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
      
    2. Modifier la valeur de propriété @ActivationConfigProperty destination qui se trouve dans la classe HelloWorldTopicMDB afin d'utiliser la substitution pour la propriété système. L'annotation @MessageDriven devra ressembler à ceci :
      @MessageDriven(name = "HelloWorldQTopicMDB", activationConfig = {
          @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
          @ActivationConfigProperty(propertyName = "destination", propertyValue = "${property.helloworldmdb.topic}"),   
          @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
    3. Modifier les annotations @Resource qui se trouvent dans la classe HelloWorldMDBServletClient afin d'utiliser les substitutions de propriétés système. Le code devra ressembler à ceci :
      @Resource(mappedName = "${property.connection.factory}")
      private ConnectionFactory connectionFactory;
      
      @Resource(mappedName = "${property.helloworldmdb.queue}")   
      private Queue queue;
      
      @Resource(mappedName = "${property.helloworldmdb.topic}")
      private Topic topic;
      
    4. Modifier le fichier hornetq-jms.xml pour pouvoir utiliser les valeurs de substitution de propriétés système.
      <?xml version="1.0" encoding="UTF-8"?>
      <messaging-deployment xmlns="urn:jboss:messaging-deployment:1.0">
          <hornetq-server>
              <jms-destinations>
                  <jms-queue name="HELLOWORLDMDBQueue">
                      <entry name="${property.helloworldmdb.queue}"/>
                  </jms-queue>
                  <jms-topic name="HELLOWORLDMDBTopic">
                      <entry name="${property.helloworldmdb.topic}"/>
                  </jms-topic>
              </jms-destinations>
          </hornetq-server>
      </messaging-deployment>
  4. Déployer l'application. L'application utilisera maintenant les valeurs indiquées par les propriétés système comme valeurs de propriété pour @Resource et @ActivationConfigProperty.