diff --git a/org.springframework.transaction/src/main/java/org/springframework/transaction/jta/WebLogicJtaTransactionManager.java b/org.springframework.transaction/src/main/java/org/springframework/transaction/jta/WebLogicJtaTransactionManager.java index b8d5a8958dc..1fe2d4e1d7b 100644 --- a/org.springframework.transaction/src/main/java/org/springframework/transaction/jta/WebLogicJtaTransactionManager.java +++ b/org.springframework.transaction/src/main/java/org/springframework/transaction/jta/WebLogicJtaTransactionManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2009 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,7 +19,6 @@ package org.springframework.transaction.jta; import java.io.Serializable; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; - import javax.transaction.InvalidTransactionException; import javax.transaction.NotSupportedException; import javax.transaction.SystemException; @@ -31,7 +30,7 @@ import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionSystemException; /** - * Special {@link JtaTransactionManager} variant for BEA WebLogic (7.0, 8.1 and higher). + * Special {@link JtaTransactionManager} variant for BEA WebLogic (8.1 and higher). * Supports the full power of Spring's transaction definitions on WebLogic's * transaction coordinator, beyond standard JTA: transaction names, * per-transaction isolation levels, and proper resuming of transactions in all cases. @@ -51,15 +50,11 @@ import org.springframework.transaction.TransactionSystemException; * If you're not relying on this feature of transaction suspension in the first * place, Spring's standard JtaTransactionManager will behave properly too. * - *
Automatically detects WebLogic Server 7.0 or 8.1+ and adapts accordingly. - * Usage on a WebLogic client is also supported, although with restricted - * functionality: transaction names cannot be applied there. - * *
By default, the JTA UserTransaction and TransactionManager handles are
- * fetched directly from WebLogic's TransactionHelper (on 8.1+)
- * or TxHelper (on 7.0). This can be overridden by specifying
- * "userTransaction"/"userTransactionName" and "transactionManager"/"transactionManagerName",
- * passing in existing handles or specifying corresponding JNDI locations to look up.
+ * fetched directly from WebLogic's TransactionHelper. This can be
+ * overridden by specifying "userTransaction"/"userTransactionName" and
+ * "transactionManager"/"transactionManagerName", passing in existing handles
+ * or specifying corresponding JNDI locations to look up.
*
* @author Juergen Hoeller
* @since 1.1
@@ -69,7 +64,6 @@ import org.springframework.transaction.TransactionSystemException;
* @see weblogic.transaction.Transaction#setProperty
* @see weblogic.transaction.TransactionManager#forceResume
* @see weblogic.transaction.TransactionHelper
- * @see weblogic.transaction.TxHelper
*/
public class WebLogicJtaTransactionManager extends JtaTransactionManager {
@@ -77,14 +71,10 @@ public class WebLogicJtaTransactionManager extends JtaTransactionManager {
private static final String CLIENT_TRANSACTION_MANAGER_CLASS_NAME = "weblogic.transaction.ClientTransactionManager";
- private static final String TRANSACTION_MANAGER_CLASS_NAME = "weblogic.transaction.TransactionManager";
-
private static final String TRANSACTION_CLASS_NAME = "weblogic.transaction.Transaction";
private static final String TRANSACTION_HELPER_CLASS_NAME = "weblogic.transaction.TransactionHelper";
- private static final String TX_HELPER_CLASS_NAME = "weblogic.transaction.TxHelper";
-
private static final String ISOLATION_LEVEL_KEY = "ISOLATION LEVEL";
@@ -100,8 +90,6 @@ public class WebLogicJtaTransactionManager extends JtaTransactionManager {
private Method setPropertyMethod;
- private Class transactionHelperClass;
-
private Object transactionHelper;
@@ -113,58 +101,48 @@ public class WebLogicJtaTransactionManager extends JtaTransactionManager {
@Override
protected UserTransaction retrieveUserTransaction() throws TransactionSystemException {
- loadWebLogicTransactionHelperClass();
+ loadWebLogicTransactionHelper();
try {
- logger.debug("Retrieving JTA UserTransaction from WebLogic TransactionHelper/TxHelper");
- Method getUserTransactionMethod =
- this.transactionHelperClass.getMethod("getUserTransaction");
+ logger.debug("Retrieving JTA UserTransaction from WebLogic TransactionHelper");
+ Method getUserTransactionMethod = this.transactionHelper.getClass().getMethod("getUserTransaction");
return (UserTransaction) getUserTransactionMethod.invoke(this.transactionHelper);
}
catch (InvocationTargetException ex) {
throw new TransactionSystemException(
- "WebLogic's TransactionHelper/TxHelper.getUserTransaction() method failed", ex.getTargetException());
+ "WebLogic's TransactionHelper.getUserTransaction() method failed", ex.getTargetException());
}
catch (Exception ex) {
throw new TransactionSystemException(
- "Could not invoke WebLogic's TransactionHelper/TxHelper.getUserTransaction() method", ex);
+ "Could not invoke WebLogic's TransactionHelper.getUserTransaction() method", ex);
}
}
@Override
protected TransactionManager retrieveTransactionManager() throws TransactionSystemException {
- loadWebLogicTransactionHelperClass();
+ loadWebLogicTransactionHelper();
try {
- logger.debug("Retrieving JTA TransactionManager from WebLogic TransactionHelper/TxHelper");
- Method getTransactionManagerMethod = this.transactionHelperClass.getMethod("getTransactionManager");
+ logger.debug("Retrieving JTA TransactionManager from WebLogic TransactionHelper");
+ Method getTransactionManagerMethod = this.transactionHelper.getClass().getMethod("getTransactionManager");
return (TransactionManager) getTransactionManagerMethod.invoke(this.transactionHelper);
}
catch (InvocationTargetException ex) {
throw new TransactionSystemException(
- "WebLogic's TransactionHelper/TxHelper.getTransactionManager() method failed", ex.getTargetException());
+ "WebLogic's TransactionHelper.getTransactionManager() method failed", ex.getTargetException());
}
catch (Exception ex) {
throw new TransactionSystemException(
- "Could not invoke WebLogic's TransactionHelper/TxHelper.getTransactionManager() method", ex);
+ "Could not invoke WebLogic's TransactionHelper.getTransactionManager() method", ex);
}
}
- private void loadWebLogicTransactionHelperClass() throws TransactionSystemException {
- if (this.transactionHelperClass == null) {
+ private void loadWebLogicTransactionHelper() throws TransactionSystemException {
+ if (this.transactionHelper == null) {
try {
- try {
- this.transactionHelperClass =
- getClass().getClassLoader().loadClass(TRANSACTION_HELPER_CLASS_NAME);
- Method getTransactionHelperMethod =
- this.transactionHelperClass.getMethod("getTransactionHelper", new Class[0]);
- this.transactionHelper = getTransactionHelperMethod.invoke(null);
- logger.debug("WebLogic 8.1+ TransactionHelper found");
- }
- catch (ClassNotFoundException ex) {
- this.transactionHelperClass =
- getClass().getClassLoader().loadClass(TX_HELPER_CLASS_NAME);
- logger.debug("WebLogic 7.0 TxHelper found");
- }
+ Class transactionHelperClass = getClass().getClassLoader().loadClass(TRANSACTION_HELPER_CLASS_NAME);
+ Method getTransactionHelperMethod = transactionHelperClass.getMethod("getTransactionHelper");
+ this.transactionHelper = getTransactionHelperMethod.invoke(null);
+ logger.debug("WebLogic TransactionHelper found");
}
catch (InvocationTargetException ex) {
throw new TransactionSystemException(
@@ -180,43 +158,27 @@ public class WebLogicJtaTransactionManager extends JtaTransactionManager {
private void loadWebLogicTransactionClasses() throws TransactionSystemException {
try {
- Class userTransactionClass =
- getClass().getClassLoader().loadClass(USER_TRANSACTION_CLASS_NAME);
- this.weblogicUserTransactionAvailable =
- userTransactionClass.isInstance(getUserTransaction());
+ Class userTransactionClass = getClass().getClassLoader().loadClass(USER_TRANSACTION_CLASS_NAME);
+ this.weblogicUserTransactionAvailable = userTransactionClass.isInstance(getUserTransaction());
if (this.weblogicUserTransactionAvailable) {
- this.beginWithNameMethod =
- userTransactionClass.getMethod("begin", new Class[] {String.class});
- this.beginWithNameAndTimeoutMethod =
- userTransactionClass.getMethod("begin", new Class[] {String.class, int.class});
+ this.beginWithNameMethod = userTransactionClass.getMethod("begin", String.class);
+ this.beginWithNameAndTimeoutMethod = userTransactionClass.getMethod("begin", String.class, int.class);
logger.info("Support for WebLogic transaction names available");
}
else {
logger.info("Support for WebLogic transaction names not available");
}
- Class transactionManagerClass = null;
- try {
- // Try WebLogic 8.1 ClientTransactionManager interface.
- transactionManagerClass =
- getClass().getClassLoader().loadClass(CLIENT_TRANSACTION_MANAGER_CLASS_NAME);
- logger.debug("WebLogic 8.1+ ClientTransactionManager found");
- }
- catch (ClassNotFoundException ex) {
- // Fall back to WebLogic TransactionManager interface.
- transactionManagerClass =
- getClass().getClassLoader().loadClass(TRANSACTION_MANAGER_CLASS_NAME);
- logger.debug("WebLogic 7.0 TransactionManager found");
- }
+ // Obtain WebLogic ClientTransactionManager interface.
+ Class transactionManagerClass =
+ getClass().getClassLoader().loadClass(CLIENT_TRANSACTION_MANAGER_CLASS_NAME);
+ logger.debug("WebLogic ClientTransactionManager found");
- this.weblogicTransactionManagerAvailable =
- transactionManagerClass.isInstance(getTransactionManager());
+ this.weblogicTransactionManagerAvailable = transactionManagerClass.isInstance(getTransactionManager());
if (this.weblogicTransactionManagerAvailable) {
Class transactionClass = getClass().getClassLoader().loadClass(TRANSACTION_CLASS_NAME);
- this.forceResumeMethod =
- transactionManagerClass.getMethod("forceResume", new Class[] {Transaction.class});
- this.setPropertyMethod =
- transactionClass.getMethod("setProperty", new Class[] {String.class, Serializable.class});
+ this.forceResumeMethod = transactionManagerClass.getMethod("forceResume", Transaction.class);
+ this.setPropertyMethod = transactionClass.getMethod("setProperty", String.class, Serializable.class);
logger.debug("Support for WebLogic forceResume available");
}
else {
@@ -226,7 +188,7 @@ public class WebLogicJtaTransactionManager extends JtaTransactionManager {
catch (Exception ex) {
throw new TransactionSystemException(
"Could not initialize WebLogicJtaTransactionManager because WebLogic API classes are not available",
- ex);
+ ex);
}
}