Author: jstrachan
Date: Wed Apr 4 10:22:32 2007
New Revision: 525560
URL: http://svn.apache.org/viewvc?view=rev&rev=525560
Log:
added a spring ComponentResolver so that components can be used directly from
the spring context
Added:
activemq/camel/trunk/camel-spring/src/main/java/org/apache/camel/spring/SpringComponentResolver.java
(with props)
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ComponentResolver.java
activemq/camel/trunk/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?view=diff&rev=525560&r1=525559&r2=525560
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
Wed Apr 4 10:22:32 2007
@@ -50,7 +50,7 @@
private TypeConverter typeConverter;
private ExchangeConverter exchangeConverter;
private Injector injector;
- private ComponentResolver componentResolver = new
DefaultComponentResolver();
+ private ComponentResolver componentResolver;
/**
* Adds a component to the container.
@@ -139,7 +139,7 @@
}
}
if (answer == null) {
- Component component =
componentResolver.resolveComponent(uri, this);
+ Component component =
getComponentResolver().resolveComponent(uri, this);
if (component != null) {
ServiceHelper.startServices(component);
answer = component.resolveEndpoint(uri);
@@ -238,6 +238,17 @@
this.injector = injector;
}
+ public ComponentResolver getComponentResolver() {
+ if (componentResolver == null) {
+ componentResolver = createComponentResolver();
+ }
+ return componentResolver;
+ }
+
+ public void setComponentResolver(ComponentResolver componentResolver) {
+ this.componentResolver = componentResolver;
+ }
+
// Implementation methods
//-----------------------------------------------------------------------
@@ -302,4 +313,12 @@
throw new RuntimeCamelException(e);
}
}
+
+ /**
+ * Lazily create a default implementation
+ */
+ protected ComponentResolver createComponentResolver() {
+ return new DefaultComponentResolver();
+ }
+
}
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ComponentResolver.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ComponentResolver.java?view=diff&rev=525560&r1=525559&r2=525560
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ComponentResolver.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ComponentResolver.java
Wed Apr 4 10:22:32 2007
@@ -37,5 +37,5 @@
* @param context the context to load the component if it can be resolved
* @return the component which is added to the context or null if it can
not be resolved
*/
- Component<E> resolveComponent(String uri, CamelContext context);
+ Component<E> resolveComponent(String uri, CamelContext context) throws
Exception;
}
Modified:
activemq/camel/trunk/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java?view=diff&rev=525560&r1=525559&r2=525560
==============================================================================
---
activemq/camel/trunk/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java
(original)
+++
activemq/camel/trunk/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java
Wed Apr 4 10:22:32 2007
@@ -18,7 +18,9 @@
package org.apache.camel.spring;
import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.DefaultComponentResolver;
import org.apache.camel.spi.Injector;
+import org.apache.camel.spi.ComponentResolver;
import org.apache.camel.CamelContext;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.DisposableBean;
@@ -59,5 +61,11 @@
@Override
protected Injector createInjector() {
return new SpringInjector(getApplicationContext());
+ }
+
+ @Override
+ protected ComponentResolver createComponentResolver() {
+ ComponentResolver defaultResolver = super.createComponentResolver();
+ return new SpringComponentResolver(getApplicationContext(),
defaultResolver);
}
}
Added:
activemq/camel/trunk/camel-spring/src/main/java/org/apache/camel/spring/SpringComponentResolver.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-spring/src/main/java/org/apache/camel/spring/SpringComponentResolver.java?view=auto&rev=525560
==============================================================================
---
activemq/camel/trunk/camel-spring/src/main/java/org/apache/camel/spring/SpringComponentResolver.java
(added)
+++
activemq/camel/trunk/camel-spring/src/main/java/org/apache/camel/spring/SpringComponentResolver.java
Wed Apr 4 10:22:32 2007
@@ -0,0 +1,61 @@
+/**
+ *
+ * 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.spring;
+
+import static org.apache.camel.util.ObjectHelper.notNull;
+import org.apache.camel.spi.ComponentResolver;
+import org.apache.camel.Component;
+import org.apache.camel.CamelContext;
+import org.apache.camel.util.ObjectHelper;
+import org.springframework.context.ApplicationContext;
+
+import java.net.URI;
+
+/**
+ * An implementation of [EMAIL PROTECTED] ComponentResolver} which tries to
find a Camel [EMAIL PROTECTED] Component}
+ * in the Spring [EMAIL PROTECTED] ApplicationContext} first; if its not there
it defaults to the auto-discovery mechanism.
+ *
+ * @version $Revision$
+ */
+public class SpringComponentResolver implements ComponentResolver {
+ private final ApplicationContext applicationContext;
+ private final ComponentResolver nextResolver;
+
+ public SpringComponentResolver(ApplicationContext applicationContext,
ComponentResolver nextResolver) {
+ notNull(applicationContext, "applicationContext");
+ this.applicationContext = applicationContext;
+ this.nextResolver = nextResolver;
+ }
+
+ public Component resolveComponent(String uri, CamelContext context) throws
Exception {
+ String scheme = new URI(uri).getScheme();
+ Object bean = applicationContext.getBean(scheme);
+ if (bean != null) {
+ if (bean instanceof Component) {
+ return (Component) bean;
+ }
+ else {
+ throw new IllegalArgumentException("Bean with name: " + bean +
" in spring context is not a Component: " + bean);
+ }
+ }
+ if (nextResolver == null) {
+ return null;
+ }
+ return nextResolver.resolveComponent(uri, context);
+ }
+}
Propchange:
activemq/camel/trunk/camel-spring/src/main/java/org/apache/camel/spring/SpringComponentResolver.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
activemq/camel/trunk/camel-spring/src/main/java/org/apache/camel/spring/SpringComponentResolver.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
activemq/camel/trunk/camel-spring/src/main/java/org/apache/camel/spring/SpringComponentResolver.java
------------------------------------------------------------------------------
svn:mime-type = text/plain