7.4.4. 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é.
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èmeee
du fichier de configuration du serveur àtrue
.- 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 dustandalone/configuration/standalone-full.xml
. Si vous exécutez votre serveur dans un domaine géré, il s'agira du fichierdomain/configuration/domain.xml
. - Démarrer le serveur JBos EAP avec le profil complet.Dans Linux :
Dans Windows :EAP_HOME/bin/standalone.sh -c standalone-full.xml
EAP_HOMEbin\standalone.bat -c standalone-full.xml
- Lancer l'interface CLI par la commande pour votre système d'exploitation.Dans Linux :
Dans Windows :EAP_HOME/bin/jboss-cli.sh --connect
EAP_HOME\bin\jboss-cli.bat --connect
- Saisir la commande suivante pour activer la substitution de propriété d'annotation.
/subsystem=ee:write-attribute(name=annotation-property-replacement,value=true)
- Vous devriez voir apparaître le résultat suivant :
{"outcome" => "success"}
- 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>
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.
- Démarrez le serveur JBoss EAP et le Management API comme indiqué dans les étapes précédentes.
- 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 rapidehelloworld-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)
- 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.queuejava:/queue/HELLOWORLDMDBPropQueue -Dproperty.helloworldmdb.topic=java:/topic/HELLOWORLDMDBPropTopic -Dproperty.connection.factory=java:/ConnectionFactory
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 rapidehelloworld-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.- Modifier la valeur de propriété
@ActivationConfigProperty
destination
qui se trouve dans la classeHelloWorldQueueMDB
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") })
- Modifier la valeur de propriété
@ActivationConfigProperty
destination
qui se trouve dans la classeHelloWorldTopicMDB
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") })
- Modifier les annotations
@Resource
qui se trouvent dans la classeHelloWorldMDBServletClient
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;
- 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>
- 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
.