Improve JMS support in cli
This commit deprecates the proprietary EnableJmsMessaging annotation in favour of the standard @EnableJms introduced as of Spring 4.1. This commit also updates the sample and adds an integration test as the feature was actually broken. Fixes gh-1456
This commit is contained in:
parent
bf249d4205
commit
affb202e74
|
@ -5,8 +5,7 @@ package org.test
|
||||||
import java.util.concurrent.CountDownLatch
|
import java.util.concurrent.CountDownLatch
|
||||||
|
|
||||||
@Log
|
@Log
|
||||||
@Configuration
|
@EnableJms
|
||||||
@EnableJmsMessaging
|
|
||||||
class JmsExample implements CommandLineRunner {
|
class JmsExample implements CommandLineRunner {
|
||||||
|
|
||||||
private CountDownLatch latch = new CountDownLatch(1)
|
private CountDownLatch latch = new CountDownLatch(1)
|
||||||
|
@ -14,18 +13,6 @@ class JmsExample implements CommandLineRunner {
|
||||||
@Autowired
|
@Autowired
|
||||||
JmsTemplate jmsTemplate
|
JmsTemplate jmsTemplate
|
||||||
|
|
||||||
@Bean
|
|
||||||
DefaultMessageListenerContainer jmsListener(ConnectionFactory connectionFactory) {
|
|
||||||
new DefaultMessageListenerContainer([
|
|
||||||
connectionFactory: connectionFactory,
|
|
||||||
destinationName: "spring-boot",
|
|
||||||
pubSubDomain: true,
|
|
||||||
messageListener: new MessageListenerAdapter(new Receiver(latch:latch)) {{
|
|
||||||
defaultListenerMethod = "receive"
|
|
||||||
}}
|
|
||||||
])
|
|
||||||
}
|
|
||||||
|
|
||||||
void run(String... args) {
|
void run(String... args) {
|
||||||
def messageCreator = { session ->
|
def messageCreator = { session ->
|
||||||
session.createObjectMessage("Greetings from Spring Boot via ActiveMQ")
|
session.createObjectMessage("Greetings from Spring Boot via ActiveMQ")
|
||||||
|
@ -35,11 +22,8 @@ class JmsExample implements CommandLineRunner {
|
||||||
log.info "Send JMS message, waiting..."
|
log.info "Send JMS message, waiting..."
|
||||||
latch.await()
|
latch.await()
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Log
|
@JmsListener(destination = 'spring-boot')
|
||||||
class Receiver {
|
|
||||||
CountDownLatch latch
|
|
||||||
def receive(String message) {
|
def receive(String message) {
|
||||||
log.info "Received ${message}"
|
log.info "Received ${message}"
|
||||||
latch.countDown()
|
latch.countDown()
|
||||||
|
|
|
@ -28,29 +28,32 @@ import org.springframework.boot.groovy.EnableJmsMessaging;
|
||||||
* {@link CompilerAutoConfiguration} for Spring JMS.
|
* {@link CompilerAutoConfiguration} for Spring JMS.
|
||||||
*
|
*
|
||||||
* @author Greg Turnquist
|
* @author Greg Turnquist
|
||||||
|
* @author Stephane Nicoll
|
||||||
*/
|
*/
|
||||||
public class JmsCompilerAutoConfiguration extends CompilerAutoConfiguration {
|
public class JmsCompilerAutoConfiguration extends CompilerAutoConfiguration {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean matches(ClassNode classNode) {
|
public boolean matches(ClassNode classNode) {
|
||||||
// Slightly weird detection algorithm because there is no @Enable annotation for
|
return AstUtils.hasAtLeastOneAnnotation(classNode, "EnableJms") ||
|
||||||
// Spring JMS
|
AstUtils.hasAtLeastOneAnnotation(classNode, "EnableJmsMessaging");
|
||||||
return AstUtils.hasAtLeastOneAnnotation(classNode, "EnableJmsMessaging");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void applyDependencies(DependencyCustomizer dependencies)
|
public void applyDependencies(DependencyCustomizer dependencies)
|
||||||
throws CompilationFailedException {
|
throws CompilationFailedException {
|
||||||
dependencies.add("spring-jms", "geronimo-jms_1.1_spec");
|
dependencies.add("spring-jms", "jms-api");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void applyImports(ImportCustomizer imports) throws CompilationFailedException {
|
public void applyImports(ImportCustomizer imports) throws CompilationFailedException {
|
||||||
imports.addStarImports("javax.jms", "org.springframework.jms.core",
|
imports.addStarImports("javax.jms",
|
||||||
|
"org.springframework.jms.annotation",
|
||||||
|
"org.springframework.jms.config",
|
||||||
|
"org.springframework.jms.core",
|
||||||
"org.springframework.jms.listener",
|
"org.springframework.jms.listener",
|
||||||
"org.springframework.jms.listener.adapter").addImports(
|
"org.springframework.jms.listener.adapter")
|
||||||
EnableJmsMessaging.class.getCanonicalName());
|
.addImports(EnableJmsMessaging.class.getCanonicalName());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,10 +26,13 @@ import org.springframework.boot.cli.compiler.autoconfigure.JmsCompilerAutoConfig
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pseudo annotation used to trigger {@link JmsCompilerAutoConfiguration}.
|
* Pseudo annotation used to trigger {@link JmsCompilerAutoConfiguration}.
|
||||||
|
*
|
||||||
|
* @deprecated since 1.2.0 in favor of {@code EnableJms}
|
||||||
*/
|
*/
|
||||||
@Target(ElementType.TYPE)
|
@Target(ElementType.TYPE)
|
||||||
@Documented
|
@Documented
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Deprecated
|
||||||
public @interface EnableJmsMessaging {
|
public @interface EnableJmsMessaging {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ import static org.junit.Assert.assertThat;
|
||||||
*
|
*
|
||||||
* @author Phillip Webb
|
* @author Phillip Webb
|
||||||
* @author Andy Wilkinson
|
* @author Andy Wilkinson
|
||||||
|
* @author Stephane Nicoll
|
||||||
*/
|
*/
|
||||||
public class ReproIntegrationTests {
|
public class ReproIntegrationTests {
|
||||||
|
|
||||||
|
@ -71,4 +72,10 @@ public class ReproIntegrationTests {
|
||||||
this.thrown.expectMessage("is not a JAR file");
|
this.thrown.expectMessage("is not a JAR file");
|
||||||
this.cli.jar("secure.groovy", "crsh.groovy");
|
this.cli.jar("secure.groovy", "crsh.groovy");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void jmsListener() throws Exception {
|
||||||
|
this.cli.run("jms.groovy");
|
||||||
|
assertThat(this.cli.getOutput(), containsString("Hello World"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
package org.test
|
||||||
|
|
||||||
|
@Grab("org.apache.activemq:activemq-all:5.4.0")
|
||||||
|
@Grab("activemq-pool")
|
||||||
|
import java.util.concurrent.CountDownLatch
|
||||||
|
|
||||||
|
@Log
|
||||||
|
@EnableJms
|
||||||
|
class SampleJmsListener implements CommandLineRunner {
|
||||||
|
|
||||||
|
private CountDownLatch latch = new CountDownLatch(1)
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
JmsTemplate jmsTemplate
|
||||||
|
|
||||||
|
void run(String... args) {
|
||||||
|
def messageCreator = { session ->
|
||||||
|
session.createObjectMessage("Hello World")
|
||||||
|
} as MessageCreator
|
||||||
|
log.info "Sending JMS message..."
|
||||||
|
jmsTemplate.send("testQueue", messageCreator)
|
||||||
|
log.info "Sent JMS message, waiting..."
|
||||||
|
latch.await()
|
||||||
|
}
|
||||||
|
|
||||||
|
@JmsListener(destination = 'testQueue')
|
||||||
|
def receive(String message) {
|
||||||
|
log.info "Received ${message}"
|
||||||
|
latch.countDown()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue