Author: davsclaus Date: Wed May 23 15:44:18 2012 New Revision: 1341908 URL: http://svn.apache.org/viewvc?rev=1341908&view=rev Log: CAMEL-5299: Fixed camel-blueprint to not inject CamelContextAware as the context is not ready yet. Improved startup of management using event notifiers, to inject camel context if aware.
Added: camel/trunk/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/EventNotifierTest.java - copied, changed from r1341767, camel/trunk/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/FilterTest.java camel/trunk/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/eventNotifier.xml - copied, changed from r1341767, camel/trunk/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/filterTest.xml Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java camel/trunk/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java camel/trunk/camel-core/src/main/java/org/apache/camel/management/ManagementStrategyFactory.java camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=1341908&r1=1341907&r2=1341908&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Wed May 23 15:44:18 2012 @@ -1473,7 +1473,12 @@ public class DefaultCamelContext extends } // start management strategy before lifecycles are started - getManagementStrategy().start(); + ManagementStrategy managementStrategy = getManagementStrategy(); + // inject CamelContext if aware + if (managementStrategy instanceof CamelContextAware) { + ((CamelContextAware) managementStrategy).setCamelContext(this); + } + ServiceHelper.startService(managementStrategy); // start lifecycle strategies ServiceHelper.startServices(lifecycleStrategies); Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java?rev=1341908&r1=1341907&r2=1341908&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java Wed May 23 15:44:18 2012 @@ -32,6 +32,7 @@ import org.apache.camel.spi.ManagementAg import org.apache.camel.spi.ManagementNamingStrategy; import org.apache.camel.spi.ManagementObjectStrategy; import org.apache.camel.spi.ManagementStrategy; +import org.apache.camel.util.ObjectHelper; import org.apache.camel.util.ServiceHelper; /** @@ -58,6 +59,13 @@ public class DefaultManagementStrategy i private ManagementStatisticsLevel statisticsLevel = ManagementStatisticsLevel.All; private CamelContext camelContext; + public DefaultManagementStrategy() { + } + + public DefaultManagementStrategy(CamelContext camelContext) { + this.camelContext = camelContext; + } + public List<EventNotifier> getEventNotifiers() { return eventNotifiers; } @@ -182,9 +190,21 @@ public class DefaultManagementStrategy i } public void start() throws Exception { + ObjectHelper.notNull(camelContext, "CamelContext"); + if (eventNotifiers != null) { - ServiceHelper.startServices(eventNotifiers); + for (EventNotifier notifier : eventNotifiers) { + + // inject CamelContext if the service is aware + if (notifier instanceof CamelContextAware) { + CamelContextAware aware = (CamelContextAware) notifier; + aware.setCamelContext(camelContext); + } + + ServiceHelper.startService(notifier); + } } + if (managementAgent != null) { managementAgent.start(); // set the naming strategy using the domain name from the agent Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java?rev=1341908&r1=1341907&r2=1341908&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java Wed May 23 15:44:18 2012 @@ -54,11 +54,13 @@ public class ManagedManagementStrategy e public ManagedManagementStrategy() { } - public ManagedManagementStrategy(CamelContext camelContext) { - this(new DefaultManagementAgent(camelContext)); + @Deprecated + public ManagedManagementStrategy(ManagementAgent managementAgent) { + setManagementAgent(managementAgent); } - public ManagedManagementStrategy(ManagementAgent managementAgent) { + public ManagedManagementStrategy(CamelContext camelContext, ManagementAgent managementAgent) { + setCamelContext(camelContext); setManagementAgent(managementAgent); } Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/ManagementStrategyFactory.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/ManagementStrategyFactory.java?rev=1341908&r1=1341907&r2=1341908&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/management/ManagementStrategyFactory.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/ManagementStrategyFactory.java Wed May 23 15:44:18 2012 @@ -35,7 +35,7 @@ public class ManagementStrategyFactory { log.info("JMX is disabled."); } else { try { - answer = new ManagedManagementStrategy(new DefaultManagementAgent(context)); + answer = new ManagedManagementStrategy(context, new DefaultManagementAgent(context)); // must start it to ensure JMX works and can load needed Spring JARs ServiceHelper.startService(answer); // prefer to have it at first strategy @@ -48,7 +48,7 @@ public class ManagementStrategyFactory { } if (answer == null) { - answer = new DefaultManagementStrategy(); + answer = new DefaultManagementStrategy(context); } return answer; } Modified: camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java?rev=1341908&r1=1341907&r2=1341908&view=diff ============================================================================== --- camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java (original) +++ camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java Wed May 23 15:44:18 2012 @@ -45,7 +45,6 @@ import org.apache.aries.blueprint.mutabl import org.apache.aries.blueprint.mutable.MutableRefMetadata; import org.apache.aries.blueprint.mutable.MutableReferenceMetadata; import org.apache.camel.CamelContext; -import org.apache.camel.CamelContextAware; import org.apache.camel.EndpointInject; import org.apache.camel.Produce; import org.apache.camel.blueprint.BlueprintCamelContext; @@ -521,17 +520,9 @@ public class CamelNamespaceHandler imple public Object beforeInit(Object bean, String beanName, BeanCreator beanCreator, BeanMetadata beanMetadata) { injectFields(bean, beanName); injectMethods(bean, beanName); - if (bean instanceof CamelContextAware) { - ((CamelContextAware) bean).setCamelContext(getCamelContext()); - } return bean; } - @Override - public CamelContext getCamelContext() { - return (CamelContext) blueprintContainer.getComponentInstance(camelContextName); - } - /** * A strategy method to allow implementations to perform some custom JBI * based injection of the POJO @@ -616,14 +607,14 @@ public class CamelNamespaceHandler imple } } - public Object afterInit(Object o, String s, BeanCreator beanCreator, BeanMetadata beanMetadata) { - return o; + public Object afterInit(Object bean, String beanName, BeanCreator beanCreator, BeanMetadata beanMetadata) { + return bean; } - public void beforeDestroy(Object o, String s) { + public void beforeDestroy(Object bean, String beanName) { } - public void afterDestroy(Object o, String s) { + public void afterDestroy(Object bean, String beanName) { } } Copied: camel/trunk/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/EventNotifierTest.java (from r1341767, camel/trunk/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/FilterTest.java) URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/EventNotifierTest.java?p2=camel/trunk/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/EventNotifierTest.java&p1=camel/trunk/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/FilterTest.java&r1=1341767&r2=1341908&rev=1341908&view=diff ============================================================================== --- camel/trunk/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/FilterTest.java (original) +++ camel/trunk/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/EventNotifierTest.java Wed May 23 15:44:18 2012 @@ -16,48 +16,26 @@ */ package org.apache.camel.test.blueprint; -import org.apache.camel.EndpointInject; -import org.apache.camel.Produce; -import org.apache.camel.ProducerTemplate; -import org.apache.camel.component.mock.MockEndpoint; import org.junit.Test; /** - * Tests filtering using Camel Blueprint Test - * + * Tests using custom event notifier */ -// START SNIPPET: example -public class FilterTest extends CamelBlueprintTestSupport { - - @EndpointInject(uri = "mock:result") - protected MockEndpoint resultEndpoint; - - @Produce(uri = "direct:start") - protected ProducerTemplate template; +public class EventNotifierTest extends CamelBlueprintTestSupport { @Override protected String getBlueprintDescriptor() { - return "org/apache/camel/test/blueprint/filterTest.xml"; + return "org/apache/camel/test/blueprint/eventNotifier.xml"; } @Test - public void testSendMatchingMessage() throws Exception { - String expectedBody = "<matched/>"; + public void testCustomEvent() throws Exception { + getMockEndpoint("mock:result").expectedMessageCount(1); + getMockEndpoint("mock:event").expectedMinimumMessageCount(8); - resultEndpoint.expectedBodiesReceived(expectedBody); + template.sendBody("direct:start", "Hello World"); - template.sendBodyAndHeader(expectedBody, "foo", "bar"); - - resultEndpoint.assertIsSatisfied(); + assertMockEndpointsSatisfied(); } - @Test - public void testSendNotMatchingMessage() throws Exception { - resultEndpoint.expectedMessageCount(0); - - template.sendBodyAndHeader("<notMatched/>", "foo", "notMatchedHeaderValue"); - - resultEndpoint.assertIsSatisfied(); - } } -// END SNIPPET: example Copied: camel/trunk/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/eventNotifier.xml (from r1341767, camel/trunk/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/filterTest.xml) URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/eventNotifier.xml?p2=camel/trunk/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/eventNotifier.xml&p1=camel/trunk/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/filterTest.xml&r1=1341767&r2=1341908&rev=1341908&view=diff ============================================================================== --- camel/trunk/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/filterTest.xml (original) +++ camel/trunk/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/eventNotifier.xml Wed May 23 15:44:18 2012 @@ -15,23 +15,21 @@ See the License for the specific language governing permissions and limitations under the License. --> -<!-- START SNIPPET: example --> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> - <camelContext id="filterCamel" xmlns="http://camel.apache.org/schema/blueprint"> + <bean class="org.apache.camel.management.PublishEventNotifier" id="eventNotifier"> + <property name="endpointUri" value="mock:event"/> + </bean> + <camelContext xmlns="http://camel.apache.org/schema/blueprint"> <route> <from uri="direct:start"/> - <filter> - <simple>${header.foo} == 'bar'</simple> - <to uri="mock:result"/> - </filter> + <to uri="log:result"/> + <to uri="mock:result"/> </route> - </camelContext> </blueprint> -<!-- END SNIPPET: example -->