diff --git a/org.springframework.transaction/src/main/java/org/springframework/transaction/jta/JtaAfterCompletionSynchronization.java b/org.springframework.transaction/src/main/java/org/springframework/transaction/jta/JtaAfterCompletionSynchronization.java index ecbb2a100dcb1f4c8cf299c30331c23627c0e14d..f2801c2b9c276606667d68060f46f93e41bf568e 100644 --- a/org.springframework.transaction/src/main/java/org/springframework/transaction/jta/JtaAfterCompletionSynchronization.java +++ b/org.springframework.transaction/src/main/java/org/springframework/transaction/jta/JtaAfterCompletionSynchronization.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2006 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. @@ -17,7 +17,6 @@ package org.springframework.transaction.jta; import java.util.List; - import javax.transaction.Status; import javax.transaction.Synchronization; @@ -25,16 +24,19 @@ import org.springframework.transaction.support.TransactionSynchronization; import org.springframework.transaction.support.TransactionSynchronizationUtils; /** - * Adapter for a JTA Synchronization, invoking the afterCompletion of - * Spring TransactionSynchronizations after the outer JTA transaction has completed. + * Adapter for a JTA Synchronization, invoking the afterCommit / + * afterCompletion callbacks of Spring {@link TransactionSynchronization} + * objects callbacks after the outer JTA transaction has completed. * Applied when participating in an existing (non-Spring) JTA transaction. * * @author Juergen Hoeller * @since 2.0 + * @see TransactionSynchronization#afterCommit + * @see TransactionSynchronization#afterCompletion */ public class JtaAfterCompletionSynchronization implements Synchronization { - private final List synchronizations; + private final List synchronizations; /** @@ -42,7 +44,7 @@ public class JtaAfterCompletionSynchronization implements Synchronization { * @param synchronizations the List of TransactionSynchronization objects * @see org.springframework.transaction.support.TransactionSynchronization */ - public JtaAfterCompletionSynchronization(List synchronizations) { + public JtaAfterCompletionSynchronization(List synchronizations) { this.synchronizations = synchronizations; } diff --git a/org.springframework.transaction/src/main/java/org/springframework/transaction/jta/JtaTransactionManager.java b/org.springframework.transaction/src/main/java/org/springframework/transaction/jta/JtaTransactionManager.java index 6f777cfec0c454de43ff14faa9fe728e198e6869..11eb94425521fb97ced0db6ac8ce8e566dcd6142 100644 --- a/org.springframework.transaction/src/main/java/org/springframework/transaction/jta/JtaTransactionManager.java +++ b/org.springframework.transaction/src/main/java/org/springframework/transaction/jta/JtaTransactionManager.java @@ -141,7 +141,6 @@ import org.springframework.util.StringUtils; * @see #setUserTransaction * @see #setTransactionManagerName * @see #setTransactionManager - * @see JotmFactoryBean * @see WebLogicJtaTransactionManager */ public class JtaTransactionManager extends AbstractPlatformTransactionManager @@ -256,9 +255,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager * A default one is used if not set. */ public void setJndiTemplate(JndiTemplate jndiTemplate) { - if (jndiTemplate == null) { - throw new IllegalArgumentException("jndiTemplate must not be null"); - } + Assert.notNull(jndiTemplate, "JndiTemplate must not be null"); this.jndiTemplate = jndiTemplate; } @@ -560,7 +557,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager if (logger.isDebugEnabled()) { logger.debug("Retrieving JTA UserTransaction from JNDI location [" + userTransactionName + "]"); } - return (UserTransaction) getJndiTemplate().lookup(userTransactionName, UserTransaction.class); + return getJndiTemplate().lookup(userTransactionName, UserTransaction.class); } catch (NamingException ex) { throw new TransactionSystemException( @@ -584,7 +581,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager if (logger.isDebugEnabled()) { logger.debug("Retrieving JTA TransactionManager from JNDI location [" + transactionManagerName + "]"); } - return (TransactionManager) getJndiTemplate().lookup(transactionManagerName, TransactionManager.class); + return getJndiTemplate().lookup(transactionManagerName, TransactionManager.class); } catch (NamingException ex) { throw new TransactionSystemException( @@ -608,7 +605,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager if (logger.isDebugEnabled()) { logger.debug("Retrieving JTA TransactionSynchronizationRegistry from JNDI location [" + registryName + "]"); } - Class registryClass = ClassUtils.forName(TRANSACTION_SYNCHRONIZATION_REGISTRY_CLASS_NAME, + Class registryClass = ClassUtils.forName(TRANSACTION_SYNCHRONIZATION_REGISTRY_CLASS_NAME, JtaTransactionManager.class.getClassLoader()); return getJndiTemplate().lookup(registryName, registryClass); } @@ -669,7 +666,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager protected UserTransaction findUserTransaction() { String jndiName = DEFAULT_USER_TRANSACTION_NAME; try { - UserTransaction ut = (UserTransaction) getJndiTemplate().lookup(jndiName, UserTransaction.class); + UserTransaction ut = getJndiTemplate().lookup(jndiName, UserTransaction.class); if (logger.isDebugEnabled()) { logger.debug("JTA UserTransaction found at default JNDI location [" + jndiName + "]"); } @@ -701,10 +698,9 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager } // Check fallback JNDI locations. - for (int i = 0; i < FALLBACK_TRANSACTION_MANAGER_NAMES.length; i++) { - String jndiName = FALLBACK_TRANSACTION_MANAGER_NAMES[i]; + for (String jndiName : FALLBACK_TRANSACTION_MANAGER_NAMES) { try { - TransactionManager tm = (TransactionManager) getJndiTemplate().lookup(jndiName, TransactionManager.class); + TransactionManager tm = getJndiTemplate().lookup(jndiName, TransactionManager.class); if (logger.isDebugEnabled()) { logger.debug("JTA TransactionManager found at fallback JNDI location [" + jndiName + "]"); } @@ -736,7 +732,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager throws TransactionSystemException { try { - Class registryClass = ClassUtils.forName(TRANSACTION_SYNCHRONIZATION_REGISTRY_CLASS_NAME, + Class registryClass = ClassUtils.forName(TRANSACTION_SYNCHRONIZATION_REGISTRY_CLASS_NAME, JtaTransactionManager.class.getClassLoader()); // If we came here, we might be on Java EE 5, since the JTA 1.1 API is present. @@ -1100,7 +1096,9 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager @Override - protected void registerAfterCompletionWithExistingTransaction(Object transaction, List synchronizations) { + protected void registerAfterCompletionWithExistingTransaction( + Object transaction, List synchronizations) { + JtaTransactionObject txObject = (JtaTransactionObject) transaction; logger.debug("Registering after-completion synchronization with existing JTA transaction"); try { @@ -1141,7 +1139,8 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager * @see javax.transaction.Transaction#registerSynchronization * @see javax.transaction.TransactionSynchronizationRegistry#registerInterposedSynchronization */ - protected void doRegisterAfterCompletionWithJtaTransaction(JtaTransactionObject txObject, List synchronizations) + protected void doRegisterAfterCompletionWithJtaTransaction( + JtaTransactionObject txObject, List synchronizations) throws RollbackException, SystemException { int jtaStatus = txObject.getUserTransaction().getStatus(); diff --git a/org.springframework.transaction/src/main/java/org/springframework/transaction/jta/WebSphereUowTransactionManager.java b/org.springframework.transaction/src/main/java/org/springframework/transaction/jta/WebSphereUowTransactionManager.java index aed7d9db01744c78ede9e6bdebe227c68be3dd1d..c2ab31d37e5e1418095f7233c6fb1fafa5705642 100644 --- a/org.springframework.transaction/src/main/java/org/springframework/transaction/jta/WebSphereUowTransactionManager.java +++ b/org.springframework.transaction/src/main/java/org/springframework/transaction/jta/WebSphereUowTransactionManager.java @@ -35,6 +35,7 @@ import org.springframework.transaction.support.CallbackPreferringPlatformTransac import org.springframework.transaction.support.DefaultTransactionDefinition; import org.springframework.transaction.support.DefaultTransactionStatus; import org.springframework.transaction.support.TransactionCallback; +import org.springframework.transaction.support.TransactionSynchronization; import org.springframework.transaction.support.TransactionSynchronizationManager; import org.springframework.util.ReflectionUtils; @@ -170,7 +171,9 @@ public class WebSphereUowTransactionManager extends JtaTransactionManager * Registers the synchronizations as interposed JTA Synchronization on the UOWManager. */ @Override - protected void doRegisterAfterCompletionWithJtaTransaction(JtaTransactionObject txObject, List synchronizations) { + protected void doRegisterAfterCompletionWithJtaTransaction( + JtaTransactionObject txObject, List synchronizations) { + this.uowManager.registerInterposedSynchronization(new JtaAfterCompletionSynchronization(synchronizations)); } @@ -328,7 +331,7 @@ public class WebSphereUowTransactionManager extends JtaTransactionManager } triggerBeforeCompletion(status); if (status.isNewSynchronization()) { - List synchronizations = TransactionSynchronizationManager.getSynchronizations(); + List synchronizations = TransactionSynchronizationManager.getSynchronizations(); TransactionSynchronizationManager.clear(); uowManager.registerInterposedSynchronization(new JtaAfterCompletionSynchronization(synchronizations)); }