[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