提交 814a8074 编写于 作者: J Juergen Hoeller

generified JtaTransactionManager code

上级 33de330b
/*
* 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 <code>afterCompletion</code> of
* Spring TransactionSynchronizations after the outer JTA transaction has completed.
* Adapter for a JTA Synchronization, invoking the <code>afterCommit</code> /
* <code>afterCompletion</code> 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<TransactionSynchronization> 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<TransactionSynchronization> synchronizations) {
this.synchronizations = synchronizations;
}
......
......@@ -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<TransactionSynchronization> 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<TransactionSynchronization> synchronizations)
throws RollbackException, SystemException {
int jtaStatus = txObject.getUserTransaction().getStatus();
......
......@@ -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<TransactionSynchronization> 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<TransactionSynchronization> synchronizations = TransactionSynchronizationManager.getSynchronizations();
TransactionSynchronizationManager.clear();
uowManager.registerInterposedSynchronization(new JtaAfterCompletionSynchronization(synchronizations));
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册