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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Mar 2 06:26:33 EST 2011


Author: jhalliday
Date: 2011-03-02 06:26:33 -0500 (Wed, 02 Mar 2011)
New Revision: 36769

Modified:
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/common/ClassloadingUtility.java
   labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/TransactionImple.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/ArjunaJTA/jta/classes/com/arjuna/ats/jta/logging/jtaI18NLogger.java
   labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/logging/jtaI18NLoggerImpl.java
   labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/TransactionImple.java
   labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/utils/jtaxI18NLogger.java
   labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/utils/jtaxI18NLoggerImpl.java
   labs/jbosstm/trunk/atsintegration/transaction-jboss-beans.xml
   labs/jbosstm/trunk/atsintegration/transaction-jboss-beans.xml.jts
   labs/jbosstm/trunk/common/tests/com/arjuna/common/tests/simple/EnvironmentBeanTest.java
Log:
Classloading changes. JBTM-828


Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/common/ClassloadingUtility.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/common/ClassloadingUtility.java	2011-03-02 10:42:34 UTC (rev 36768)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/common/ClassloadingUtility.java	2011-03-02 11:26:33 UTC (rev 36769)
@@ -36,9 +36,29 @@
  */
 public class ClassloadingUtility
 {
-    // this really belongs in common, but can't use logging from there at present.
+    // this really belongs in common...
 
     /**
+     * Load a class. No instantiation.
+     * 
+     * In the event of error (ClassNotFound etc) this method will log the error and return null.
+     *
+     * @param className the name of the class to load and instantiate.
+     * @return the specified Class, or null.
+     */
+    public static Class loadClass(String className) {
+        Class clazz;
+        try
+        {
+            clazz = Thread.currentThread().getContextClassLoader().loadClass( className ) ;
+        } catch(ClassNotFoundException e) {
+            tsLogger.i18NLogger.warn_common_ClassloadingUtility_2(className, e);
+            return null;
+        }
+        return clazz;
+    }
+
+    /**
      * Load, instantiate and return an instance of the named class, which is expected to be an implementation of
      * the specified interface.
      *
@@ -49,7 +69,7 @@
      * @param className the name of the class to load and instantiate.
      * @param environmentBeanInstanceName When the class ctor requires a *EnvironmentBean instance, the name of the bean.
      *   null for default ctor or default bean instance..
-     * @return an instantiate of the specified class, or null.
+     * @return an instance of the specified class, or null.
      */
     public static <T> T loadAndInstantiateClass(Class<T> iface, String className, String environmentBeanInstanceName)
     {
@@ -62,13 +82,8 @@
             return null;
         }
 
-        Class<?> clazz;
-
-        try
-        {
-            clazz = Thread.currentThread().getContextClassLoader().loadClass( className ) ;
-        } catch(ClassNotFoundException e) {
-            tsLogger.i18NLogger.warn_common_ClassloadingUtility_2(className, e);
+        Class<?> clazz = loadClass( className );
+        if(clazz == null) {
             return null;
         }
 
@@ -95,8 +110,7 @@
 
         } catch (ClassCastException e) {
             tsLogger.i18NLogger.warn_common_ClassloadingUtility_3(className, iface.getName(), e);
-        }
-        catch (InstantiationException e) {
+        } catch (InstantiationException e) {
             tsLogger.i18NLogger.warn_common_ClassloadingUtility_4(className, e);
         } catch (IllegalAccessException e) {
             tsLogger.i18NLogger.warn_common_ClassloadingUtility_5(className, e);

Modified: labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/TransactionImple.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/TransactionImple.java	2011-03-02 10:42:34 UTC (rev 36768)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/TransactionImple.java	2011-03-02 11:26:33 UTC (rev 36769)
@@ -1594,23 +1594,11 @@
 	{
         XA_TRANSACTION_TIMEOUT_ENABLED = jtaPropertyManager.getJTAEnvironmentBean().isXaTransactionTimeoutEnabled();
 
-		final String lastResourceOptimisationInterfaceName = jtaPropertyManager.getJTAEnvironmentBean().getLastResourceOptimisationInterface();
-  		Class lastResourceOptimisationInterface = null;
-		if (lastResourceOptimisationInterfaceName != null)
-		{
-			try
-			{
-				lastResourceOptimisationInterface = Thread.currentThread()
-						.getContextClassLoader().loadClass(
-								lastResourceOptimisationInterfaceName);
-			}
-			catch (final Throwable th)
-			{
-                jtaLogger.i18NLogger.warn_transaction_arjunacore_lastResourceOptimisationInterface(lastResourceOptimisationInterfaceName, th);
-			}
-		}
-		LAST_RESOURCE_OPTIMISATION_INTERFACE = lastResourceOptimisationInterface;
+        LAST_RESOURCE_OPTIMISATION_INTERFACE = jtaPropertyManager.getJTAEnvironmentBean().getLastResourceOptimisationInterface();
 
+        if(LAST_RESOURCE_OPTIMISATION_INTERFACE == null) {
+            jtaLogger.i18NLogger.warn_transaction_arjunacore_lastResourceOptimisationInterface(jtaPropertyManager.getJTAEnvironmentBean().getLastResourceOptimisationInterfaceClassName());
+        }
 	}
 
 	private static ConcurrentHashMap _transactions = new ConcurrentHashMap();

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	2011-03-02 10:42:34 UTC (rev 36768)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/common/JTAEnvironmentBean.java	2011-03-02 11:26:33 UTC (rev 36769)
@@ -79,8 +79,10 @@
     private volatile List<XAResourceMap> xaResourceMaps = null;
 
     private volatile boolean xaTransactionTimeoutEnabled = true;
-    private volatile String lastResourceOptimisationInterface = null;
 
+    private volatile String lastResourceOptimisationInterfaceClassName = null;
+    private volatile Class lastResourceOptimisationInterface = null;
+
     /**
      * Returns true if subtransactions are allowed.
      * Warning: subtransactions are not JTA spec compliant and most XA resource managers don't understand them.
@@ -129,11 +131,11 @@
         {
             if(transactionManagerClassName == null)
             {
-                this.transactionManagerClassName = null;
+                this.transactionManager = null;
             }
             else if(!transactionManagerClassName.equals(this.transactionManagerClassName))
             {
-                this.transactionManagerClassName = null;
+                this.transactionManager = null;
             }
             this.transactionManagerClassName = transactionManagerClassName;
         }
@@ -780,24 +782,66 @@
     }
 
     /**
-     * Returns the classname of the marker interface used to indicate a LastResource.
+     * Returns the class name of the marker interface used to indicate a LastResource.
      *
      * Default: null.
-     * Equivalent deprecated property: com.arjuna.ats.jta.lastResourceOptimisationInterface
+     * Equivalent deprecated property: com.arjuna.ats.jta.lastResourceOptimisationInterfaceClassName
      *
      * @return the classname of the market interface for LastResource handling.
      */
-    public String getLastResourceOptimisationInterface()
+    public String getLastResourceOptimisationInterfaceClassName()
     {
+        return lastResourceOptimisationInterfaceClassName;
+    }
+
+    /**
+     * Sets the class name of the marker interface used to indicate a LastResource.
+     *
+     * @param lastResourceOptimisationInterfaceClassName the class name of the marker interface.
+     */
+    public void setLastResourceOptimisationInterfaceClassName(String lastResourceOptimisationInterfaceClassName)
+    {
+        synchronized(this)
+        {
+            if(lastResourceOptimisationInterfaceClassName == null)
+            {
+                this.lastResourceOptimisationInterface = null;
+            }
+            else if(!lastResourceOptimisationInterfaceClassName.equals(this.lastResourceOptimisationInterfaceClassName))
+            {
+                this.lastResourceOptimisationInterface = null;
+            }
+            this.lastResourceOptimisationInterfaceClassName = lastResourceOptimisationInterfaceClassName;
+        }
+    }
+
+    /**
+     * Returns the Class representing the marker interface for LastResource.
+     *
+     * If there is no Class set and loading fails, this method will log an appropriate warning
+     * and return null, not throw an exception.
+     *
+     * @return the LastResource market interface.
+     */
+    public Class getLastResourceOptimisationInterface()
+    {
+        if(lastResourceOptimisationInterface == null && lastResourceOptimisationInterfaceClassName != null) {
+            synchronized(this) {
+                if(lastResourceOptimisationInterface == null && lastResourceOptimisationInterfaceClassName != null) {
+                    lastResourceOptimisationInterface = ClassloadingUtility.loadClass(lastResourceOptimisationInterfaceClassName);
+                }
+            }
+        }
+
         return lastResourceOptimisationInterface;
     }
 
     /**
-     * Sets the classname of the marker interface used to indicate a LastResource.
+     * Sets a Class to use as the marker interface for LastResource
      *
-     * @param lastResourceOptimisationInterface the classname of the marker interface.
+     * @param lastResourceOptimisationInterface a marker interface Class, or null.
      */
-    public void setLastResourceOptimisationInterface(String lastResourceOptimisationInterface)
+    public void setLastResourceOptimisationInterface(Class lastResourceOptimisationInterface)
     {
         this.lastResourceOptimisationInterface = lastResourceOptimisationInterface;
     }

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	2011-03-02 10:42:34 UTC (rev 36768)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/common/JTAEnvironmentBeanMBean.java	2011-03-02 11:26:33 UTC (rev 36769)
@@ -57,5 +57,5 @@
 
     boolean isXaTransactionTimeoutEnabled();
 
-    String getLastResourceOptimisationInterface();
+    String getLastResourceOptimisationInterfaceClassName();
 }

Modified: labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/logging/jtaI18NLogger.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/logging/jtaI18NLogger.java	2011-03-02 10:42:34 UTC (rev 36768)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/logging/jtaI18NLogger.java	2011-03-02 11:26:33 UTC (rev 36769)
@@ -303,7 +303,7 @@
 
 	@Message(id = 16069, value = "failed to load Last Resource Optimisation Interface {0}", format = MESSAGE_FORMAT)
 	@LogMessage(level = WARN)
-	public void warn_transaction_arjunacore_lastResourceOptimisationInterface(String arg0, @Cause() Throwable arg1);
+	public void warn_transaction_arjunacore_lastResourceOptimisationInterface(String arg0);
 
 	@Message(id = 16070, value = "{0} - could not mark {0} as rollback only", format = MESSAGE_FORMAT)
 	@LogMessage(level = WARN)

Modified: labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/logging/jtaI18NLoggerImpl.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/logging/jtaI18NLoggerImpl.java	2011-03-02 10:42:34 UTC (rev 36768)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/logging/jtaI18NLoggerImpl.java	2011-03-02 11:26:33 UTC (rev 36769)
@@ -269,8 +269,8 @@
 		return "ARJUNA-16068 Work already active!";
 	}
 
-	public void warn_transaction_arjunacore_lastResourceOptimisationInterface(String arg0, Throwable arg1) {
-		logger.logv(WARN, arg1, "ARJUNA-16069 failed to load Last Resource Optimisation Interface {0}", arg0);
+	public void warn_transaction_arjunacore_lastResourceOptimisationInterface(String arg0) {
+		logger.logv(WARN, "ARJUNA-16069 failed to load Last Resource Optimisation Interface {0}", arg0);
 	}
 
 	public void warn_transaction_arjunacore_markrollback(String arg0, String arg1) {

Modified: labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/TransactionImple.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/TransactionImple.java	2011-03-02 10:42:34 UTC (rev 36768)
+++ labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/TransactionImple.java	2011-03-02 11:26:33 UTC (rev 36769)
@@ -1755,20 +1755,12 @@
 	{
         XA_TRANSACTION_TIMEOUT_ENABLED = jtaPropertyManager.getJTAEnvironmentBean().isXaTransactionTimeoutEnabled();
 
-        final String lastResourceOptimisationInterfaceName = jtaPropertyManager.getJTAEnvironmentBean().getLastResourceOptimisationInterface();
-		Class lastResourceOptimisationInterface = null ;
-		if (lastResourceOptimisationInterfaceName != null)
-		{
-			try
-			{
-				lastResourceOptimisationInterface = Thread.currentThread().getContextClassLoader().loadClass(lastResourceOptimisationInterfaceName) ;
-			}
-			catch (final Throwable th)
-			{
-                jtaxLogger.i18NLogger.warn_jtax_transaction_jts_lastResourceOptimisationInterface(lastResourceOptimisationInterfaceName, th);
-			}
-		}
-		LAST_RESOURCE_OPTIMISATION_INTERFACE = lastResourceOptimisationInterface ;
+        LAST_RESOURCE_OPTIMISATION_INTERFACE = jtaPropertyManager.getJTAEnvironmentBean().getLastResourceOptimisationInterface();
+
+        if(LAST_RESOURCE_OPTIMISATION_INTERFACE == null) {
+            jtaLogger.i18NLogger.warn_transaction_arjunacore_lastResourceOptimisationInterface(jtaPropertyManager.getJTAEnvironmentBean().getLastResourceOptimisationInterfaceClassName());
+            jtaxLogger.i18NLogger.warn_jtax_transaction_jts_lastResourceOptimisationInterface(jtaPropertyManager.getJTAEnvironmentBean().getLastResourceOptimisationInterfaceClassName());
+        }
 	}
 
     private static ConcurrentHashMap _transactions = new ConcurrentHashMap();

Modified: labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/utils/jtaxI18NLogger.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/utils/jtaxI18NLogger.java	2011-03-02 10:42:34 UTC (rev 36768)
+++ labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/utils/jtaxI18NLogger.java	2011-03-02 11:26:33 UTC (rev 36769)
@@ -163,7 +163,7 @@
 
 	@Message(id = 24033, value = "failed to load Last Resource Optimisation Interface {0}", format = MESSAGE_FORMAT)
 	@LogMessage(level = WARN)
-	public void warn_jtax_transaction_jts_lastResourceOptimisationInterface(String arg0, @Cause() Throwable arg1);
+	public void warn_jtax_transaction_jts_lastResourceOptimisationInterface(String arg0);
 
 	@Message(id = 24034, value = "Could not enlist resource because the transaction is marked for rollback.", format = MESSAGE_FORMAT)
 	public String get_jtax_transaction_jts_markedrollback();

Modified: labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/utils/jtaxI18NLoggerImpl.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/utils/jtaxI18NLoggerImpl.java	2011-03-02 10:42:34 UTC (rev 36768)
+++ labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/utils/jtaxI18NLoggerImpl.java	2011-03-02 11:26:33 UTC (rev 36769)
@@ -158,8 +158,8 @@
         return "ARJUNA-24032 Work already active!";
     }
 
-    public void warn_jtax_transaction_jts_lastResourceOptimisationInterface(String arg0, Throwable arg1) {
-        logger.logv(WARN, arg1, "ARJUNA-24033 failed to load Last Resource Optimisation Interface {0}", arg0);
+    public void warn_jtax_transaction_jts_lastResourceOptimisationInterface(String arg0) {
+        logger.logv(WARN, "ARJUNA-24033 failed to load Last Resource Optimisation Interface {0}", arg0);
     }
 
     public String get_jtax_transaction_jts_markedrollback() {

Modified: labs/jbosstm/trunk/atsintegration/transaction-jboss-beans.xml
===================================================================
--- labs/jbosstm/trunk/atsintegration/transaction-jboss-beans.xml	2011-03-02 10:42:34 UTC (rev 36768)
+++ labs/jbosstm/trunk/atsintegration/transaction-jboss-beans.xml	2011-03-02 11:26:33 UTC (rev 36769)
@@ -158,7 +158,7 @@
 
         <constructor factoryClass="com.arjuna.ats.jta.common.jtaPropertyManager" factoryMethod="getJTAEnvironmentBean"/>
 
-        <property name="lastResourceOptimisationInterface">org.jboss.tm.LastResource</property>
+        <property name="lastResourceOptimisationInterfaceClassName">org.jboss.tm.LastResource</property>
 
         <property name="transactionManagerClassName">com.arjuna.ats.jbossatx.jta.TransactionManagerDelegate</property>
         <property name="userTransactionClassName">com.arjuna.ats.internal.jta.transaction.arjunacore.UserTransactionImple</property>

Modified: labs/jbosstm/trunk/atsintegration/transaction-jboss-beans.xml.jts
===================================================================
--- labs/jbosstm/trunk/atsintegration/transaction-jboss-beans.xml.jts	2011-03-02 10:42:34 UTC (rev 36768)
+++ labs/jbosstm/trunk/atsintegration/transaction-jboss-beans.xml.jts	2011-03-02 11:26:33 UTC (rev 36769)
@@ -168,7 +168,7 @@
 
         <constructor factoryClass="com.arjuna.ats.jta.common.jtaPropertyManager" factoryMethod="getJTAEnvironmentBean"/>
 
-        <property name="lastResourceOptimisationInterface">org.jboss.tm.LastResource</property>
+        <property name="lastResourceOptimisationInterfaceClassName">org.jboss.tm.LastResource</property>
 
         <property name="transactionManagerClassName">com.arjuna.ats.jbossatx.jts.TransactionManagerDelegate</property>
         <property name="userTransactionClassName">com.arjuna.ats.internal.jta.transaction.jts.UserTransactionImple</property>

Modified: labs/jbosstm/trunk/common/tests/com/arjuna/common/tests/simple/EnvironmentBeanTest.java
===================================================================
--- labs/jbosstm/trunk/common/tests/com/arjuna/common/tests/simple/EnvironmentBeanTest.java	2011-03-02 10:42:34 UTC (rev 36768)
+++ labs/jbosstm/trunk/common/tests/com/arjuna/common/tests/simple/EnvironmentBeanTest.java	2011-03-02 11:26:33 UTC (rev 36769)
@@ -160,8 +160,9 @@
             handleInterfaceField(bean, field, setter, getter);
             return;
 
+        } else if(field.getType().toString().equals("class java.lang.Class")) {
+            // ignore for now, no easy way to test
         } else {
-
             throw new Exception("unknown field type "+field.getType());
         }
 



More information about the jboss-svn-commits mailing list