Hi to all,

I need to be able to do property replacement inside an MDB, for instance:

@MessageDriven(activationConfig = {
@ActivationConfigProperty(
propertyName = "destinationLookup",
propertyValue = "java:global/jms/myAsyncQueue${short-postfix}"
),
@ActivationConfigProperty(
propertyName="connectionFactoryLookup",
propertyValue="java:jboss/exported/jms/RemoteConnectionFactory"
)
})
public class TestMDB implements MessageListener {

I do this small patch:


diff --git a/ejb3/src/main/java/org/jboss/as/ejb3/deployment/processors/MessageDrivenComponentDescriptionFactory.java b/ejb3/src/main/java/org/jboss/as/ejb3/deployment/processors/MessageDrivenComponentDescriptionFactory.java
index 5d01865..7494d0f 100644
--- a/ejb3/src/main/java/org/jboss/as/ejb3/deployment/processors/MessageDrivenComponentDescriptionFactory.java
+++ b/ejb3/src/main/java/org/jboss/as/ejb3/deployment/processors/MessageDrivenComponentDescriptionFactory.java
@@ -52,6 +52,9 @@
 import org.jboss.metadata.ejb.spec.ActivationConfigPropertyMetaData;
 import org.jboss.metadata.ejb.spec.EnterpriseBeanMetaData;
 import org.jboss.metadata.ejb.spec.MessageDrivenBeanMetaData;
+import org.jboss.metadata.property.PropertyReplacer;
+import org.jboss.metadata.property.PropertyReplacers;
+import org.jboss.metadata.property.PropertyResolver;
 import org.jboss.msc.service.ServiceController;
 import org.jboss.msc.service.ServiceName;
 import org.jboss.msc.service.ServiceRegistry;
@@ -108,7 +111,9 @@
             final MessageDrivenBeanMetaData beanMetaData = getEnterpriseBeanMetaData(deploymentUnit, beanName, MessageDrivenBeanMetaData.class);
             final String beanClassName;
             final String messageListenerInterfaceName;
-            final Properties activationConfigProperties = getActivationConfigProperties(messageBeanAnnotation);
+            final PropertyResolver propertyResolver = deploymentUnit.getAttachment(org.jboss.as.ee.metadata.property.Attachments.FINAL_PROPERTY_RESOLVER);
+            final PropertyReplacer propertyReplacer = PropertyReplacers.resolvingReplacer(propertyResolver);
+            final Properties activationConfigProperties = getActivationConfigProperties(messageBeanAnnotation, propertyReplacer);
             final String messagingType;
             if (beanMetaData != null) {
                 beanClassName = override(beanClassInfo.name().toString(), beanMetaData.getEjbClass());
@@ -244,13 +249,13 @@
         addComponent(deploymentUnit, mdbComponentDescription);
     }
 
-    private Properties getActivationConfigProperties(final AnnotationInstance messageBeanAnnotation) {
+    private Properties getActivationConfigProperties(final AnnotationInstance messageBeanAnnotation, PropertyReplacer propertyReplacer) {
         final Properties props = new Properties();
         final AnnotationValue activationConfig = messageBeanAnnotation.value("activationConfig");
         if (activationConfig == null)
             return props;
         for (final AnnotationInstance propAnnotation : activationConfig.asNestedArray()) {
-            props.put(propAnnotation.value("propertyName").asString(), propAnnotation.value("propertyValue").asString());
+            props.put(propAnnotation.value("propertyName").asString(), propertyReplacer.replaceProperties(propAnnotation.value("propertyValue").asString()));
         }
         return props;
     }

Do  you have any suggestions?

Luca