[jboss-svn-commits] JBL Code SVN: r35043 - in labs/jbosstm/trunk: ArjunaCore/txoj/classes/com/arjuna/ats/txoj/common and 6 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Sep 7 09:11:14 EDT 2010


Author: jhalliday
Date: 2010-09-07 09:11:13 -0400 (Tue, 07 Sep 2010)
New Revision: 35043

Modified:
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/arjPropertyManager.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/recoveryPropertyManager.java
   labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/common/txojPropertyManager.java
   labs/jbosstm/trunk/ArjunaJTA/jdbc/classes/com/arjuna/ats/jdbc/common/jdbcPropertyManager.java
   labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/common/jtaPropertyManager.java
   labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/jts/common/jtsPropertyManager.java
   labs/jbosstm/trunk/ArjunaJTS/orbportability/classes/com/arjuna/orbportability/common/opPropertyManager.java
   labs/jbosstm/trunk/XTS/WS-C/dev/src/org/jboss/jbossts/xts/environment/XTSPropertyManager.java
   labs/jbosstm/trunk/common/classes/com/arjuna/common/internal/util/propertyservice/BeanPopulator.java
Log:
Change property mechanism to allow multiple, named instances of the various environment bean classes. JBTM-787


Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/arjPropertyManager.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/arjPropertyManager.java	2010-09-07 09:42:12 UTC (rev 35042)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/arjPropertyManager.java	2010-09-07 13:11:13 UTC (rev 35043)
@@ -42,16 +42,16 @@
 {
     public static CoreEnvironmentBean getCoreEnvironmentBean()
     {
-        return BeanPopulator.getSingletonInstance(CoreEnvironmentBean.class);
+        return BeanPopulator.getDefaultInstance(CoreEnvironmentBean.class);
     }
 
     public static CoordinatorEnvironmentBean getCoordinatorEnvironmentBean()
     {
-        return BeanPopulator.getSingletonInstance(CoordinatorEnvironmentBean.class);
+        return BeanPopulator.getDefaultInstance(CoordinatorEnvironmentBean.class);
     }
 
     public static ObjectStoreEnvironmentBean getObjectStoreEnvironmentBean()
     {
-        return BeanPopulator.getSingletonInstance(ObjectStoreEnvironmentBean.class);
+        return BeanPopulator.getDefaultInstance(ObjectStoreEnvironmentBean.class);
     }
 }

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/recoveryPropertyManager.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/recoveryPropertyManager.java	2010-09-07 09:42:12 UTC (rev 35042)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/recoveryPropertyManager.java	2010-09-07 13:11:13 UTC (rev 35043)
@@ -30,6 +30,6 @@
 {
     public static RecoveryEnvironmentBean getRecoveryEnvironmentBean()
     {
-        return BeanPopulator.getSingletonInstance(RecoveryEnvironmentBean.class);
+        return BeanPopulator.getDefaultInstance(RecoveryEnvironmentBean.class);
     }
 }
\ No newline at end of file

Modified: labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/common/txojPropertyManager.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/common/txojPropertyManager.java	2010-09-07 09:42:12 UTC (rev 35042)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/common/txojPropertyManager.java	2010-09-07 13:11:13 UTC (rev 35043)
@@ -42,6 +42,6 @@
 {
     public static TxojEnvironmentBean getTxojEnvironmentBean()
     {
-        return BeanPopulator.getSingletonInstance(TxojEnvironmentBean.class);
+        return BeanPopulator.getDefaultInstance(TxojEnvironmentBean.class);
     }
 }
\ No newline at end of file

Modified: labs/jbosstm/trunk/ArjunaJTA/jdbc/classes/com/arjuna/ats/jdbc/common/jdbcPropertyManager.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jdbc/classes/com/arjuna/ats/jdbc/common/jdbcPropertyManager.java	2010-09-07 09:42:12 UTC (rev 35042)
+++ labs/jbosstm/trunk/ArjunaJTA/jdbc/classes/com/arjuna/ats/jdbc/common/jdbcPropertyManager.java	2010-09-07 13:11:13 UTC (rev 35043)
@@ -32,8 +32,6 @@
 
 import com.arjuna.common.internal.util.propertyservice.BeanPopulator;
 
-import java.util.concurrent.atomic.AtomicBoolean;
-
 /**
  * Property manager wrapper for the JDBC module.
  */
@@ -41,6 +39,6 @@
 {
     public static JDBCEnvironmentBean getJDBCEnvironmentBean()
     {
-        return BeanPopulator.getSingletonInstance(JDBCEnvironmentBean.class);
+        return BeanPopulator.getDefaultInstance(JDBCEnvironmentBean.class);
     }
 }

Modified: labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/common/jtaPropertyManager.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/common/jtaPropertyManager.java	2010-09-07 09:42:12 UTC (rev 35042)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/common/jtaPropertyManager.java	2010-09-07 13:11:13 UTC (rev 35043)
@@ -39,6 +39,6 @@
 {
     public static JTAEnvironmentBean getJTAEnvironmentBean()
     {
-        return BeanPopulator.getSingletonInstance(JTAEnvironmentBean.class);
+        return BeanPopulator.getDefaultInstance(JTAEnvironmentBean.class);
     }
 }

Modified: labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/jts/common/jtsPropertyManager.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/jts/common/jtsPropertyManager.java	2010-09-07 09:42:12 UTC (rev 35042)
+++ labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/jts/common/jtsPropertyManager.java	2010-09-07 13:11:13 UTC (rev 35043)
@@ -40,6 +40,6 @@
 {
     public static JTSEnvironmentBean getJTSEnvironmentBean()
     {
-        return BeanPopulator.getSingletonInstance(JTSEnvironmentBean.class);
+        return BeanPopulator.getDefaultInstance(JTSEnvironmentBean.class);
     }
 }

Modified: labs/jbosstm/trunk/ArjunaJTS/orbportability/classes/com/arjuna/orbportability/common/opPropertyManager.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTS/orbportability/classes/com/arjuna/orbportability/common/opPropertyManager.java	2010-09-07 09:42:12 UTC (rev 35042)
+++ labs/jbosstm/trunk/ArjunaJTS/orbportability/classes/com/arjuna/orbportability/common/opPropertyManager.java	2010-09-07 13:11:13 UTC (rev 35043)
@@ -42,6 +42,6 @@
 {
     public static OrbPortabilityEnvironmentBean getOrbPortabilityEnvironmentBean()
     {
-        return BeanPopulator.getSingletonInstance(OrbPortabilityEnvironmentBean.class);
+        return BeanPopulator.getDefaultInstance(OrbPortabilityEnvironmentBean.class);
     }
 }

Modified: labs/jbosstm/trunk/XTS/WS-C/dev/src/org/jboss/jbossts/xts/environment/XTSPropertyManager.java
===================================================================
--- labs/jbosstm/trunk/XTS/WS-C/dev/src/org/jboss/jbossts/xts/environment/XTSPropertyManager.java	2010-09-07 09:42:12 UTC (rev 35042)
+++ labs/jbosstm/trunk/XTS/WS-C/dev/src/org/jboss/jbossts/xts/environment/XTSPropertyManager.java	2010-09-07 13:11:13 UTC (rev 35043)
@@ -2,8 +2,6 @@
 
 import com.arjuna.common.internal.util.propertyservice.BeanPopulator;
 
-import java.io.IOException;
-import java.io.InputStream;
 import java.util.Enumeration;
 import java.util.Properties;
 
@@ -15,27 +13,27 @@
 {
     public static  WSCEnvironmentBean getWSCEnvironmentBean()
     {
-        return BeanPopulator.getSingletonInstance(WSCEnvironmentBean.class, xtsProperties);
+        return BeanPopulator.getDefaultInstance(WSCEnvironmentBean.class, xtsProperties);
     }
 
     public static WSCFEnvironmentBean getWSCFEnvironmentBean()
     {
-        return BeanPopulator.getSingletonInstance(WSCFEnvironmentBean.class, xtsProperties);
+        return BeanPopulator.getDefaultInstance(WSCFEnvironmentBean.class, xtsProperties);
     }
 
     public static WSTEnvironmentBean getWSTEnvironmentBean()
     {
-        return BeanPopulator.getSingletonInstance(WSTEnvironmentBean.class, xtsProperties);
+        return BeanPopulator.getDefaultInstance(WSTEnvironmentBean.class, xtsProperties);
     }
 
     public static RecoveryEnvironmentBean getRecoveryEnvironmentBean()
     {
-        return BeanPopulator.getSingletonInstance(RecoveryEnvironmentBean.class, xtsProperties);
+        return BeanPopulator.getDefaultInstance(RecoveryEnvironmentBean.class, xtsProperties);
     }
 
     public static XTSEnvironmentBean getXTSEnvironmentBean()
     {
-        return BeanPopulator.getSingletonInstance(XTSEnvironmentBean.class, xtsProperties);
+        return BeanPopulator.getDefaultInstance(XTSEnvironmentBean.class, xtsProperties);
     }
 
     private static Properties mergeSystemProperties(Properties properties)

Modified: labs/jbosstm/trunk/common/classes/com/arjuna/common/internal/util/propertyservice/BeanPopulator.java
===================================================================
--- labs/jbosstm/trunk/common/classes/com/arjuna/common/internal/util/propertyservice/BeanPopulator.java	2010-09-07 09:42:12 UTC (rev 35042)
+++ labs/jbosstm/trunk/common/classes/com/arjuna/common/internal/util/propertyservice/BeanPopulator.java	2010-09-07 13:11:13 UTC (rev 35043)
@@ -36,34 +36,53 @@
  */
 public class BeanPopulator
 {
-    private static final ConcurrentMap<Class, Object> singletonBeanInstances = new ConcurrentHashMap<Class, Object>();
+    private static final ConcurrentMap<String, Object> beanInstances = new ConcurrentHashMap<String, Object>();
+    private static final String DEFAULT_NAME = "default";
 
-    public static <T> T getSingletonInstance(Class<T> beanClass) throws RuntimeException {
-        return getSingletonInstance(beanClass, null);
+    public static <T> T getDefaultInstance(Class<T> beanClass) throws RuntimeException {
+        return getNamedInstance(beanClass, DEFAULT_NAME, null);
     }
-    public static <T> T getSingletonInstance(Class<T> beanClass, Properties properties) throws RuntimeException {
 
+    public static <T> T getDefaultInstance(Class<T> beanClass, Properties properties) throws RuntimeException {
+        return getNamedInstance(beanClass, DEFAULT_NAME, properties);
+    }
+
+    public static <T> T getNamedInstance(Class<T> beanClass, String name) throws RuntimeException {
+        return getNamedInstance(beanClass, name, null);
+    }
+
+    public static <T> T getNamedInstance(Class<T> beanClass, String name, Properties properties) throws RuntimeException {
+
+        if(name == null) {
+            name = DEFAULT_NAME;
+        }
+        String key = beanClass.getCanonicalName()+":"+name;
+
         // we don't mind sometimes instantiating the bean multiple times,
         // as long as the duplicates never escape into the outside world.
-        if(!singletonBeanInstances.containsKey(beanClass)) {
+        if(!beanInstances.containsKey(key)) {
             T bean = null;
             try {
                 bean = beanClass.newInstance();
                 if (properties != null) {
-                    configureFromProperties(bean, properties);
+                    configureFromProperties(bean, name, properties);
                 } else {
                     Properties defaultProperties = PropertiesFactory.getDefaultProperties();
-                    configureFromProperties(bean, defaultProperties);
+                    configureFromProperties(bean, name, defaultProperties);
                 }
             } catch (Exception e) {
                 throw new RuntimeException(e);
             }
-            singletonBeanInstances.putIfAbsent(beanClass, bean);
+            beanInstances.putIfAbsent(key, bean);
         }
 
-        return (T)singletonBeanInstances.get(beanClass);
+        return (T) beanInstances.get(key);
     }
 
+    public static void configureFromProperties(Object bean, Properties properties) throws Exception {
+        configureFromProperties(bean, DEFAULT_NAME, properties);
+    }
+
     /**
      * Examine the properties of the provided bean and update them to match the values of the corresponding
      * properties in the Properties.
@@ -74,13 +93,16 @@
      * matching according to the JavaBeans naming conventions, determine the corresponding property key.
      *
      * Several key names are tried, with the first match being used:
-     * For scalar properties: The FQN of the bean followed by the field name,
-     *   the short name of the bean followed by the field name, and finally the bean classes' PropertyPrefix annotation
+     * For scalar properties: The FQN of the bean class, optionally followed by the bean name, followed by the field name,
+     *  e.g. com.arjuna.FooBean.theField or com.arjuna.FooBean.theName.theField
+     *   the short class name of the bean, optionally followed by the bean name, followed by the field name,
+     *  e.g. FooBean.theField or FooBean.theName.theField
+     *  and finally the bean classes' PropertyPrefix annotation
      *   value followed by the name of the field, the last being except in cases where the field has a FullPropertyName
      *   annotation, in which case its value is used instead.
      * For vector (in the math sense - the type is actually normally List/Map) properties, a single property key matched
      *   according to the prior rules will be treated as having a compound value which will be tokenized into
-     *   elements based on whitespace and inserted into the list in token order or further tokenised on = for Map key/value.
+     *   elements based on whitespace and inserted into the list in token order or further tokenized on = for Map key/value.
      * If no such key is found, the value of the field's ConcatenationPrefix annotation
      * is treated as a name prefix and the list elements are assembled from the values of any properties having
      * key values starting with the prefix. These are inserted into the list in order of the key's name sort position.
@@ -94,10 +116,11 @@
      * from the value read from the Properties, use the setter to update the bean.
      *
      * @param bean a JavaBean, the target of the property updates and source for defaults.
+     * @param instanceName the (optional, use null for default) name for the bean instance.
      * @param properties a Properties object, the source of the configuration overrides.
      * @throws Exception if the configuration of the bean fails.
      */
-    public static void configureFromProperties(Object bean, Properties properties) throws Exception {
+    public static void configureFromProperties(Object bean, String instanceName, Properties properties) throws Exception {
 
         if(!bean.getClass().isAnnotationPresent(PropertyPrefix.class)) {
             throw new Exception("no PropertyPrefix found on "+bean.getClass().getName());
@@ -129,9 +152,9 @@
             }
 
             if(field.isAnnotationPresent(ConcatenationPrefix.class) || field.getType().getName().startsWith("java.util")) {
-                handleGroupProperty(bean, properties, field, setter, getter);
+                handleGroupProperty(bean, instanceName, properties, field, setter, getter);
             } else {
-                handleSimpleProperty(bean, properties, field, setter, getter);
+                handleSimpleProperty(bean, instanceName, properties, field, setter, getter);
             }
         }
     }
@@ -147,18 +170,18 @@
      */
     public static String printState() {
         StringBuffer buffer = new StringBuffer();
-        for(Object bean : singletonBeanInstances.values()) {
+        for(Object bean : beanInstances.values()) {
             printBean(bean, buffer);
         }
         return buffer.toString();
     }
 
-    private static void handleGroupProperty(Object bean, Properties properties, Field field, Method setter, Method getter)
+    private static void handleGroupProperty(Object bean, String instanceName, Properties properties, Field field, Method setter, Method getter)
         throws Exception
     {
         List<String> lines = new LinkedList<String>();
 
-        String valueFromProperties = getValueFromProperties(bean, properties, field, bean.getClass().getSimpleName());
+        String valueFromProperties = getValueFromProperties(bean, instanceName, properties, field, bean.getClass().getSimpleName());
 
         if(valueFromProperties != null)
         {
@@ -229,13 +252,13 @@
         }
     }
 
-    private static void handleSimpleProperty(Object bean, Properties properties, Field field, Method setter, Method getter)
+    private static void handleSimpleProperty(Object bean, String instanceName, Properties properties, Field field, Method setter, Method getter)
             throws Exception
     {
         PropertyPrefix prefixAnnotation = bean.getClass().getAnnotation(PropertyPrefix.class);
         String prefix = prefixAnnotation.prefix();
 
-        String valueFromProperties = getValueFromProperties(bean, properties, field, prefix);
+        String valueFromProperties = getValueFromProperties(bean, instanceName, properties, field, prefix);
 
         if(valueFromProperties != null) {
 
@@ -279,21 +302,41 @@
         }
     }
 
-    private static String getValueFromProperties(Object bean, Properties properties, Field field, String prefix)
+    private static String getValueFromProperties(Object bean, String instanceName, Properties properties, Field field, String prefix)
     {
         String propertyFileKey;
         String valueFromProperties = null;
 
+        if(instanceName == null) {
+            instanceName = DEFAULT_NAME;
+        }
+
         if(valueFromProperties == null) {
-            propertyFileKey = bean.getClass().getCanonicalName()+"."+field.getName();
-            valueFromProperties = properties.getProperty(propertyFileKey);
+
+            if(DEFAULT_NAME.equals(instanceName)) {
+                propertyFileKey = bean.getClass().getCanonicalName()+"."+field.getName();
+                valueFromProperties = properties.getProperty(propertyFileKey);
+            }
+
+            if(valueFromProperties == null) {
+                propertyFileKey = bean.getClass().getCanonicalName()+"."+instanceName+"."+field.getName();
+                valueFromProperties = properties.getProperty(propertyFileKey);
+            }
         }
 
         if(valueFromProperties == null) {
-            propertyFileKey = bean.getClass().getSimpleName()+"."+field.getName();
-            valueFromProperties = properties.getProperty(propertyFileKey);
+
+            if(DEFAULT_NAME.equals(instanceName)) {
+                propertyFileKey = bean.getClass().getSimpleName()+"."+field.getName();
+                valueFromProperties = properties.getProperty(propertyFileKey);
+            }
+
+            if(valueFromProperties == null) {
+                propertyFileKey = bean.getClass().getSimpleName()+"."+instanceName+"."+field.getName();
+                valueFromProperties = properties.getProperty(propertyFileKey);
+            }
         }
-
+        
         if (valueFromProperties == null) {
             propertyFileKey = prefix+field.getName();
 



More information about the jboss-svn-commits mailing list