Merge pull request #489 from ghillert/INT-2546
* INT-2546: INT-2546 Move method PollerParser.configureTransactionAttributes to IntegrationNamespaceUtils
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2002-2010 the original author or authors.
|
* Copyright 2002-2012 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
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
|
||||||
* the License. You may obtain a copy of the License at
|
* the License. You may obtain a copy of the License at
|
||||||
@@ -25,6 +25,10 @@ import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
|||||||
import org.springframework.beans.factory.xml.BeanDefinitionParserDelegate;
|
import org.springframework.beans.factory.xml.BeanDefinitionParserDelegate;
|
||||||
import org.springframework.beans.factory.xml.ParserContext;
|
import org.springframework.beans.factory.xml.ParserContext;
|
||||||
import org.springframework.core.Conventions;
|
import org.springframework.core.Conventions;
|
||||||
|
import org.springframework.integration.endpoint.AbstractPollingEndpoint;
|
||||||
|
import org.springframework.transaction.interceptor.DefaultTransactionAttribute;
|
||||||
|
import org.springframework.transaction.interceptor.MatchAlwaysTransactionAttributeSource;
|
||||||
|
import org.springframework.transaction.interceptor.TransactionInterceptor;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
import org.springframework.util.xml.DomUtils;
|
import org.springframework.util.xml.DomUtils;
|
||||||
@@ -39,6 +43,8 @@ import org.w3c.dom.Element;
|
|||||||
* @author Oleg Zhurakousky
|
* @author Oleg Zhurakousky
|
||||||
* @author Gary Russell
|
* @author Gary Russell
|
||||||
* @author Artem Bilan
|
* @author Artem Bilan
|
||||||
|
* @author Gunnar Hillert
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
public abstract class IntegrationNamespaceUtils {
|
public abstract class IntegrationNamespaceUtils {
|
||||||
|
|
||||||
@@ -259,6 +265,27 @@ public abstract class IntegrationNamespaceUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse a "transactional" element and configure a {@link TransactionInterceptor}
|
||||||
|
* with "transactionManager" and other "transactionDefinition" properties.
|
||||||
|
* For example, this advisor will be applied on the Polling Task proxy
|
||||||
|
*
|
||||||
|
* @see AbstractPollingEndpoint
|
||||||
|
*/
|
||||||
|
public static BeanDefinition configureTransactionAttributes(Element txElement) {
|
||||||
|
BeanDefinitionBuilder txDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(DefaultTransactionAttribute.class);
|
||||||
|
txDefinitionBuilder.addPropertyValue("propagationBehaviorName", "PROPAGATION_" + txElement.getAttribute("propagation"));
|
||||||
|
txDefinitionBuilder.addPropertyValue("isolationLevelName", "ISOLATION_" + txElement.getAttribute("isolation"));
|
||||||
|
txDefinitionBuilder.addPropertyValue("timeout", txElement.getAttribute("timeout"));
|
||||||
|
txDefinitionBuilder.addPropertyValue("readOnly", txElement.getAttribute("read-only"));
|
||||||
|
BeanDefinitionBuilder attributeSourceBuilder = BeanDefinitionBuilder.genericBeanDefinition(MatchAlwaysTransactionAttributeSource.class);
|
||||||
|
attributeSourceBuilder.addPropertyValue("transactionAttribute", txDefinitionBuilder.getBeanDefinition());
|
||||||
|
BeanDefinitionBuilder txInterceptorBuilder = BeanDefinitionBuilder.genericBeanDefinition(TransactionInterceptor.class);
|
||||||
|
txInterceptorBuilder.addPropertyReference("transactionManager", txElement.getAttribute("transaction-manager"));
|
||||||
|
txInterceptorBuilder.addPropertyValue("transactionAttributeSource", attributeSourceBuilder.getBeanDefinition());
|
||||||
|
return txInterceptorBuilder.getBeanDefinition();
|
||||||
|
}
|
||||||
|
|
||||||
public static String[] generateAlias(Element element) {
|
public static String[] generateAlias(Element element) {
|
||||||
String[] handlerAlias = null;
|
String[] handlerAlias = null;
|
||||||
String id = element.getAttribute(ID_ATTRIBUTE);
|
String id = element.getAttribute(ID_ATTRIBUTE);
|
||||||
|
|||||||
@@ -39,9 +39,6 @@ import org.springframework.integration.channel.MessagePublishingErrorHandler;
|
|||||||
import org.springframework.integration.scheduling.PollerMetadata;
|
import org.springframework.integration.scheduling.PollerMetadata;
|
||||||
import org.springframework.scheduling.support.CronTrigger;
|
import org.springframework.scheduling.support.CronTrigger;
|
||||||
import org.springframework.scheduling.support.PeriodicTrigger;
|
import org.springframework.scheduling.support.PeriodicTrigger;
|
||||||
import org.springframework.transaction.interceptor.DefaultTransactionAttribute;
|
|
||||||
import org.springframework.transaction.interceptor.MatchAlwaysTransactionAttributeSource;
|
|
||||||
import org.springframework.transaction.interceptor.TransactionInterceptor;
|
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
import org.springframework.util.xml.DomUtils;
|
import org.springframework.util.xml.DomUtils;
|
||||||
|
|
||||||
@@ -162,25 +159,6 @@ public class PollerParser extends AbstractBeanDefinitionParser {
|
|||||||
targetBuilder.addPropertyReference("trigger", triggerBeanNames.get(0));
|
targetBuilder.addPropertyReference("trigger", triggerBeanNames.get(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse a "transactional" element and configure a TransactionInterceptor with "transactionManager"
|
|
||||||
* and other "transactionDefinition" properties. This advisor will be applied on the Polling Task proxy
|
|
||||||
* (see {@link org.springframework.integration.endpoint.AbstractPollingEndpoint}).
|
|
||||||
*/
|
|
||||||
private BeanDefinition configureTransactionAttributes(Element txElement) {
|
|
||||||
BeanDefinitionBuilder txDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(DefaultTransactionAttribute.class);
|
|
||||||
txDefinitionBuilder.addPropertyValue("propagationBehaviorName", "PROPAGATION_" + txElement.getAttribute("propagation"));
|
|
||||||
txDefinitionBuilder.addPropertyValue("isolationLevelName", "ISOLATION_" + txElement.getAttribute("isolation"));
|
|
||||||
txDefinitionBuilder.addPropertyValue("timeout", txElement.getAttribute("timeout"));
|
|
||||||
txDefinitionBuilder.addPropertyValue("readOnly", txElement.getAttribute("read-only"));
|
|
||||||
BeanDefinitionBuilder attributeSourceBuilder = BeanDefinitionBuilder.genericBeanDefinition(MatchAlwaysTransactionAttributeSource.class);
|
|
||||||
attributeSourceBuilder.addPropertyValue("transactionAttribute", txDefinitionBuilder.getBeanDefinition());
|
|
||||||
BeanDefinitionBuilder txInterceptorBuilder = BeanDefinitionBuilder.genericBeanDefinition(TransactionInterceptor.class);
|
|
||||||
txInterceptorBuilder.addPropertyReference("transactionManager", txElement.getAttribute("transaction-manager"));
|
|
||||||
txInterceptorBuilder.addPropertyValue("transactionAttributeSource", attributeSourceBuilder.getBeanDefinition());
|
|
||||||
return txInterceptorBuilder.getBeanDefinition();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses the 'advice-chain' element's sub-elements.
|
* Parses the 'advice-chain' element's sub-elements.
|
||||||
*/
|
*/
|
||||||
@@ -189,7 +167,7 @@ public class PollerParser extends AbstractBeanDefinitionParser {
|
|||||||
ManagedList adviceChain = new ManagedList();
|
ManagedList adviceChain = new ManagedList();
|
||||||
// Schema validation ensures txElement and adviceChainElement are mutually exclusive
|
// Schema validation ensures txElement and adviceChainElement are mutually exclusive
|
||||||
if (txElement != null) {
|
if (txElement != null) {
|
||||||
adviceChain.add(this.configureTransactionAttributes(txElement));
|
adviceChain.add(IntegrationNamespaceUtils.configureTransactionAttributes(txElement));
|
||||||
}
|
}
|
||||||
if (adviceChainElement != null) {
|
if (adviceChainElement != null) {
|
||||||
NodeList childNodes = adviceChainElement.getChildNodes();
|
NodeList childNodes = adviceChainElement.getChildNodes();
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ public abstract class AbstractJpaOutboundGatewayParser extends AbstractConsumerE
|
|||||||
final Element transactionalElement = DomUtils.getChildElementByTagName(gatewayElement, "transactional");
|
final Element transactionalElement = DomUtils.getChildElementByTagName(gatewayElement, "transactional");
|
||||||
|
|
||||||
if (transactionalElement != null) {
|
if (transactionalElement != null) {
|
||||||
BeanDefinition txAdviceDefinition = JpaParserUtils.configureTransactionAttributes(transactionalElement);
|
BeanDefinition txAdviceDefinition = IntegrationNamespaceUtils.configureTransactionAttributes(transactionalElement);
|
||||||
ManagedList<BeanDefinition> adviceChain = new ManagedList<BeanDefinition>();
|
ManagedList<BeanDefinition> adviceChain = new ManagedList<BeanDefinition>();
|
||||||
adviceChain.add(txAdviceDefinition);
|
adviceChain.add(txAdviceDefinition);
|
||||||
jpaOutboundGatewayBuilder.addPropertyValue("adviceChain", adviceChain);
|
jpaOutboundGatewayBuilder.addPropertyValue("adviceChain", adviceChain);
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ public class JpaOutboundChannelAdapterParser extends AbstractOutboundChannelAdap
|
|||||||
final Element transactionalElement = DomUtils.getChildElementByTagName(element, "transactional");
|
final Element transactionalElement = DomUtils.getChildElementByTagName(element, "transactional");
|
||||||
|
|
||||||
if(transactionalElement != null) {
|
if(transactionalElement != null) {
|
||||||
BeanDefinition txAdviceDefinition = JpaParserUtils.configureTransactionAttributes(transactionalElement);
|
BeanDefinition txAdviceDefinition = IntegrationNamespaceUtils.configureTransactionAttributes(transactionalElement);
|
||||||
ManagedList<BeanDefinition> adviceChain = new ManagedList<BeanDefinition>();
|
ManagedList<BeanDefinition> adviceChain = new ManagedList<BeanDefinition>();
|
||||||
adviceChain.add(txAdviceDefinition);
|
adviceChain.add(txAdviceDefinition);
|
||||||
jpaOutboundChannelAdapterBuilder.addPropertyValue("adviceChain", adviceChain);
|
jpaOutboundChannelAdapterBuilder.addPropertyValue("adviceChain", adviceChain);
|
||||||
|
|||||||
@@ -25,12 +25,8 @@ import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
|||||||
import org.springframework.beans.factory.support.ManagedList;
|
import org.springframework.beans.factory.support.ManagedList;
|
||||||
import org.springframework.beans.factory.xml.ParserContext;
|
import org.springframework.beans.factory.xml.ParserContext;
|
||||||
import org.springframework.integration.config.xml.IntegrationNamespaceUtils;
|
import org.springframework.integration.config.xml.IntegrationNamespaceUtils;
|
||||||
import org.springframework.integration.endpoint.AbstractPollingEndpoint;
|
|
||||||
import org.springframework.integration.jpa.core.JpaExecutor;
|
import org.springframework.integration.jpa.core.JpaExecutor;
|
||||||
import org.springframework.integration.jpa.support.JpaParameter;
|
import org.springframework.integration.jpa.support.JpaParameter;
|
||||||
import org.springframework.transaction.interceptor.DefaultTransactionAttribute;
|
|
||||||
import org.springframework.transaction.interceptor.MatchAlwaysTransactionAttributeSource;
|
|
||||||
import org.springframework.transaction.interceptor.TransactionInterceptor;
|
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
import org.springframework.util.xml.DomUtils;
|
import org.springframework.util.xml.DomUtils;
|
||||||
@@ -214,25 +210,4 @@ public final class JpaParserUtils {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse a "transactional" element and configure a TransactionInterceptor with "transactionManager"
|
|
||||||
* and other "transactionDefinition" properties. This advisor will be applied on the Polling Task proxy
|
|
||||||
* (see {@link AbstractPollingEndpoint}).
|
|
||||||
*
|
|
||||||
* FIXME Copied from {@link org.springframework.integration.config.xml.PollerParser} - should be refactored.
|
|
||||||
*/
|
|
||||||
public static BeanDefinition configureTransactionAttributes(Element txElement) {
|
|
||||||
BeanDefinitionBuilder txDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(DefaultTransactionAttribute.class);
|
|
||||||
txDefinitionBuilder.addPropertyValue("propagationBehaviorName", "PROPAGATION_" + txElement.getAttribute("propagation"));
|
|
||||||
txDefinitionBuilder.addPropertyValue("isolationLevelName", "ISOLATION_" + txElement.getAttribute("isolation"));
|
|
||||||
txDefinitionBuilder.addPropertyValue("timeout", txElement.getAttribute("timeout"));
|
|
||||||
txDefinitionBuilder.addPropertyValue("readOnly", txElement.getAttribute("read-only"));
|
|
||||||
BeanDefinitionBuilder attributeSourceBuilder = BeanDefinitionBuilder.genericBeanDefinition(MatchAlwaysTransactionAttributeSource.class);
|
|
||||||
attributeSourceBuilder.addPropertyValue("transactionAttribute", txDefinitionBuilder.getBeanDefinition());
|
|
||||||
BeanDefinitionBuilder txInterceptorBuilder = BeanDefinitionBuilder.genericBeanDefinition(TransactionInterceptor.class);
|
|
||||||
txInterceptorBuilder.addPropertyReference("transactionManager", txElement.getAttribute("transaction-manager"));
|
|
||||||
txInterceptorBuilder.addPropertyValue("transactionAttributeSource", attributeSourceBuilder.getBeanDefinition());
|
|
||||||
return txInterceptorBuilder.getBeanDefinition();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user