[jboss-cvs] JBossAS SVN: r111872 - in projects/jboss-jca/trunk/core/src: test/java/org/jboss/jca/core/inflow and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Jul 28 13:34:20 EDT 2011


Author: jesper.pedersen
Date: 2011-07-28 13:34:20 -0400 (Thu, 28 Jul 2011)
New Revision: 111872

Modified:
   projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/rar/ActivationImpl.java
   projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/rar/SimpleResourceAdapterRepository.java
   projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/inflow/HornetQTestCase.java
Log:
[JBJCA-638] ActivationSpec config-property map not updated with introspected properties

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/rar/ActivationImpl.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/rar/ActivationImpl.java	2011-07-28 16:07:47 UTC (rev 111871)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/rar/ActivationImpl.java	2011-07-28 17:34:20 UTC (rev 111872)
@@ -113,4 +113,23 @@
 
       return instance;
    }
+
+   /**
+    * String representation
+    * @return The string
+    */
+   @Override
+   public String toString()
+   {
+      StringBuilder sb = new StringBuilder();
+
+      sb.append("ActivationImpl@").append(Integer.toHexString(System.identityHashCode(this)));
+      sb.append("[rar=").append(rar != null ? rar.get() : "null");
+      sb.append(" activationSpecClass=").append(activationSpecClass != null ? activationSpecClass.get() : "null");
+      sb.append(" configProperties=").append(configProperties);
+      sb.append(" requiredConfigProperties=").append(requiredConfigProperties);
+      sb.append("]");
+
+      return sb.toString();
+   }
 }

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/rar/SimpleResourceAdapterRepository.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/rar/SimpleResourceAdapterRepository.java	2011-07-28 16:07:47 UTC (rev 111871)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/rar/SimpleResourceAdapterRepository.java	2011-07-28 17:34:20 UTC (rev 111872)
@@ -35,12 +35,14 @@
 import org.jboss.jca.core.spi.rar.ResourceAdapterRepository;
 
 import java.lang.ref.WeakReference;
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -64,6 +66,9 @@
    private static CoreLogger log = Logger.getMessageLogger(CoreLogger.class, 
       SimpleResourceAdapterRepository.class.getName());
 
+   /** The approved types */
+   private static Set<Class<?>> approvedTypes;
+
    /** Resource adapters */
    private Map<String, WeakReference<ResourceAdapter>> rars;
 
@@ -73,6 +78,29 @@
    /** The metadata repository */
    private MetadataRepository mdr;
 
+   // We include the primitive types because we can handle those
+   static
+   {
+      approvedTypes = new HashSet<Class<?>>();
+      approvedTypes.add(boolean.class);
+      approvedTypes.add(Boolean.class);
+      approvedTypes.add(byte.class);
+      approvedTypes.add(Byte.class);
+      approvedTypes.add(short.class);
+      approvedTypes.add(Short.class);
+      approvedTypes.add(int.class);
+      approvedTypes.add(Integer.class);
+      approvedTypes.add(long.class);
+      approvedTypes.add(Long.class);
+      approvedTypes.add(float.class);
+      approvedTypes.add(Float.class);
+      approvedTypes.add(double.class);
+      approvedTypes.add(Double.class);
+      approvedTypes.add(char.class);
+      approvedTypes.add(Character.class);
+      approvedTypes.add(String.class);
+   }
+
    /**
     * Constructor
     */
@@ -350,6 +378,7 @@
          Set<String> requiredConfigProperties = new HashSet<String>();
 
          Activationspec15 as = ml.getActivationspec();
+         Class<?> asClz = Class.forName(as.getActivationspecClass().getValue(), true, cl);
 
          List<? extends ConfigProperty> cps = as.getConfigProperties();
          if (cps != null && cps.size() > 0)
@@ -363,6 +392,8 @@
             }
          }
 
+         configProperties.putAll(introspectActivationSpec(asClz));
+
          List<? extends RequiredConfigProperty> rcps = as.getRequiredConfigProperties();
          if (rcps != null && rcps.size() > 0)
          {
@@ -374,8 +405,6 @@
             }
          }
 
-         Class<?> asClz = Class.forName(as.getActivationspecClass().getValue(), true, cl);
-
          ActivationImpl a = new ActivationImpl(rar,
                                                asClz,
                                                Collections.unmodifiableMap(configProperties),
@@ -390,4 +419,44 @@
          throw ie;
       }
    }
+
+   /**
+    * Introspect an activation spec class for config-property's
+    * @param clz The class
+    * @return The introspected map
+    */
+   private Map<String, Class<?>> introspectActivationSpec(Class<?> clz)
+   {
+      Map<String, Class<?>> result = new HashMap<String, Class<?>>();
+
+      if (clz != null)
+      {
+         Method[] methods = clz.getMethods();
+         if (methods != null && methods.length > 0)
+         {
+            for (int i = 0; i < methods.length; i++)
+            {
+               Method m = methods[i];
+
+               if (m.getName().startsWith("set") && m.getParameterTypes().length == 1)
+               {
+                  Class<?> parameterType = m.getParameterTypes()[0];
+                  
+                  if (approvedTypes.contains(parameterType))
+                  {
+                     String n = m.getName().substring(3);
+                     String name = n.substring(0, 1).toLowerCase(Locale.US);
+
+                     if (n.length() > 1)
+                        name = name.concat(n.substring(1));
+
+                     result.put(name, parameterType);
+                  }
+               }
+            }
+         }
+      }
+
+      return result;
+   }
 }

Modified: projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/inflow/HornetQTestCase.java
===================================================================
--- projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/inflow/HornetQTestCase.java	2011-07-28 16:07:47 UTC (rev 111871)
+++ projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/inflow/HornetQTestCase.java	2011-07-28 17:34:20 UTC (rev 111872)
@@ -24,6 +24,7 @@
 
 import org.jboss.jca.core.inflow.support.HornetQMessageEndpoint;
 import org.jboss.jca.core.inflow.support.HornetQMessageEndpointFactory;
+import org.jboss.jca.core.spi.rar.Activation;
 import org.jboss.jca.core.spi.rar.Endpoint;
 import org.jboss.jca.core.spi.rar.MessageListener;
 import org.jboss.jca.core.spi.rar.ResourceAdapterRepository;
@@ -168,8 +169,19 @@
          assertEquals(1, listeners.size());
 
          MessageListener listener = listeners.get(0);
+         Activation activation = listener.getActivation();
 
-         ActivationSpec as = listener.getActivation().createInstance();
+         log.debug("Activation=" + activation);
+
+         assertNotNull(activation);
+
+         assertNotNull(activation.getConfigProperties());
+         assertTrue(activation.getConfigProperties().size() > 0);
+
+         assertNotNull(activation.getRequiredConfigProperties());
+         assertTrue(activation.getRequiredConfigProperties().size() > 0);
+
+         ActivationSpec as = activation.createInstance();
          assertNotNull(as);
          assertNotNull(as.getResourceAdapter());
 



More information about the jboss-cvs-commits mailing list