Updated Branches: refs/heads/master 4dc4dc361 -> 66939043e
[CAMEL-6115] Add a global interceptor strategy Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/5270d5c1 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/5270d5c1 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/5270d5c1 Branch: refs/heads/master Commit: 5270d5c1020ed0863cadfde3ce9c5318b70fc8ef Parents: 4dc4dc3 Author: Guillaume Nodet <gno...@gmail.com> Authored: Thu May 16 11:24:15 2013 +0200 Committer: Guillaume Nodet <gno...@gmail.com> Committed: Fri May 17 13:33:01 2013 +0200 ---------------------------------------------------------------------- .../org/apache/camel/impl/DefaultCamelContext.java | 3 + .../main/java/org/apache/camel/spi/Container.java | 78 +++++++++++++++ 2 files changed, 81 insertions(+), 0 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/5270d5c1/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java index 459de34..e721837 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java +++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java @@ -90,6 +90,7 @@ import org.apache.camel.processor.interceptor.Tracer; import org.apache.camel.spi.CamelContextNameStrategy; import org.apache.camel.spi.ClassResolver; import org.apache.camel.spi.ComponentResolver; +import org.apache.camel.spi.Container; import org.apache.camel.spi.DataFormat; import org.apache.camel.spi.DataFormatResolver; import org.apache.camel.spi.Debugger; @@ -231,6 +232,8 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon } else { packageScanClassResolver = new DefaultPackageScanClassResolver(); } + + Container.Instance.manage(this); } /** http://git-wip-us.apache.org/repos/asf/camel/blob/5270d5c1/camel-core/src/main/java/org/apache/camel/spi/Container.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/spi/Container.java b/camel-core/src/main/java/org/apache/camel/spi/Container.java new file mode 100644 index 0000000..71d8a43 --- /dev/null +++ b/camel-core/src/main/java/org/apache/camel/spi/Container.java @@ -0,0 +1,78 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.spi; + +import org.apache.camel.CamelContext; + +/** + * The <code>Container</code> interface defines an object that can be used + * to customize all Camel contexts created. + * + * A container can be used to globally intercept and customize Camel contexts, + * by registering a <code>LifecycleStrategy</code>, a <code>ProcessorFactory</code>, + * or any other SPI object. + */ +public interface Container { + + /** + * The <code>Instance</code> class holds a <code>Container</code> singleton. + */ + public static final class Instance { + + private Instance() {} + + private static Container container; + + /** + * Access the registered Container. + * + * @return the Container singleton + */ + public static Container get() { + return container; + } + + /** + * Register the Container. + * + * @param container the Container to register + */ + public static void set(Container container) { + Instance.container = container; + } + + /** + * Called by Camel when a <code>CamelContext</code> has been created. + * + * @param camelContext the newly created CamelContext + */ + public static void manage(CamelContext camelContext) { + Container cnt = container; + if (cnt != null) { + cnt.manage(camelContext); + } + } + } + + /** + * Called by Camel when a <code>CamelContext</code> has been created. + * + * @param camelContext the newly created CamelContext + */ + void manage(CamelContext camelContext); + +}