[jboss-svn-commits] JBL Code SVN: r32466 - in labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats: jta/common and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Apr 7 11:51:30 EDT 2010


Author: jhalliday
Date: 2010-04-07 11:51:30 -0400 (Wed, 07 Apr 2010)
New Revision: 32466

Modified:
   labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/resources/XAResourceErrorHandler.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
Log:
Continue moving class loading responsibility to the environment bean classes. JBTM-735


Modified: labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/resources/XAResourceErrorHandler.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/resources/XAResourceErrorHandler.java	2010-04-07 15:46:50 UTC (rev 32465)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/resources/XAResourceErrorHandler.java	2010-04-07 15:51:30 UTC (rev 32466)
@@ -60,22 +60,9 @@
 
     static
     {
-        for(String theClass : jtaPropertyManager.getJTAEnvironmentBean().getXaErrorHandlers())
+        for(XAResourceMap xaResourceMap : jtaPropertyManager.getJTAEnvironmentBean().getXaResourceMaps())
         {
-            // Given the recovery string, create the class it refers to and store it.
-
-            try
-            {
-                Class c = Thread.currentThread().getContextClassLoader().loadClass(theClass);
-
-                XAResourceMap map = (XAResourceMap) c.newInstance();
-
-                XAResourceErrorHandler.addXAResourceMap(map.getXAResourceName(), map);
-            }
-            catch (Exception ex)
-            {
-                ex.printStackTrace();
-            }
+            XAResourceErrorHandler.addXAResourceMap(xaResourceMap.getXAResourceName(), xaResourceMap);
         }
     }
 }

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:46:50 UTC (rev 32465)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/common/JTAEnvironmentBean.java	2010-04-07 15:51:30 UTC (rev 32466)
@@ -23,6 +23,7 @@
 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.ats.jta.resources.XAResourceMap;
 import com.arjuna.common.internal.util.propertyservice.PropertyPrefix;
 import com.arjuna.common.internal.util.propertyservice.FullPropertyName;
 import com.arjuna.common.internal.util.propertyservice.ConcatenationPrefix;
@@ -74,7 +75,8 @@
     private volatile String transactionSynchronizationRegistryJNDIContext = "java:/TransactionSynchronizationRegistry";
 
     @ConcatenationPrefix(prefix = "com.arjuna.ats.jta.xaErrorHandler")
-    private volatile List<String> xaErrorHandlers = new ArrayList<String>();
+    private volatile List<String> xaResourceMapClassNames = new ArrayList<String>();
+    private volatile List<XAResourceMap> xaResourceMaps = null;
 
     private volatile boolean xaTransactionTimeoutEnabled = true;
     private volatile String lastResourceOptimisationInterface = null;
@@ -669,35 +671,92 @@
     }
 
     /**
-     * Returns the set of XAResourceMap implementation classnames used to configure XAException handling.
+     * Returns the set of XAResourceMap implementation class names used to configure XAException handling.
      * The returned list is a copy. May return an empty list, will not return null.
      *
      * Default: empty list.
      * Equivalent deprecated property prefix: com.arjuna.ats.jta.xaErrorHandler
      *
-     * @return a set of classnames, each an implementation of XAResourceMap.
+     * @return a set of class names, each an implementation of XAResourceMap.
      */
-    public List<String> getXaErrorHandlers()
+    public List<String> getXaResourceMapClassNames()
     {
-        return new ArrayList<String>(xaErrorHandlers);
+        synchronized(this)
+        {
+            return new ArrayList<String>(xaResourceMapClassNames);
+        }
     }
 
     /**
      * Sets the names of the XAResourceMap classes used for XAException handling.
      * The provided list will be copied, not retained.
      *
-     * @param xaErrorHandlers a set of names of classes, each implementing XAResourceMap.
+     * @param xaResourceMapClassNames a set of names of classes, each implementing XAResourceMap.
      */
-    public void setXaErrorHandlers(List<String> xaErrorHandlers)
+    public void setXaResourceMapClassNames(List<String> xaResourceMapClassNames)
     {
-        if(xaErrorHandlers == null) {
-            this.xaErrorHandlers = new ArrayList<String>();
-        } else {
-            this.xaErrorHandlers = new ArrayList<String>(xaErrorHandlers);
+        synchronized(this)
+        {
+            if(xaResourceMapClassNames == null)
+            {
+                this.xaResourceMaps = null;
+                this.xaResourceMapClassNames = new ArrayList<String>();
+            }
+            else if(!xaResourceMapClassNames.equals(this.xaResourceMapClassNames))
+            {
+                this.xaResourceMaps = null;
+                this.xaResourceMapClassNames = new ArrayList<String>(xaResourceMapClassNames);
+            }
         }
     }
 
     /**
+     * Returns the set of XAResourceMap 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 XAResourceMap instances.
+     */
+    public List<XAResourceMap> getXaResourceMaps()
+    {
+        synchronized(this)
+        {
+            if(xaResourceMaps == null) {
+                List<XAResourceMap> instances = ClassloadingUtility.loadAndInstantiateClassesWithInit(XAResourceMap.class, xaResourceMapClassNames);
+                xaResourceMaps = instances;
+            }
+            return new ArrayList<XAResourceMap>(xaResourceMaps);
+        }
+    }
+
+    /**
+     * Sets the instances of XAResourceMap.
+     * The provided list will be copied, not retained.
+     *
+     * @param xaResourceMaps the set of XAResourceMap instances.
+     */
+    public void setXaResourceMaps(List<XAResourceMap> xaResourceMaps)
+    {
+        synchronized(this)
+        {
+            if(xaResourceMaps == null)
+            {
+                this.xaResourceMaps = new ArrayList<XAResourceMap>();
+                this.xaResourceMapClassNames = new ArrayList<String>();
+            }
+            else
+            {
+                this.xaResourceMaps = new ArrayList<XAResourceMap>(xaResourceMaps);
+                List<String> names = ClassloadingUtility.getNamesForClasses(this.xaResourceMaps);
+                this.xaResourceMapClassNames = names;
+            }
+        }
+    }
+
+    /**
      * Returns if the transaction timeout is passed on to the enlisted XAResources.
      *
      * Default: true.

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:46:50 UTC (rev 32465)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/common/JTAEnvironmentBeanMBean.java	2010-04-07 15:51:30 UTC (rev 32466)
@@ -77,9 +77,9 @@
 
     void setTransactionSynchronizationRegistryJNDIContext(String jtaTSRJNDIContext);
 
-    List<String> getXaErrorHandlers();
+    List<String> getXaResourceMapClassNames();
 
-    void setXaErrorHandlers(List<String> xaErrorHandlers);
+    void setXaResourceMapClassNames(List<String> xaErrorHandlers);
     
     boolean isXaTransactionTimeoutEnabled();
 



More information about the jboss-svn-commits mailing list