INT-1735 changed the way ExpressionControlBusFactoryBean validates Lifecycle methods

This commit is contained in:
Oleg Zhurakousky
2011-01-05 13:40:20 -05:00
parent a7e970bbe3
commit 1cbae6d353
3 changed files with 60 additions and 2 deletions

View File

@@ -27,12 +27,14 @@ import org.springframework.integration.handler.ServiceActivatingHandler;
import org.springframework.jmx.export.annotation.ManagedAttribute;
import org.springframework.jmx.export.annotation.ManagedOperation;
import org.springframework.util.CustomizableThreadCreator;
import org.springframework.util.ReflectionUtils;
/**
* FactoryBean for creating {@link MessageHandler} instances to handle a message as a SpEL expression.
*
* @author Dave Syer
* @author Mark Fisher
* @author Oleg Zhurakousky
* @since 2.0
*/
public class ExpressionControlBusFactoryBean extends AbstractSimpleMessageHandlerFactoryBean {
@@ -69,10 +71,11 @@ public class ExpressionControlBusFactoryBean extends AbstractSimpleMessageHandle
return supportedMethods;
}
private boolean accept(Method method) {
if (method.getDeclaringClass().equals(Lifecycle.class)) {
private boolean accept(Method method) {
if (ReflectionUtils.findMethod(Lifecycle.class, method.getName(), method.getParameterTypes()) != null){
return true;
}
if (CustomizableThreadCreator.class.isAssignableFrom(method.getDeclaringClass())
&& (method.getName().startsWith("get")
|| method.getName().startsWith("set")

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/integration" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:groovy="http://www.springframework.org/schema/integration/groovy"
xsi:schemaLocation="http://www.springframework.org/schema/integration
http://www.springframework.org/schema/integration/spring-integration-2.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<control-bus input-channel="inputChannel" auto-startup="true"/>
<inbound-channel-adapter id="adapter" channel="outputChannel" auto-startup="false" >
<poller fixed-rate="1000"/>
<beans:bean class="org.springframework.integration.config.xml.ControlBusTests.AdapterService"/>
</inbound-channel-adapter>
<channel id="outputChannel">
<queue/>
</channel>
</beans:beans>

View File

@@ -16,15 +16,22 @@
package org.springframework.integration.config.xml;
import static junit.framework.Assert.assertNotNull;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import java.util.Date;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.Message;
import org.springframework.integration.MessageChannel;
import org.springframework.integration.core.MessageSource;
import org.springframework.integration.core.PollableChannel;
import org.springframework.integration.message.GenericMessage;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.jmx.export.annotation.ManagedOperation;
import org.springframework.test.context.ContextConfiguration;
@@ -51,6 +58,17 @@ public class ControlBusTests {
assertEquals("catbar", output.receive(0).getPayload());
assertNull(output.receive(0));
}
@Test
public void testLifecycleMethods() {
ApplicationContext context = new ClassPathXmlApplicationContext("ControlBusLifecycleTests-context.xml", this.getClass());
MessageChannel inputChannel = context.getBean("inputChannel", MessageChannel.class);
PollableChannel outputChannel = context.getBean("outputChannel", PollableChannel.class);
assertNull(outputChannel.receive(1000));
Message<?> message = MessageBuilder.withPayload("@adapter.start()").build();
inputChannel.send(message);
assertNotNull(outputChannel.receive(1000));
}
public static class Service {
@@ -60,5 +78,18 @@ public class ControlBusTests {
return "cat";
}
}
public static class AdapterService implements MessageSource<String>{
// public String produceDate() {
// System.out.println("Producing Date");
// return new Date().toString();
// }
public Message<String> receive() {
System.out.println("Producing Date");
return new GenericMessage<String>(new Date().toString());
}
}
}