From b06fc5b15fe281ced577145b460447c12fcb4173 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Tue, 28 Sep 2010 10:09:23 -0400 Subject: [PATCH] INT-1483 modified PollerParser not to register TX Advisor with BF, but simply inject it into PolerMetadata as value instead of reference, added tests --- .../integration/config/xml/PollerParser.java | 6 +-- ...tionalPollerWithMixedAopConfig-context.xml | 35 ++++++++++++++ ...TransactionalPollerWithMixedAopConfig.java | 46 +++++++++++++++++++ 3 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 spring-integration-core/src/test/java/org/springframework/integration/dispatcher/TransactionalPollerWithMixedAopConfig-context.xml create mode 100644 spring-integration-core/src/test/java/org/springframework/integration/dispatcher/TransactionalPollerWithMixedAopConfig.java diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/PollerParser.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/PollerParser.java index 8ab1e9ee48..98f02328bd 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/PollerParser.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/PollerParser.java @@ -221,10 +221,8 @@ public class PollerParser extends AbstractBeanDefinitionParser { txInterceptorBuilder.addPropertyValue("transactionAttributeSource", attributeSourceBuilder.getBeanDefinition()); BeanDefinitionBuilder txAdvisorBuilder = BeanDefinitionBuilder.genericBeanDefinition(TX_PKG_PREFIX + ".TransactionAttributeSourceAdvisor"); txAdvisorBuilder.addConstructorArgValue(txInterceptorBuilder.getBeanDefinition()); - String txInterceptorName = - BeanDefinitionReaderUtils.registerWithGeneratedName(txAdvisorBuilder.getBeanDefinition(), parserContext.getRegistry()); - - targetBuilder.addPropertyReference("transactionAdvisor", txInterceptorName); + + targetBuilder.addPropertyValue("transactionAdvisor", txAdvisorBuilder.getBeanDefinition()); } /** diff --git a/spring-integration-core/src/test/java/org/springframework/integration/dispatcher/TransactionalPollerWithMixedAopConfig-context.xml b/spring-integration-core/src/test/java/org/springframework/integration/dispatcher/TransactionalPollerWithMixedAopConfig-context.xml new file mode 100644 index 0000000000..5a5ffb596c --- /dev/null +++ b/spring-integration-core/src/test/java/org/springframework/integration/dispatcher/TransactionalPollerWithMixedAopConfig-context.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-integration-core/src/test/java/org/springframework/integration/dispatcher/TransactionalPollerWithMixedAopConfig.java b/spring-integration-core/src/test/java/org/springframework/integration/dispatcher/TransactionalPollerWithMixedAopConfig.java new file mode 100644 index 0000000000..e38e4b85b9 --- /dev/null +++ b/spring-integration-core/src/test/java/org/springframework/integration/dispatcher/TransactionalPollerWithMixedAopConfig.java @@ -0,0 +1,46 @@ +/** + * + */ +package org.springframework.integration.dispatcher; + +import static junit.framework.Assert.assertTrue; + +import org.aopalliance.intercept.MethodInterceptor; +import org.aopalliance.intercept.MethodInvocation; +import org.junit.Test; +import org.springframework.aop.framework.Advised; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +/** + * @author Oleg Zhurakousky + * + * This test was influenced by INT-1483 where by registering TX Advisor + * in the BeanFactory while having resent resulted in + * TX Advisor being applied on all beans in AC + */ +public class TransactionalPollerWithMixedAopConfig { + + @Test + public void validateTransactionalProxyIsolationToThePollerOnly(){ + ApplicationContext context = + new ClassPathXmlApplicationContext("TransactionalPollerWithMixedAopConfig-context.xml", this.getClass()); + + assertTrue(!(context.getBean("foo") instanceof Advised)); + assertTrue(!(context.getBean("inputChannel") instanceof Advised)); + } + + public static class SampleService{ + public void foo(String payload){} + } + + public static class Foo{ + public Foo(String value){} + } + + public static class SampleAdvice implements MethodInterceptor{ + public Object invoke(MethodInvocation invocation) throws Throwable { + return invocation.proceed(); + } + } +}