[jboss-svn-commits] JBL Code SVN: r32463 - in labs/jbosstm/trunk: ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/recovery/arjunacore and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Apr 7 11:16:55 EDT 2010


Author: jhalliday
Date: 2010-04-07 11:16:53 -0400 (Wed, 07 Apr 2010)
New Revision: 32463

Modified:
   labs/jbosstm/trunk/ArjunaJTA/jbossts-properties-arjunajta.xml
   labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/recovery/arjunacore/XARecoveryModule.java
   labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/common/JTAEnvironmentBean.java
   labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/common/JTAEnvironmentBeanMBean.java
   labs/jbosstm/trunk/ArjunaJTS/jbossts-properties-arjunajts.xml
   labs/jbosstm/trunk/common/classes/com/arjuna/common/internal/util/propertyservice/BeanPopulator.java
Log:
Continue moving class loading responsibility to the environment bean classes. JBTM-735


Modified: labs/jbosstm/trunk/ArjunaJTA/jbossts-properties-arjunajta.xml
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jbossts-properties-arjunajta.xml	2010-04-07 15:09:16 UTC (rev 32462)
+++ labs/jbosstm/trunk/ArjunaJTA/jbossts-properties-arjunajta.xml	2010-04-07 15:16:53 UTC (rev 32463)
@@ -64,7 +64,7 @@
 	<!-- Which Xid types to recover -->
 	<entry key="JTAEnvironmentBean.xaRecoveryNodes">1</entry>
 
-    <entry key="JTAEnvironmentBean.xaResourceOrphanFilters">
+    <entry key="JTAEnvironmentBean.xaResourceOrphanFilterClassNames">
         com.arjuna.ats.internal.jta.recovery.arjunacore.JTATransactionLogXAResourceOrphanFilter
         com.arjuna.ats.internal.jta.recovery.arjunacore.JTANodeNameXAResourceOrphanFilter
     </entry>

Modified: labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/recovery/arjunacore/XARecoveryModule.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/recovery/arjunacore/XARecoveryModule.java	2010-04-07 15:09:16 UTC (rev 32462)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/recovery/arjunacore/XARecoveryModule.java	2010-04-07 15:16:53 UTC (rev 32463)
@@ -294,25 +294,7 @@
         }
 
         _xaRecoverers = jtaPropertyManager.getJTAEnvironmentBean().getXaResourceRecoveries();
-
-        for(String xaResourceOrphanFilterClassname : jtaPropertyManager.getJTAEnvironmentBean().getXaResourceOrphanFilters())
-        {
-            try
-            {
-                Class c = Thread.currentThread().getContextClassLoader().loadClass(xaResourceOrphanFilterClassname);
-                XAResourceOrphanFilter filter = (XAResourceOrphanFilter)c.newInstance();
-                _xaResourceOrphanFilters.add(filter);
-            }
-            catch(Exception e)
-            {
-                if (jtaLogger.loggerI18N.isWarnEnabled())
-                {
-                    jtaLogger.loggerI18N
-                            .warn("com.arjuna.ats.internal.jta.recovery.general",
-                                    new Object[] { e, xaResourceOrphanFilterClassname }, e);
-                }
-            }
-        }
+        _xaResourceOrphanFilters = jtaPropertyManager.getJTAEnvironmentBean().getXaResourceOrphanFilters();
     }
 
 	/**
@@ -1070,7 +1052,7 @@
 
     private final List<XAResourceRecoveryHelper> _xaResourceRecoveryHelpers = new LinkedList<XAResourceRecoveryHelper>();
 
-    private final List<XAResourceOrphanFilter> _xaResourceOrphanFilters = new LinkedList<XAResourceOrphanFilter>();
+    private final List<XAResourceOrphanFilter> _xaResourceOrphanFilters;
 
     private Hashtable _failures = null;
 
@@ -1080,12 +1062,4 @@
 
 	private String _logName = null;
 
-	// 'type' within the Object Store for AtomicActions.
-	private String _transactionType = new AtomicAction().type();
-
-	// Reference to the Object Store.
-	private static ObjectStore _transactionStore = null;
-
-	private static final char BREAKCHARACTER = ';'; // delimiter for xaconnrecov
-	// property
 }

Modified: labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/common/JTAEnvironmentBean.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/common/JTAEnvironmentBean.java	2010-04-07 15:09:16 UTC (rev 32462)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/common/JTAEnvironmentBean.java	2010-04-07 15:16:53 UTC (rev 32463)
@@ -21,6 +21,7 @@
 package com.arjuna.ats.jta.common;
 
 import com.arjuna.ats.internal.arjuna.common.ClassloadingUtility;
+import com.arjuna.ats.jta.recovery.XAResourceOrphanFilter;
 import com.arjuna.ats.jta.recovery.XAResourceRecovery;
 import com.arjuna.common.internal.util.propertyservice.PropertyPrefix;
 import com.arjuna.common.internal.util.propertyservice.FullPropertyName;
@@ -58,7 +59,8 @@
     private volatile List<String> xaResourceRecoveryClassNames = new ArrayList<String>();
     private volatile List<XAResourceRecovery> xaResourceRecoveries = null;
 
-    private volatile List<String> xaResourceOrphanFilters = new ArrayList<String>();
+    private volatile List<String> xaResourceOrphanFilterClassNames = new ArrayList<String>();
+    private volatile List<XAResourceOrphanFilter> xaResourceOrphanFilters = null;
 
     private volatile boolean xaRollbackOptimization = false;
     private volatile boolean xaAssumeRecoveryComplete = false;
@@ -433,8 +435,8 @@
                 List<XAResourceRecovery> instances = ClassloadingUtility.loadAndInstantiateClassesWithInit(XAResourceRecovery.class, xaResourceRecoveryClassNames);
                 xaResourceRecoveries = instances;
             }
+            return new ArrayList<XAResourceRecovery>(xaResourceRecoveries);
         }
-        return new ArrayList<XAResourceRecovery>(xaResourceRecoveries);
     }
 
     /**
@@ -470,28 +472,85 @@
      *
      * @return a list of XAResourceOrphanFilter implementation class names.
      */
-    public List<String> getXaResourceOrphanFilters()
+    public List<String> getXaResourceOrphanFilterClassNames()
     {
-        return new ArrayList<String>(xaResourceOrphanFilters);
+        synchronized(this)
+        {
+            return new ArrayList<String>(xaResourceOrphanFilterClassNames);
+        }
     }
 
     /**
-     * Sets the XAResource orphan filters.
+     * Sets the class names of XAResourceOrphanFilter implementations.
      * List elements should be names of classes that implement XAResourceOrphanFilter.
      * The provided list will be copied, not retained.
      *
-     * @param xaResourceOrphanFilters a list of XAResourceOrphanFilter implementation classes.
+     * @param xaResourceOrphanFilterClassNames a list of XAResourceOrphanFilter implementation classes.
      */
-    public void setXaResourceOrphanFilters(List<String> xaResourceOrphanFilters)
+    public void setXaResourceOrphanFilterClassNames(List<String> xaResourceOrphanFilterClassNames)
     {
-        if(xaResourceOrphanFilters == null) {
-            this.xaResourceOrphanFilters = new ArrayList<String>();
-        } else {
-            this.xaResourceOrphanFilters = new ArrayList<String>(xaResourceOrphanFilters);
+        synchronized(this)
+        {
+            if(xaResourceOrphanFilterClassNames == null)
+            {
+                this.xaResourceOrphanFilters = null;
+                this.xaResourceOrphanFilterClassNames = new ArrayList<String>();
+            }
+            else if(!xaResourceOrphanFilterClassNames.equals(this.xaResourceOrphanFilterClassNames))
+            {
+                this.xaResourceOrphanFilters = null;
+                this.xaResourceOrphanFilterClassNames = new ArrayList<String>(xaResourceOrphanFilterClassNames);
+            }
         }
     }
 
     /**
+     * Returns the set of XAResourceOrphanFilter instances.
+     * The returned list is a copy. May return an empty list, will not return null.
+     *
+     * If there is no pre-instantiated instance set and classloading or instantiation of one or more
+     * elements fails, this method will log an appropriate warning and return a non-null set with
+     * fewer elements. 
+     *
+     * @return the set of XAResourceOrphanFilter instances.
+     */
+    public List<XAResourceOrphanFilter> getXaResourceOrphanFilters()
+    {
+        synchronized(this)
+        {
+            if(xaResourceOrphanFilters == null) {
+                List<XAResourceOrphanFilter> instances = ClassloadingUtility.loadAndInstantiateClassesWithInit(XAResourceOrphanFilter.class, xaResourceOrphanFilterClassNames);
+                xaResourceOrphanFilters = instances;
+            }
+            return new ArrayList<XAResourceOrphanFilter>(xaResourceOrphanFilters);
+        }
+    }
+
+    /**
+     * Sets the instances of XAResourceOrphanFilter.
+     * The provided list will be copied, not retained.
+     *
+     * @param xaResourceOrphanFilters the set of XAResourceOrphanFilter instances.
+     */
+    public void setXaResourceOrphanFilters(List<XAResourceOrphanFilter> xaResourceOrphanFilters)
+    {
+        synchronized(this)
+        {
+            if(xaResourceOrphanFilters == null)
+            {
+                this.xaResourceOrphanFilters = new ArrayList<XAResourceOrphanFilter>();
+                this.xaResourceOrphanFilterClassNames = new ArrayList<String>();
+            }
+            else
+            {
+                this.xaResourceOrphanFilters = new ArrayList<XAResourceOrphanFilter>(xaResourceOrphanFilters);
+                List<String> names = ClassloadingUtility.getNamesForClasses(this.xaResourceOrphanFilters);
+                this.xaResourceOrphanFilterClassNames = names;
+            }
+        }
+    }
+
+    /**
      * Returns if connections associated to XAResources that fail during prepare should be cleaned up immediately.
      * TODO move to JDBC module as it's only for our own connection manager?
      *

Modified: labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/common/JTAEnvironmentBeanMBean.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/common/JTAEnvironmentBeanMBean.java	2010-04-07 15:09:16 UTC (rev 32462)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/common/JTAEnvironmentBeanMBean.java	2010-04-07 15:16:53 UTC (rev 32463)
@@ -53,9 +53,9 @@
 
     void setXaResourceRecoveryClassNames(List<String> xaResourceRecoveryInstances);
 
-    List<String> getXaResourceOrphanFilters();
+    List<String> getXaResourceOrphanFilterClassNames();
 
-    void setXaResourceOrphanFilters(List<String> xaResourceOrphanFilters);
+    void setXaResourceOrphanFilterClassNames(List<String> xaResourceOrphanFilters);
 
     boolean isXaRollbackOptimization();
 

Modified: labs/jbosstm/trunk/ArjunaJTS/jbossts-properties-arjunajts.xml
===================================================================
--- labs/jbosstm/trunk/ArjunaJTS/jbossts-properties-arjunajts.xml	2010-04-07 15:09:16 UTC (rev 32462)
+++ labs/jbosstm/trunk/ArjunaJTS/jbossts-properties-arjunajts.xml	2010-04-07 15:16:53 UTC (rev 32463)
@@ -64,7 +64,7 @@
 	<!-- Which Xid types to recover -->
 	<entry key="JTAEnvironmentBean.xaRecoveryNodes">1</entry>
 
-    <entry key="JTAEnvironmentBean.xaResourceOrphanFilters">
+    <entry key="JTAEnvironmentBean.xaResourceOrphanFilterClassNames">
         com.arjuna.ats.internal.jta.recovery.arjunacore.JTATransactionLogXAResourceOrphanFilter
         com.arjuna.ats.internal.jta.recovery.arjunacore.JTANodeNameXAResourceOrphanFilter
     </entry>

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-04-07 15:09:16 UTC (rev 32462)
+++ labs/jbosstm/trunk/common/classes/com/arjuna/common/internal/util/propertyservice/BeanPopulator.java	2010-04-07 15:16:53 UTC (rev 32463)
@@ -193,13 +193,17 @@
             for(String name : listOfMatchingPropertyNames) {
                 String value = properties.getProperty(name);
                 lines.add(value);
-            }            
+            }
+
+            if(lines.size() == 0) {
+                return; // no relevant value in properties file, so leave bean defaults alone.
+            }
         }
 
         Object replacementValue = null;
 
         if(java.util.Map.class.isAssignableFrom(field.getType())) {
-            // we have a list but need a map. split eash element into key/value pair.
+            // we have a list but need a map. split each element into key/value pair.
             Map<String, String> map = new HashMap<String, String>();
             for(String element : lines) {
                 String[] tokens = element.split("=");



More information about the jboss-svn-commits mailing list