INT-2755: Support 'id' For <chain> Child Elements
* Introduce XSD 'id' attribute for all `<chain>` sub-components * Register `<chain>` sub-components as Beans with names based on `<chain>` 'id' * Generate aliases for sub-components based on element 'id' * Add `<chain>` parser test to check sub-components as Beans within `BeanFactory` * Ignore `NestedChainParserTests` as abnormal and confused for SI-configs * Now `<chain>` sub-components are trackable by `MessageHistory` * Now `<chain>` sub-components are eligible for JMX export * Polishing some failed tests https://jira.springsource.org/browse/INT-2755 https://jira.springsource.org/browse/INT-2321 INT-2755: Register as Beans only if 'id' provided INT-2755: Set 'componentName' for handlers with 'id' When components within `<chain>` are configured with an 'id' attribute the 'componentName' of the handler is constructed as: chainHandler.componentName + '.' + handler.componentName. Otherwise it is as was before. INT-2755: Polishing INT-2755: changes according PR's comments * Add INFO about preference of `id` attribute for `<chain>` in the `ChainParser` * Change `<chain>`'s sub-components `id` generation algorithm * Configure `<chain>`'s sub-component `componentName` in the `ChainParser` instead of in the `MessageHandlerChain` * Add `componentName` property to the `JpaOutboundGatewayFactoryBean` * Add a note to the Reference Manual INT-2755: Localize duplicate 'id' within chain INT-2755: remove child beans aliasing * Polishing tests * Polishing docs INT-2755 Polishing: Handle Nested Chain Bean Names Previously named beans within a nested chain did not get unique bean names. INT-2755: Polishing nested chains Doc Polishing
This commit is contained in:
committed by
Gary Russell
parent
ccf7492097
commit
ecf15a9834
@@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:context="http://www.springframework.org/schema/context"
|
||||
xmlns:si="http://www.springframework.org/schema/integration"
|
||||
xmlns:jmx="http://www.springframework.org/schema/integration/jmx"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:context="http://www.springframework.org/schema/context"
|
||||
xmlns:si="http://www.springframework.org/schema/integration"
|
||||
xmlns:jmx="http://www.springframework.org/schema/integration/jmx"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||
http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://www.springframework.org/schema/context
|
||||
http://www.springframework.org/schema/context/spring-context.xsd
|
||||
@@ -24,15 +24,16 @@
|
||||
object-name="test.publisher:name=publisher"
|
||||
default-notification-type="default.type">
|
||||
<jmx:request-handler-advice-chain>
|
||||
<bean class="org.springframework.integration.jmx.config.NotificationPublishingChannelAdapterParserTests$FooADvice" />
|
||||
<bean class="org.springframework.integration.jmx.config.NotificationPublishingChannelAdapterParserTests$FooADvice"/>
|
||||
</jmx:request-handler-advice-chain>
|
||||
</jmx:notification-publishing-channel-adapter>
|
||||
|
||||
|
||||
<si:chain input-channel="publishingWithinChainChannel">
|
||||
<si:chain id="chainWithJmxNotificationPublishing" input-channel="publishingWithinChainChannel">
|
||||
<jmx:notification-publishing-channel-adapter
|
||||
object-name="test.publisher:name=publisher-chain"
|
||||
default-notification-type="default.type"/>
|
||||
id="jmx-notification-publishing-channel-adapter-within-chain"
|
||||
object-name="test.publisher:name=publisher-chain"
|
||||
default-notification-type="default.type"/>
|
||||
</si:chain>
|
||||
|
||||
<bean id="testListener" class="org.springframework.integration.jmx.config.TestListener"/>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2012 the original author or authors.
|
||||
* Copyright 2002-2013 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 the License.
|
||||
@@ -20,16 +20,22 @@ import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
|
||||
import java.util.Set;
|
||||
import javax.management.MBeanServer;
|
||||
import javax.management.Notification;
|
||||
import javax.management.ObjectName;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.integration.Message;
|
||||
import org.springframework.integration.MessageChannel;
|
||||
import org.springframework.integration.core.MessageHandler;
|
||||
import org.springframework.integration.handler.advice.AbstractRequestHandlerAdvice;
|
||||
import org.springframework.integration.jmx.JmxHeaders;
|
||||
import org.springframework.integration.jmx.NotificationPublishingMessageHandler;
|
||||
import org.springframework.integration.support.MessageBuilder;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
@@ -53,6 +59,12 @@ public class NotificationPublishingChannelAdapterParserTests {
|
||||
@Autowired
|
||||
private MessageChannel publishingWithinChainChannel;
|
||||
|
||||
@Autowired
|
||||
private BeanFactory beanFactory;
|
||||
|
||||
@Autowired
|
||||
private MBeanServer server;
|
||||
|
||||
private static volatile int adviceCalled;
|
||||
|
||||
@After
|
||||
@@ -60,7 +72,6 @@ public class NotificationPublishingChannelAdapterParserTests {
|
||||
listener.lastNotification = null;
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void publishStringMessage() throws Exception {
|
||||
adviceCalled = 0;
|
||||
@@ -102,6 +113,8 @@ public class NotificationPublishingChannelAdapterParserTests {
|
||||
|
||||
@Test //INT-2275
|
||||
public void publishStringMessageWithinChain() throws Exception {
|
||||
assertNotNull(this.beanFactory.getBean("chainWithJmxNotificationPublishing$child.jmx-notification-publishing-channel-adapter-within-chain.handler",
|
||||
MessageHandler.class));
|
||||
assertNull(listener.lastNotification);
|
||||
Message<?> message = MessageBuilder.withPayload("XYZ")
|
||||
.setHeader(JmxHeaders.NOTIFICATION_TYPE, "test.type").build();
|
||||
@@ -111,9 +124,15 @@ public class NotificationPublishingChannelAdapterParserTests {
|
||||
assertEquals("XYZ", notification.getMessage());
|
||||
assertEquals("test.type", notification.getType());
|
||||
assertNull(notification.getUserData());
|
||||
Set<ObjectName> names = server.queryNames(
|
||||
new ObjectName("org.springframework.integration:type=MessageHandler," +
|
||||
"name=chainWithJmxNotificationPublishing$child.jmx-notification-publishing-channel-adapter-within-chain.handler,*")
|
||||
, null);
|
||||
assertEquals(1, names.size());
|
||||
}
|
||||
|
||||
private static class TestData {
|
||||
|
||||
}
|
||||
|
||||
public static class FooADvice extends AbstractRequestHandlerAdvice {
|
||||
|
||||
Reference in New Issue
Block a user