Skip to content

Commit 6aa16b7

Browse files
committed
polishing
This commit removes the queue attribute of the JmsListener annotation as this information should be provided by the container factory and not by each individual listener endpoints. There was a side effect that an annotation value cannot be null, which was forcing the container to be a queue-based container by default. Issue: SPR-9882
1 parent c484357 commit 6aa16b7

13 files changed

+118
-59
lines changed

spring-jms/src/main/java/org/springframework/jms/annotation/JmsListener.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,12 +96,6 @@
9696
*/
9797
String destination();
9898

99-
/**
100-
* Specify if the {@link #destination()} refers to a queue or not. Refer to a
101-
* queue by default.
102-
*/
103-
boolean queue() default true;
104-
10599
/**
106100
* The name for the durable subscription, if any.
107101
*/

spring-jms/src/main/java/org/springframework/jms/annotation/JmsListenerAnnotationBeanPostProcessor.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,6 @@ protected void processJmsListener(JmsListener jmsListener, Method method, Object
175175
endpoint.setJmsHandlerMethodFactory(jmsHandlerMethodFactory);
176176
endpoint.setId(getEndpointId(jmsListener));
177177
endpoint.setDestination(jmsListener.destination());
178-
endpoint.setQueue(jmsListener.queue());
179178
if (StringUtils.hasText(jmsListener.selector())) {
180179
endpoint.setSelector(jmsListener.selector());
181180
}

spring-jms/src/main/java/org/springframework/jms/config/AbstractJmsListenerEndpoint.java

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,6 @@ public abstract class AbstractJmsListenerEndpoint implements JmsListenerEndpoint
3838

3939
private String destination;
4040

41-
private boolean queue = true;
42-
4341
private String subscription;
4442

4543
private String selector;
@@ -68,20 +66,6 @@ public void setDestination(String destination) {
6866
this.destination = destination;
6967
}
7068

71-
/**
72-
* Return {@code true} if the destination is a queue.
73-
*/
74-
public boolean isQueue() {
75-
return queue;
76-
}
77-
78-
/**
79-
* Specify if the destination is a queue.
80-
*/
81-
public void setQueue(boolean queue) {
82-
this.queue = queue;
83-
}
84-
8569
/**
8670
* Return the name for the durable subscription, if any.
8771
*/
@@ -136,7 +120,6 @@ protected void setupJmsMessageContainer(AbstractMessageListenerContainer contain
136120
if (getSelector() != null) {
137121
container.setMessageSelector(getSelector());
138122
}
139-
container.setPubSubDomain(!isQueue());
140123
setupMessageListener(container);
141124
}
142125

@@ -156,7 +139,6 @@ protected void setupJcaMessageContainer(JmsMessageEndpointManager container) {
156139
if (getSelector() != null) {
157140
activationSpecConfig.setMessageSelector(getSelector());
158141
}
159-
activationSpecConfig.setPubSubDomain(!isQueue());
160142
setupMessageListener(container);
161143
}
162144

@@ -183,8 +165,6 @@ protected StringBuilder getEndpointDescription() {
183165
.append(this.id)
184166
.append("] destination=")
185167
.append(this.destination)
186-
.append(" | queue='")
187-
.append(this.queue)
188168
.append("' | subscription='")
189169
.append(this.subscription)
190170
.append(" | selector='")

spring-jms/src/main/java/org/springframework/jms/config/MethodJmsListenerEndpoint.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,11 @@ protected MessagingMessageListenerAdapter createMessageListener(MessageListenerC
8585
messageListener.setHandlerMethod(invocableHandlerMethod);
8686
String responseDestination = getDefaultResponseDestination();
8787
if (StringUtils.hasText(responseDestination)) {
88-
if (isQueue()) {
89-
messageListener.setDefaultResponseQueueName(responseDestination);
88+
if (container.isPubSubDomain()) {
89+
messageListener.setDefaultResponseTopicName(responseDestination);
9090
}
9191
else {
92-
messageListener.setDefaultResponseTopicName(responseDestination);
92+
messageListener.setDefaultResponseQueueName(responseDestination);
9393
}
9494
}
9595
MessageConverter messageConverter = container.getMessageConverter();

spring-jms/src/main/java/org/springframework/jms/listener/MessageListenerContainer.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,10 @@ public interface MessageListenerContainer extends Lifecycle {
4141
*/
4242
MessageConverter getMessageConverter();
4343

44+
/**
45+
* Return whether the Publish/Subscribe domain ({@link javax.jms.Topic Topics}) is used.
46+
* Otherwise, the Point-to-Point domain ({@link javax.jms.Queue Queues}) is used.
47+
*/
48+
boolean isPubSubDomain();
49+
4450
}

spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsMessageEndpointManager.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,15 @@ public MessageConverter getMessageConverter() {
156156
return null;
157157
}
158158

159+
@Override
160+
public boolean isPubSubDomain() {
161+
JmsActivationSpecConfig config = getActivationSpecConfig();
162+
if (config != null) {
163+
return config.isPubSubDomain();
164+
}
165+
throw new IllegalStateException("could not determine pubSubDomain, no activation spec config is set");
166+
}
167+
159168
/**
160169
* Set the name of this message endpoint. Populated with the bean name
161170
* automatically when defined within Spring's bean factory.

spring-jms/src/test/java/org/springframework/jms/annotation/AbstractJmsAnnotationDrivenTests.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,6 @@ public void testFullConfiguration(ApplicationContext context) {
105105
simpleFactory.getContainers().get(0).getEndpoint();
106106
assertEquals("listener1", endpoint.getId());
107107
assertEquals("queueIn", endpoint.getDestination());
108-
assertTrue(endpoint.isQueue());
109108
assertEquals("mySelector", endpoint.getSelector());
110109
assertEquals("mySubscription", endpoint.getSubscription());
111110
}

spring-jms/src/test/java/org/springframework/jms/annotation/JmsListenerAnnotationBeanPostProcessorTests.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ public void simpleMessageListener() {
5858
MethodJmsListenerEndpoint methodEndpoint = (MethodJmsListenerEndpoint) endpoint;
5959
assertNotNull(methodEndpoint.getBean());
6060
assertNotNull(methodEndpoint.getMethod());
61-
assertTrue(methodEndpoint.isQueue());
6261
assertTrue("Should have been started " + container, container.isStarted());
6362

6463
SimpleMessageListenerContainer listenerContainer = new SimpleMessageListenerContainer();

spring-jms/src/test/java/org/springframework/jms/config/JmsListenerContainerFactoryTests.java

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ public void createSimpleContainer() {
6767
MessageListener messageListener = new MessageListenerAdapter();
6868
endpoint.setMessageListener(messageListener);
6969
endpoint.setDestination("myQueue");
70-
endpoint.setQueue(false); // See #setDefaultJmsConfig
7170

7271
SimpleMessageListenerContainer container = factory.createMessageListenerContainer(endpoint);
7372

@@ -89,7 +88,6 @@ public void createJmsContainerFullConfig() {
8988
MessageListener messageListener = new MessageListenerAdapter();
9089
endpoint.setMessageListener(messageListener);
9190
endpoint.setDestination("myQueue");
92-
endpoint.setQueue(false); // See #setDefaultJmsConfig
9391
DefaultMessageListenerContainer container = factory.createMessageListenerContainer(endpoint);
9492

9593
assertDefaultJmsConfig(container);
@@ -112,7 +110,6 @@ public void createJcaContainerFullConfig() {
112110
MessageListener messageListener = new MessageListenerAdapter();
113111
endpoint.setMessageListener(messageListener);
114112
endpoint.setDestination("myQueue");
115-
endpoint.setQueue(false); // See #setDefaultJmsConfig
116113
JmsMessageEndpointManager container = factory.createMessageListenerContainer(endpoint);
117114

118115
assertDefaultJcaConfig(container);
@@ -121,19 +118,6 @@ public void createJcaContainerFullConfig() {
121118
assertEquals("myQueue", container.getActivationSpecConfig().getDestinationName());
122119
}
123120

124-
@Test
125-
public void endpointCanOverrideConfig() {
126-
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
127-
factory.setPubSubDomain(true); // topic
128-
129-
SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();
130-
endpoint.setMessageListener(new MessageListenerAdapter());
131-
endpoint.setQueue(true); // queue
132-
133-
DefaultMessageListenerContainer container = factory.createMessageListenerContainer(endpoint);
134-
assertEquals(false, container.isPubSubDomain()); // overridden by the endpoint config
135-
}
136-
137121
@Test
138122
public void jcaExclusiveProperties() {
139123
DefaultJcaListenerContainerFactory factory = new DefaultJcaListenerContainerFactory();

spring-jms/src/test/java/org/springframework/jms/config/JmsListenerEndpointTests.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,12 @@ public void setupJmsMessageContainerFullConfig() {
4646
MessageListener messageListener = new MessageListenerAdapter();
4747
SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();
4848
endpoint.setDestination("myQueue");
49-
endpoint.setQueue(true);
5049
endpoint.setSelector("foo = 'bar'");
5150
endpoint.setSubscription("mySubscription");
5251
endpoint.setMessageListener(messageListener);
5352

5453
endpoint.setupMessageContainer(container);
5554
assertEquals("myQueue", container.getDestinationName());
56-
assertFalse(container.isPubSubDomain());
5755
assertEquals("foo = 'bar'", container.getMessageSelector());
5856
assertEquals("mySubscription", container.getDurableSubscriptionName());
5957
assertEquals(messageListener, container.getMessageListener());
@@ -65,15 +63,13 @@ public void setupJcaMessageContainerFullConfig() {
6563
MessageListener messageListener = new MessageListenerAdapter();
6664
SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();
6765
endpoint.setDestination("myQueue");
68-
endpoint.setQueue(true);
6966
endpoint.setSelector("foo = 'bar'");
7067
endpoint.setSubscription("mySubscription");
7168
endpoint.setMessageListener(messageListener);
7269

7370
endpoint.setupMessageContainer(container);
7471
JmsActivationSpecConfig config = container.getActivationSpecConfig();
7572
assertEquals("myQueue", config.getDestinationName());
76-
assertFalse(config.isPubSubDomain());
7773
assertEquals("foo = 'bar'", config.getMessageSelector());
7874
assertEquals("mySubscription", config.getDurableSubscriptionName());
7975
assertEquals(messageListener, container.getMessageListener());

0 commit comments

Comments
 (0)