INT-3435: Make JmsChannelFB More Friendly
JIRA: https://jira.spring.io/browse/INT-3435 INT-3435: Polishing according test failures https://build.spring.io/browse/INT-B41-29
This commit is contained in:
committed by
Gary Russell
parent
62dfc99844
commit
92975262d7
@@ -49,9 +49,11 @@ import org.springframework.util.StringUtils;
|
||||
* @author Mark Fisher
|
||||
* @author Oleg Zhurakousky
|
||||
* @author Gary Russell
|
||||
* @author Artem Bilan
|
||||
* @since 2.0
|
||||
*/
|
||||
public class JmsChannelFactoryBean extends AbstractFactoryBean<AbstractJmsChannel> implements SmartLifecycle, DisposableBean, BeanNameAware {
|
||||
public class JmsChannelFactoryBean extends AbstractFactoryBean<AbstractJmsChannel>
|
||||
implements SmartLifecycle, DisposableBean, BeanNameAware {
|
||||
|
||||
private volatile AbstractJmsChannel channel;
|
||||
|
||||
@@ -71,6 +73,8 @@ public class JmsChannelFactoryBean extends AbstractFactoryBean<AbstractJmsChanne
|
||||
|
||||
private volatile String cacheLevelName;
|
||||
|
||||
private volatile Integer cacheLevel;
|
||||
|
||||
private volatile String clientId;
|
||||
|
||||
private volatile String concurrency;
|
||||
@@ -186,6 +190,8 @@ public class JmsChannelFactoryBean extends AbstractFactoryBean<AbstractJmsChanne
|
||||
*/
|
||||
|
||||
public void setAcceptMessagesWhileStopping(boolean acceptMessagesWhileStopping) {
|
||||
Assert.isTrue(this.messageDriven,
|
||||
"'acceptMessagesWhileStopping' is allowed only in case of 'messageDriven = true'");
|
||||
this.acceptMessagesWhileStopping = acceptMessagesWhileStopping;
|
||||
}
|
||||
|
||||
@@ -194,18 +200,31 @@ public class JmsChannelFactoryBean extends AbstractFactoryBean<AbstractJmsChanne
|
||||
}
|
||||
|
||||
public void setCacheLevelName(String cacheLevelName) {
|
||||
Assert.isTrue(this.messageDriven, "'cacheLevelName' is allowed only in case of 'messageDriven = true'");
|
||||
Assert.state(this.cacheLevel == null,
|
||||
"'cacheLevelName' and 'cacheLevel' are mutually exclusive");
|
||||
this.cacheLevelName = cacheLevelName;
|
||||
}
|
||||
|
||||
public void setCacheLevel(Integer cacheLevel) {
|
||||
Assert.isTrue(this.messageDriven, "'cacheLevel' is allowed only in case of 'messageDriven = true'");
|
||||
Assert.state(!StringUtils.hasText(this.cacheLevelName),
|
||||
"'cacheLevelName' and 'cacheLevel' are mutually exclusive");
|
||||
this.cacheLevel = cacheLevel;
|
||||
}
|
||||
|
||||
public void setClientId(String clientId) {
|
||||
Assert.isTrue(this.messageDriven, "'clientId' is allowed only in case of 'messageDriven = true'");
|
||||
this.clientId = clientId;
|
||||
}
|
||||
|
||||
public void setConcurrency(String concurrency) {
|
||||
Assert.isTrue(this.messageDriven, "'concurrency' is allowed only in case of 'messageDriven = true'");
|
||||
this.concurrency = concurrency;
|
||||
}
|
||||
|
||||
public void setConcurrentConsumers(int concurrentConsumers) {
|
||||
Assert.isTrue(this.messageDriven, "'concurrentConsumers' is allowed only in case of 'messageDriven = true'");
|
||||
this.concurrentConsumers = concurrentConsumers;
|
||||
}
|
||||
|
||||
@@ -215,6 +234,7 @@ public class JmsChannelFactoryBean extends AbstractFactoryBean<AbstractJmsChanne
|
||||
}
|
||||
|
||||
public void setContainerType(Class<? extends AbstractMessageListenerContainer> containerType) {
|
||||
Assert.isTrue(this.messageDriven, "'containerType' is allowed only in case of 'messageDriven = true'");
|
||||
this.containerType = containerType;
|
||||
}
|
||||
|
||||
@@ -232,30 +252,37 @@ public class JmsChannelFactoryBean extends AbstractFactoryBean<AbstractJmsChanne
|
||||
}
|
||||
|
||||
public void setDurableSubscriptionName(String durableSubscriptionName) {
|
||||
Assert.isTrue(this.messageDriven, "'durableSubscriptionName' is allowed only in case of 'messageDriven = true'");
|
||||
this.durableSubscriptionName = durableSubscriptionName;
|
||||
}
|
||||
|
||||
public void setErrorHandler(ErrorHandler errorHandler) {
|
||||
Assert.isTrue(this.messageDriven, "'errorHandler' is allowed only in case of 'messageDriven = true'");
|
||||
this.errorHandler = errorHandler;
|
||||
}
|
||||
|
||||
public void setExceptionListener(ExceptionListener exceptionListener) {
|
||||
Assert.isTrue(this.messageDriven, "'exceptionListener' is allowed only in case of 'messageDriven = true'");
|
||||
this.exceptionListener = exceptionListener;
|
||||
}
|
||||
|
||||
public void setExposeListenerSession(boolean exposeListenerSession) {
|
||||
Assert.isTrue(this.messageDriven, "'exposeListenerSession' is allowed only in case of 'messageDriven = true'");
|
||||
this.exposeListenerSession = exposeListenerSession;
|
||||
}
|
||||
|
||||
public void setIdleTaskExecutionLimit(int idleTaskExecutionLimit) {
|
||||
Assert.isTrue(this.messageDriven, "'idleTaskExecutionLimit' is allowed only in case of 'messageDriven = true'");
|
||||
this.idleTaskExecutionLimit = idleTaskExecutionLimit;
|
||||
}
|
||||
|
||||
public void setMaxConcurrentConsumers(int maxConcurrentConsumers) {
|
||||
Assert.isTrue(this.messageDriven, "'maxConcurrentConsumers' is allowed only in case of 'messageDriven = true'");
|
||||
this.maxConcurrentConsumers = maxConcurrentConsumers;
|
||||
}
|
||||
|
||||
public void setMaxMessagesPerTask(int maxMessagesPerTask) {
|
||||
Assert.isTrue(this.messageDriven, "'maxMessagesPerTask' is allowed only in case of 'messageDriven = true'");
|
||||
this.maxMessagesPerTask = maxMessagesPerTask;
|
||||
}
|
||||
|
||||
@@ -283,6 +310,7 @@ public class JmsChannelFactoryBean extends AbstractFactoryBean<AbstractJmsChanne
|
||||
}
|
||||
|
||||
public void setRecoveryInterval(long recoveryInterval) {
|
||||
Assert.isTrue(this.messageDriven, "'recoveryInterval' is allowed only in case of 'messageDriven = true'");
|
||||
this.recoveryInterval = recoveryInterval;
|
||||
}
|
||||
|
||||
@@ -297,26 +325,32 @@ public class JmsChannelFactoryBean extends AbstractFactoryBean<AbstractJmsChanne
|
||||
}
|
||||
|
||||
public void setSubscriptionDurable(boolean subscriptionDurable) {
|
||||
Assert.isTrue(this.messageDriven, "'subscriptionDurable' is allowed only in case of 'messageDriven = true'");
|
||||
this.subscriptionDurable = subscriptionDurable;
|
||||
}
|
||||
|
||||
public void setTaskExecutor(Executor taskExecutor) {
|
||||
Assert.isTrue(this.messageDriven, "'taskExecutor' is allowed only in case of 'messageDriven = true'");
|
||||
this.taskExecutor = taskExecutor;
|
||||
}
|
||||
|
||||
public void setTransactionManager(PlatformTransactionManager transactionManager) {
|
||||
Assert.isTrue(this.messageDriven, "'transactionManager' is allowed only in case of 'messageDriven = true'");
|
||||
this.transactionManager = transactionManager;
|
||||
}
|
||||
|
||||
public void setTransactionName(String transactionName) {
|
||||
Assert.isTrue(this.messageDriven, "'transactionName' is allowed only in case of 'messageDriven = true'");
|
||||
this.transactionName = transactionName;
|
||||
}
|
||||
|
||||
public void setTransactionTimeout(int transactionTimeout) {
|
||||
Assert.isTrue(this.messageDriven, "'transactionTimeout' is allowed only in case of 'messageDriven = true'");
|
||||
this.transactionTimeout = transactionTimeout;
|
||||
}
|
||||
|
||||
public void setMaxSubscribers(int maxSubscribers) {
|
||||
Assert.isTrue(this.messageDriven, "'maxSubscribers' is allowed only in case of 'messageDriven = true'");
|
||||
this.maxSubscribers = maxSubscribers;
|
||||
}
|
||||
|
||||
@@ -413,6 +447,10 @@ public class JmsChannelFactoryBean extends AbstractFactoryBean<AbstractJmsChanne
|
||||
dmlc.setCacheLevelName(this.cacheLevelName);
|
||||
}
|
||||
|
||||
if (this.cacheLevel != null) {
|
||||
dmlc.setCacheLevel(this.cacheLevel);
|
||||
}
|
||||
|
||||
if (StringUtils.hasText(this.concurrency)){
|
||||
dmlc.setConcurrency(this.concurrency);
|
||||
}
|
||||
@@ -470,8 +508,7 @@ public class JmsChannelFactoryBean extends AbstractFactoryBean<AbstractJmsChanne
|
||||
|
||||
@Override
|
||||
public boolean isAutoStartup() {
|
||||
return (this.channel instanceof SubscribableJmsChannel) ?
|
||||
((SubscribableJmsChannel) this.channel).isAutoStartup() : false;
|
||||
return this.channel instanceof SubscribableJmsChannel && ((SubscribableJmsChannel) this.channel).isAutoStartup();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -482,8 +519,7 @@ public class JmsChannelFactoryBean extends AbstractFactoryBean<AbstractJmsChanne
|
||||
|
||||
@Override
|
||||
public boolean isRunning() {
|
||||
return (this.channel instanceof SubscribableJmsChannel) ?
|
||||
((SubscribableJmsChannel) this.channel).isRunning() : false;
|
||||
return this.channel instanceof SubscribableJmsChannel && ((SubscribableJmsChannel) this.channel).isRunning();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -513,4 +549,5 @@ public class JmsChannelFactoryBean extends AbstractFactoryBean<AbstractJmsChanne
|
||||
((SubscribableJmsChannel) this.channel).destroy();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@ public class JmsChannelParser extends AbstractChannelParser {
|
||||
|
||||
String containerType = element.getAttribute(CONTAINER_TYPE_ATTRIBUTE);
|
||||
String containerClass = element.getAttribute(CONTAINER_CLASS_ATTRIBUTE);
|
||||
if (!StringUtils.hasText(containerClass)) {
|
||||
if (!StringUtils.hasText(containerClass) && StringUtils.hasText(containerType)) {
|
||||
if ("default".equals(containerType)) {
|
||||
containerClass = "org.springframework.jms.listener.DefaultMessageListenerContainer";
|
||||
}
|
||||
@@ -84,7 +84,9 @@ public class JmsChannelParser extends AbstractChannelParser {
|
||||
*
|
||||
* We cannot reliably infer it here.
|
||||
*/
|
||||
builder.addPropertyValue("containerType", containerClass);
|
||||
if (StringUtils.hasText(containerClass)) {
|
||||
builder.addPropertyValue("containerType", containerClass);
|
||||
}
|
||||
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "receive-timeout");
|
||||
IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "task-executor");
|
||||
IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "transaction-manager");
|
||||
|
||||
@@ -162,7 +162,7 @@
|
||||
</xsd:appinfo>
|
||||
</xsd:annotation>
|
||||
</xsd:attribute>
|
||||
<xsd:attribute name="container-type" default="default">
|
||||
<xsd:attribute name="container-type">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation><![CDATA[
|
||||
The type of this listener container: "default" or "simple", choosing
|
||||
@@ -253,7 +253,7 @@
|
||||
]]></xsd:documentation>
|
||||
</xsd:annotation>
|
||||
</xsd:attribute>
|
||||
<xsd:attribute name="cache" default="auto">
|
||||
<xsd:attribute name="cache">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation><![CDATA[
|
||||
The cache level for JMS resources: "none", "connection", "session", "consumer"
|
||||
|
||||
Reference in New Issue
Block a user