Introduce alias for 'value' attribute in @Transactional

Issue: SPR-11393
This commit is contained in:
Sam Brannen
2015-06-12 22:31:41 +02:00
parent 6fc388315e
commit 6b7c1d72e8
4 changed files with 49 additions and 36 deletions

View File

@@ -37,6 +37,7 @@ import org.springframework.transaction.event.TransactionalEventListenerFactory;
/**
* @author Rob Harrop
* @author Juergen Hoeller
* @author Sam Brannen
*/
public class AnnotationTransactionNamespaceHandlerTests extends TestCase {
@@ -129,6 +130,10 @@ public class AnnotationTransactionNamespaceHandlerTests extends TestCase {
public void saveQualifiedFoo() {
}
@Transactional(transactionManager = "qualifiedTransactionManager")
public void saveQualifiedFooWithAttributeAlias() {
}
@Transactional
public void exceptional(Throwable t) throws Throwable {
throw t;

View File

@@ -17,6 +17,7 @@
package org.springframework.transaction.annotation;
import java.util.Map;
import javax.annotation.PostConstruct;
import org.junit.Test;
@@ -43,52 +44,49 @@ import static org.junit.Assert.*;
*
* @author Chris Beams
* @author Stephane Nicoll
* @author Sam Brannen
* @since 3.1
*/
public class EnableTransactionManagementTests {
@Test
public void transactionProxyIsCreated() {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(EnableTxConfig.class, TxManagerConfig.class);
ctx.refresh();
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(EnableTxConfig.class, TxManagerConfig.class);
TransactionalTestBean bean = ctx.getBean(TransactionalTestBean.class);
assertThat("testBean is not a proxy", AopUtils.isAopProxy(bean), is(true));
assertTrue("testBean is not a proxy", AopUtils.isAopProxy(bean));
Map<?,?> services = ctx.getBeansWithAnnotation(Service.class);
assertThat("Stereotype annotation not visible", services.containsKey("testBean"), is(true));
assertTrue("Stereotype annotation not visible", services.containsKey("testBean"));
ctx.close();
}
@Test
public void transactionProxyIsCreatedWithEnableOnSuperclass() {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(InheritedEnableTxConfig.class, TxManagerConfig.class);
ctx.refresh();
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(InheritedEnableTxConfig.class, TxManagerConfig.class);
TransactionalTestBean bean = ctx.getBean(TransactionalTestBean.class);
assertThat("testBean is not a proxy", AopUtils.isAopProxy(bean), is(true));
assertTrue("testBean is not a proxy", AopUtils.isAopProxy(bean));
Map<?,?> services = ctx.getBeansWithAnnotation(Service.class);
assertThat("Stereotype annotation not visible", services.containsKey("testBean"), is(true));
assertTrue("Stereotype annotation not visible", services.containsKey("testBean"));
ctx.close();
}
@Test
public void txManagerIsResolvedOnInvocationOfTransactionalMethod() {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(EnableTxConfig.class, TxManagerConfig.class);
ctx.refresh();
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(EnableTxConfig.class, TxManagerConfig.class);
TransactionalTestBean bean = ctx.getBean(TransactionalTestBean.class);
// invoke a transactional method, causing the PlatformTransactionManager bean to be resolved.
bean.findAllFoos();
ctx.close();
}
@Test
public void txManagerIsResolvedCorrectlyWhenMultipleManagersArePresent() {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(EnableTxConfig.class, MultiTxManagerConfig.class);
ctx.refresh();
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(EnableTxConfig.class, MultiTxManagerConfig.class);
TransactionalTestBean bean = ctx.getBean(TransactionalTestBean.class);
// invoke a transactional method, causing the PlatformTransactionManager bean to be resolved.
bean.findAllFoos();
ctx.close();
}
/**
@@ -103,33 +101,35 @@ public class EnableTransactionManagementTests {
"Do you actually have org.springframework.aspects on the classpath?");
}
catch (Exception ex) {
assertThat(ex.getMessage().contains("AspectJTransactionManagementConfiguration"), is(true));
assertThat(ex.getMessage(), containsString("AspectJTransactionManagementConfiguration"));
}
}
@Test
public void transactionalEventListenerRegisteredProperly() {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(EnableTxConfig.class);
ctx.refresh();
assertTrue(ctx.containsBean(TransactionManagementConfigUtils
.TRANSACTIONAL_EVENT_LISTENER_FACTORY_BEAN_NAME));
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(EnableTxConfig.class);
assertTrue(ctx.containsBean(TransactionManagementConfigUtils.TRANSACTIONAL_EVENT_LISTENER_FACTORY_BEAN_NAME));
assertEquals(1, ctx.getBeansOfType(TransactionalEventListenerFactory.class).size());
ctx.close();
}
@Test
public void spr11915() {
AnnotationConfigApplicationContext ctx =
new AnnotationConfigApplicationContext(Spr11915Config.class);
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Spr11915Config.class);
TransactionalTestBean bean = ctx.getBean(TransactionalTestBean.class);
bean.saveQualifiedFoo();
CallCountingTransactionManager txManager = ctx.getBean("qualifiedTransactionManager", CallCountingTransactionManager.class);
CallCountingTransactionManager txManager = ctx
.getBean("qualifiedTransactionManager", CallCountingTransactionManager.class);
bean.saveQualifiedFoo();
assertThat(txManager.begun, equalTo(1));
assertThat(txManager.commits, equalTo(1));
assertThat(txManager.rollbacks, equalTo(0));
bean.saveQualifiedFooWithAttributeAlias();
assertThat(txManager.begun, equalTo(2));
assertThat(txManager.commits, equalTo(2));
assertThat(txManager.rollbacks, equalTo(0));
ctx.close();
}
@@ -138,12 +138,10 @@ public class EnableTransactionManagementTests {
static class EnableTxConfig {
}
@Configuration
static class InheritedEnableTxConfig extends EnableTxConfig {
}
@Configuration
@EnableTransactionManagement(mode=AdviceMode.ASPECTJ)
static class EnableAspectJTxConfig {
@@ -168,7 +166,6 @@ public class EnableTransactionManagementTests {
}
}
@Configuration
static class TxManagerConfig {
@@ -184,7 +181,6 @@ public class EnableTransactionManagementTests {
}
@Configuration
static class MultiTxManagerConfig extends TxManagerConfig implements TransactionManagementConfigurer {
@@ -198,4 +194,5 @@ public class EnableTransactionManagementTests {
return txManager2();
}
}
}