Return-Path: X-Original-To: apmail-camel-commits-archive@www.apache.org Delivered-To: apmail-camel-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 38A2D9CD5 for ; Mon, 19 Sep 2011 18:46:28 +0000 (UTC) Received: (qmail 34131 invoked by uid 500); 19 Sep 2011 18:46:28 -0000 Delivered-To: apmail-camel-commits-archive@camel.apache.org Received: (qmail 34090 invoked by uid 500); 19 Sep 2011 18:46:28 -0000 Mailing-List: contact commits-help@camel.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@camel.apache.org Delivered-To: mailing list commits@camel.apache.org Received: (qmail 34083 invoked by uid 99); 19 Sep 2011 18:46:28 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 19 Sep 2011 18:46:28 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 19 Sep 2011 18:46:26 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 70F622388A5E for ; Mon, 19 Sep 2011 18:46:06 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1172741 - in /camel/branches/camel-2.8.x: ./ camel-core/src/main/java/org/apache/camel/management/ components/camel-spring/src/test/java/org/apache/camel/spring/management/ components/camel-spring/src/test/resources/org/apache/camel/spring... Date: Mon, 19 Sep 2011 18:46:06 -0000 To: commits@camel.apache.org From: dkulp@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20110919184606.70F622388A5E@eris.apache.org> Author: dkulp Date: Mon Sep 19 18:46:05 2011 New Revision: 1172741 URL: http://svn.apache.org/viewvc?rev=1172741&view=rev Log: Merged revisions 1150345 via svnmerge from https://svn.apache.org/repos/asf/camel/trunk ........ r1150345 | davsclaus | 2011-07-24 08:54:33 -0400 (Sun, 24 Jul 2011) | 1 line CAMEL-4263: Fixed issue with not registering components/endpoints/servies when using bean annotations. ........ Added: camel/branches/camel-2.8.x/components/camel-spring/src/test/java/org/apache/camel/spring/management/MyBean.java - copied unchanged from r1150345, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/MyBean.java camel/branches/camel-2.8.x/components/camel-spring/src/test/java/org/apache/camel/spring/management/MyBeanRef.java - copied unchanged from r1150345, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/MyBeanRef.java camel/branches/camel-2.8.x/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringJmxEndpointInjectBeanRefTest.java - copied unchanged from r1150345, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringJmxEndpointInjectBeanRefTest.java camel/branches/camel-2.8.x/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringJmxEndpointInjectBeanRefTwoTest.java - copied unchanged from r1150345, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringJmxEndpointInjectBeanRefTwoTest.java camel/branches/camel-2.8.x/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringJmxEndpointInjectBeanTest.java - copied unchanged from r1150345, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringJmxEndpointInjectBeanTest.java camel/branches/camel-2.8.x/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringJmxEndpointInjectBeanRefTest.xml - copied unchanged from r1150345, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringJmxEndpointInjectBeanRefTest.xml camel/branches/camel-2.8.x/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringJmxEndpointInjectBeanRefTwoTest.xml - copied unchanged from r1150345, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringJmxEndpointInjectBeanRefTwoTest.xml camel/branches/camel-2.8.x/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringJmxEndpointInjectBeanTest.xml - copied unchanged from r1150345, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringJmxEndpointInjectBeanTest.xml Modified: camel/branches/camel-2.8.x/ (props changed) camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java Propchange: camel/branches/camel-2.8.x/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Mon Sep 19 18:46:05 2011 @@ -1 +1 @@ -/camel/trunk:1148706,1148710,1149570,1150300-1150311,1150651,1151000,1151054,1151087,1151126,1151362,1152170,1152569,1152733,1152755,1152868,1153620,1153812,1153829,1154684,1155230,1155292,1156108,1156260,1156277,1156479,1156524,1157348,1157749,1157798,1157831,1157878,1158153,1158230,1158295,1158341,1159171,1159174,1159326,1159457,1159460,1159596,1159606,1159682-1159683,1159867,1160547,1160637,1161010,1161082,1161524,1162309,1162395,1163231,1163420,1163656-1163669,1163725,1164342-1164343,1164544,1164557,1164633,1164972-1165000,1165152,1165157,1165658,1165971,1165987,1167098,1167131,1167448,1167487,1167555,1169610,1169620,1170122,1170226,1170397,1170956,1171396,1171755,1171941,1171947 +/camel/trunk:1148706,1148710,1149570,1150300-1150311,1150345,1150651,1151000,1151054,1151087,1151126,1151362,1152170,1152569,1152733,1152755,1152868,1153620,1153812,1153829,1154684,1155230,1155292,1156108,1156260,1156277,1156479,1156524,1157348,1157749,1157798,1157831,1157878,1158153,1158230,1158295,1158341,1159171,1159174,1159326,1159457,1159460,1159596,1159606,1159682-1159683,1159867,1160547,1160637,1161010,1161082,1161524,1162309,1162395,1163231,1163420,1163656-1163669,1163725,1164342-1164343,1164544,1164557,1164633,1164972-1165000,1165152,1165157,1165658,1165971,1165987,1167098,1167131,1167448,1167487,1167555,1169610,1169620,1170122,1170226,1170397,1170956,1171396,1171755,1171941,1171947 Propchange: camel/branches/camel-2.8.x/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java?rev=1172741&r1=1172740&r2=1172741&view=diff ============================================================================== --- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java (original) +++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java Mon Sep 19 18:46:05 2011 @@ -16,6 +16,7 @@ */ package org.apache.camel.management; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -89,6 +90,7 @@ public class DefaultManagementLifecycleS private static final Logger LOG = LoggerFactory.getLogger(DefaultManagementLifecycleStrategy.class); private final Map> wrappedProcessors = new HashMap>(); + private final List preServices = new ArrayList(); private CamelContext camelContext; private volatile boolean initialized; private final Set knowRouteIds = new HashSet(); @@ -171,6 +173,9 @@ public class DefaultManagementLifecycleS // yes we made it and are initialized initialized = true; + + // register any pre registered now that we are initialized + enlistPreRegisteredServices(); } private String findFreeName(Object mc, CamelContextNameStrategy strategy, String managementName) throws MalformedObjectNameException { @@ -196,6 +201,35 @@ public class DefaultManagementLifecycleS return name; } + /** + * After {@link CamelContext} has been enlisted in JMX using {@link #onContextStart(org.apache.camel.CamelContext)} + * then we can enlist any pre registered services as well, as we had to wait for {@link CamelContext} to be + * enlisted first. + *

+ * A component/endpoint/service etc. can be pre registered when using dependency injection and annotations such as + * {@link org.apache.camel.Produce}, {@link org.apache.camel.EndpointInject}. Therefore we need to capture those + * registrations up front, and then afterwards enlist in JMX when {@link CamelContext} is being started. + */ + private void enlistPreRegisteredServices() { + if (preServices.isEmpty()) { + return; + } + + LOG.debug("Registering {} pre registered services", preServices.size()); + for (PreRegisterService pre : preServices) { + if (pre.getComponent() != null) { + onComponentAdd(pre.getName(), pre.getComponent()); + } else if (pre.getEndpoint() != null) { + onEndpointAdd(pre.getEndpoint()); + } else if (pre.getService() != null) { + onServiceAdd(pre.getCamelContext(), pre.getService(), pre.getRoute()); + } + } + + // we are done so clear the list + preServices.clear(); + } + public void onContextStop(CamelContext context) { // the agent hasn't been started if (!initialized) { @@ -215,6 +249,10 @@ public class DefaultManagementLifecycleS public void onComponentAdd(String name, Component component) { // always register components as there are only a few of those if (!initialized) { + // pre register so we can register later when we have been initialized + PreRegisterService pre = new PreRegisterService(); + pre.onComponentAdd(name, component); + preServices.add(pre); return; } try { @@ -246,6 +284,14 @@ public class DefaultManagementLifecycleS * @param endpoint the Endpoint attempted to be added */ public void onEndpointAdd(Endpoint endpoint) { + if (!initialized) { + // pre register so we can register later when we have been initialized + PreRegisterService pre = new PreRegisterService(); + pre.onEndpointAdd(endpoint); + preServices.add(pre); + return; + } + if (!shouldRegister(endpoint, null)) { // avoid registering if not needed return; @@ -278,6 +324,14 @@ public class DefaultManagementLifecycleS } public void onServiceAdd(CamelContext context, Service service, Route route) { + if (!initialized) { + // pre register so we can register later when we have been initialized + PreRegisterService pre = new PreRegisterService(); + pre.onServiceAdd(context, service, route); + preServices.add(pre); + return; + } + // services can by any kind of misc type but also processors // so we have special logic when its a processor @@ -614,6 +668,7 @@ public class DefaultManagementLifecycleS public void stop() throws Exception { initialized = false; knowRouteIds.clear(); + preServices.clear(); } /** @@ -663,5 +718,59 @@ public class DefaultManagementLifecycleS return false; } + /** + * Class which holds any pre registration details. + * + * @see org.apache.camel.management.DefaultManagementLifecycleStrategy#enlistPreRegisteredServices() + */ + private final class PreRegisterService { + + private String name; + private Component component; + private Endpoint endpoint; + private CamelContext camelContext; + private Service service; + private Route route; + + public void onComponentAdd(String name, Component component) { + this.name = name; + this.component = component; + } + + public void onEndpointAdd(Endpoint endpoint) { + this.endpoint = endpoint; + } + + public void onServiceAdd(CamelContext camelContext, Service service, Route route) { + this.camelContext = camelContext; + this.service = service; + this.route = route; + } + + public String getName() { + return name; + } + + public Component getComponent() { + return component; + } + + public Endpoint getEndpoint() { + return endpoint; + } + + public CamelContext getCamelContext() { + return camelContext; + } + + public Service getService() { + return service; + } + + public Route getRoute() { + return route; + } + } + }