You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by dk...@apache.org on 2011/07/09 04:21:59 UTC
svn commit: r1144575 - in /camel/branches/camel-2.7.x: ./
camel-core/src/main/java/org/apache/camel/
camel-core/src/main/java/org/apache/camel/impl/
camel-core/src/test/java/org/apache/camel/impl/
Author: dkulp
Date: Sat Jul 9 02:21:59 2011
New Revision: 1144575
URL: http://svn.apache.org/viewvc?rev=1144575&view=rev
Log:
Merged revisions 1139747 via svnmerge from
https://svn.apache.org/repos/asf/camel/trunk
........
r1139747 | davsclaus | 2011-06-26 05:33:49 -0400 (Sun, 26 Jun 2011) | 1 line
CAMEL-4155: addService will inject CamelContext if service is context aware
........
Modified:
camel/branches/camel-2.7.x/ (props changed)
camel/branches/camel-2.7.x/camel-core/src/main/java/org/apache/camel/CamelContext.java
camel/branches/camel-2.7.x/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
camel/branches/camel-2.7.x/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextTest.java
Propchange: camel/branches/camel-2.7.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Jul 9 02:21:59 2011
@@ -1 +1 @@
-/camel/trunk:1083696,1083723-1083724,1084150,1085277,1085543,1085549,1085905,1085909,1086165,1086231,1087005,1087276,1087612,1087620,1087856,1088583,1088916-1088917,1089275,1089348,1090166,1090204,1090564,1090960-1090969,1091082,1091518,1091771,1091799,1092034,1092068,1092577,1092667,1093978,1093980,1093999,1094123,1094147,1094156,1095405,1095469,1095471,1095475-1095476,1096346,1096736,1097761,1097909,1097912,1097978,1098032,1098628,1098630,1099228,1099417,1100711,1100975,1102162,1102177,1102181,1104076,1124497,1127744,1127988,1128315,1128970,1131411,1132961,1134252,1134260,1134404,1134501,1134626,1134681,1134714-1134911,1135223,1135364,1136065,1136290,1137696,1138285,1139163,1139749,1140096-1140102,1141783,1142500,1142654,1142721,1143332,1143925,1144248,1144324
+/camel/trunk:1083696,1083723-1083724,1084150,1085277,1085543,1085549,1085905,1085909,1086165,1086231,1087005,1087276,1087612,1087620,1087856,1088583,1088916-1088917,1089275,1089348,1090166,1090204,1090564,1090960-1090969,1091082,1091518,1091771,1091799,1092034,1092068,1092577,1092667,1093978,1093980,1093999,1094123,1094147,1094156,1095405,1095469,1095471,1095475-1095476,1096346,1096736,1097761,1097909,1097912,1097978,1098032,1098628,1098630,1099228,1099417,1100711,1100975,1102162,1102177,1102181,1104076,1124497,1127744,1127988,1128315,1128970,1131411,1132961,1134252,1134260,1134404,1134501,1134626,1134681,1134714-1134911,1135223,1135364,1136065,1136290,1137696,1138285,1139163,1139747,1139749,1140096-1140102,1141783,1142500,1142654,1142721,1143332,1143925,1144248,1144324
Propchange: camel/branches/camel-2.7.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: camel/branches/camel-2.7.x/camel-core/src/main/java/org/apache/camel/CamelContext.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.7.x/camel-core/src/main/java/org/apache/camel/CamelContext.java?rev=1144575&r1=1144574&r2=1144575&view=diff
==============================================================================
--- camel/branches/camel-2.7.x/camel-core/src/main/java/org/apache/camel/CamelContext.java (original)
+++ camel/branches/camel-2.7.x/camel-core/src/main/java/org/apache/camel/CamelContext.java Sat Jul 9 02:21:59 2011
@@ -140,9 +140,12 @@ public interface CamelContext extends Su
//-----------------------------------------------------------------------
/**
- * Adds a service, starting it so that it will be stopped with this context
+ * Adds a service to this context, which allows this context to control the lifecycle, ensuring
+ * the service is stopped when the context stops.
* <p/>
- * The added service will also be enlisted in JMX for management (if JMX is enabled)
+ * The service will also have {@link CamelContext} injected if its {@link CamelContextAware}.
+ * The service will also be enlisted in JMX for management (if JMX is enabled).
+ * The service will be started, if its not already started.
*
* @param object the service
* @throws Exception can be thrown when starting the service
@@ -150,7 +153,7 @@ public interface CamelContext extends Su
void addService(Object object) throws Exception;
/**
- * Has the given service already been added?
+ * Has the given service already been added to this context?
*
* @param object the service
* @return <tt>true</tt> if already added, <tt>false</tt> if not.
Modified: camel/branches/camel-2.7.x/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.7.x/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=1144575&r1=1144574&r2=1144575&view=diff
==============================================================================
--- camel/branches/camel-2.7.x/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original)
+++ camel/branches/camel-2.7.x/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Sat Jul 9 02:21:59 2011
@@ -873,6 +873,13 @@ public class DefaultCamelContext extends
}
public void addService(Object object) throws Exception {
+
+ // inject CamelContext
+ if (object instanceof CamelContextAware) {
+ CamelContextAware aware = (CamelContextAware) object;
+ aware.setCamelContext(this);
+ }
+
if (object instanceof Service) {
Service service = (Service) object;
@@ -893,9 +900,14 @@ public class DefaultCamelContext extends
}
// do not add endpoints as they have their own list
if (singleton && !(service instanceof Endpoint)) {
- servicesToClose.add(service);
+ // only add to list of services to close if its not already there
+ if (!hasService(service)) {
+ servicesToClose.add(service);
+ }
}
}
+
+ // and then ensure service is started (as stated in the javadoc)
startServices(object);
}
Modified: camel/branches/camel-2.7.x/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.7.x/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextTest.java?rev=1144575&r1=1144574&r2=1144575&view=diff
==============================================================================
--- camel/branches/camel-2.7.x/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextTest.java (original)
+++ camel/branches/camel-2.7.x/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextTest.java Sat Jul 9 02:21:59 2011
@@ -21,6 +21,8 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
import org.apache.camel.Component;
import org.apache.camel.Endpoint;
import org.apache.camel.NoSuchEndpointException;
@@ -324,4 +326,41 @@ public class DefaultCamelContextTest ext
assertEquals(false, ctx.isStarted());
assertEquals(false, ctx.isSuspended());
}
+
+ public void testAddServiceInjectCamelContext() throws Exception {
+ MyService my = new MyService();
+
+ DefaultCamelContext ctx = new DefaultCamelContext();
+ ctx.addService(my);
+
+ assertEquals(ctx, my.getCamelContext());
+ assertEquals("Started", my.getStatus().name());
+
+ ctx.stop();
+ assertEquals("Stopped", my.getStatus().name());
+ }
+
+ private class MyService extends ServiceSupport implements CamelContextAware {
+
+ private CamelContext camelContext;
+
+ public CamelContext getCamelContext() {
+ return camelContext;
+ }
+
+ public void setCamelContext(CamelContext camelContext) {
+ this.camelContext = camelContext;
+ }
+
+ @Override
+ protected void doStart() throws Exception {
+ // noop
+ }
+
+ @Override
+ protected void doStop() throws Exception {
+ // noop
+ }
+ }
+
}