Author: chirino
Date: Wed Apr 4 15:46:55 2007
New Revision: 525634
URL: http://svn.apache.org/viewvc?view=rev&rev=525634
Log:
Made endpoint resolution more deterministic. Endpoint resolution now maps the
uri prefix to the registered component name. If the component does not exist,
the
ComponentResolver is used to auto create it and it assigned to the component
name. This avoid the problem of where multiple components think they map to
the same prefix.
- Components now do not need to know what component prefix they have been
assigned.
- So that eliminated the need of getUriPrefixes
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoComponent.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/timer/TimerComponent.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/queue/QueueComponent.java
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/impl/DefaultComponent.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponentResolver.java
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/timer/TimerRouteTest.java
activemq/camel/trunk/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfComponent.java
activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
activemq/camel/trunk/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteTest.java
activemq/camel/trunk/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaComponent.java
activemq/camel/trunk/camel-mina/src/main/java/org/apache/camel/component/mina/MinaComponent.java
activemq/camel/trunk/camel-spring/src/main/java/org/apache/camel/spring/SpringComponentResolver.java
activemq/camel/trunk/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppComponent.java
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoComponent.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoComponent.java?view=diff&rev=525634&r1=525633&r2=525634
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoComponent.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoComponent.java
Wed Apr 4 15:46:55 2007
@@ -57,11 +57,7 @@
return consumers.get(uri);
}
- @Override
- public String[] getUriPrefixes() {
- return new String[] {"pojo"};
- }
-
+
@Override
protected Endpoint<PojoExchange> createEndpoint(String uri, String
remaining, Map parameters) throws Exception {
return new PojoEndpoint(uri, this, remaining);
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/timer/TimerComponent.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/timer/TimerComponent.java?view=diff&rev=525634&r1=525633&r2=525634
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/timer/TimerComponent.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/timer/TimerComponent.java
Wed Apr 4 15:46:55 2007
@@ -40,12 +40,6 @@
return timers.remove(consumer);
}
-
- @Override
- public String[] getUriPrefixes() {
- return new String[] {"timer"};
- }
-
@Override
protected Endpoint<PojoExchange> createEndpoint(String uri, String
remaining, Map parameters) throws Exception {
return new TimerEndpoint(uri, this, remaining);
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/queue/QueueComponent.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/queue/QueueComponent.java?view=diff&rev=525634&r1=525633&r2=525634
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/queue/QueueComponent.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/queue/QueueComponent.java
Wed Apr 4 15:46:55 2007
@@ -41,11 +41,6 @@
}
@Override
- public String[] getUriPrefixes() {
- return new String[] {"queue"};
- }
-
- @Override
protected Endpoint<E> createEndpoint(String uri, String remaining, Map
parameters) throws Exception {
return new QueueEndpoint<E>(uri, this);
}
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=525634&r1=525633&r2=525634
==============================================================================
---
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 15:46:55 2007
@@ -17,17 +17,6 @@
*/
package org.apache.camel.impl;
-import org.apache.camel.*;
-import org.apache.camel.spi.ComponentResolver;
-import org.apache.camel.spi.Injector;
-import org.apache.camel.spi.ExchangeConverter;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.impl.converter.DefaultTypeConverter;
-import org.apache.camel.impl.ReflectionInjector;
-import org.apache.camel.util.FactoryFinder;
-import org.apache.camel.util.NoFactoryAvailableException;
-import org.apache.camel.util.ServiceHelper;
-
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
@@ -36,6 +25,28 @@
import java.util.Map;
import java.util.concurrent.Callable;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Component;
+import org.apache.camel.Consumer;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.ResolveEndpointFailedException;
+import org.apache.camel.Route;
+import org.apache.camel.RouteFactory;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.Service;
+import org.apache.camel.TypeConverter;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.converter.DefaultTypeConverter;
+import org.apache.camel.spi.ComponentResolver;
+import org.apache.camel.spi.ExchangeConverter;
+import org.apache.camel.spi.Injector;
+import org.apache.camel.util.FactoryFinder;
+import org.apache.camel.util.NoFactoryAvailableException;
+import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.ServiceHelper;
+
/**
* Represents the context used to configure routes and the policies to use.
*
@@ -129,22 +140,37 @@
answer = endpoints.get(uri);
if (answer == null) {
try {
+
+ // Use the URI prefix to find the component.
+ String splitURI[] = ObjectHelper.splitOnCharacter(uri,
":", 2);
+ if (splitURI[1] == null) {
+ throw new IllegalArgumentException("Invalid URI, it
did not contain a scheme: " + uri);
+ }
+ String scheme = splitURI[0];
+ Component component = null;
+
+ // synchronize the look up and auto create so that 2
threads can't
+ // concurrently auto create the same component.
synchronized (components) {
- Collection<Component> componentSet =
components.values();
- for (Component component : componentSet) {
- answer = component.resolveEndpoint(uri);
- if (answer != null) {
- break;
- }
- }
+ component = components.get(scheme);
+ if( component == null ) {
+ component =
getComponentResolver().resolveComponent(uri, this);
+ addComponent(scheme, component);
+ if( isStarted() ) {
+ // If the component is looked up after
the context is started,
+ // lets start it up.
+ ServiceHelper.startServices(component);
+ }
+ }
}
- if (answer == null) {
- Component component =
getComponentResolver().resolveComponent(uri, this);
- if (component != null) {
- ServiceHelper.startServices(component);
- answer = component.resolveEndpoint(uri);
- }
+
+ // Ask the component to resolve the endpoint.
+ if (component != null) {
+ answer = component.resolveEndpoint(uri);
}
+
+ // HC: What's the idea behind starting an endpoint?
+ // I don't think we have any endpoints that are services
do we?
if (answer != null) {
ServiceHelper.startServices(answer);
endpoints.put(uri, answer);
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java?view=diff&rev=525634&r1=525633&r2=525634
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java
Wed Apr 4 15:46:55 2007
@@ -35,8 +35,8 @@
* @version $Revision$
*/
public class DefaultComponent<E extends Exchange> extends ServiceSupport
implements Component<E> {
- protected static String[] EMPTY_ARRAY = {};
- private int defaultThreadPoolSize = 5;
+
+ private int defaultThreadPoolSize = 5;
private CamelContext camelContext;
private ScheduledExecutorService executorService;
@@ -47,19 +47,9 @@
this.camelContext = context;
}
- public String[] getUriPrefixes() {
- return EMPTY_ARRAY;
- }
public Endpoint<E> resolveEndpoint(String uri) throws Exception {
- ObjectHelper.notNull(getCamelContext(), "camelContext");
- String remaining = matchesPrefixes(uri);
- if (remaining == null) {
- return null;
- }
- if (remaining.startsWith(":")) {
- remaining = remaining.substring(1);
- }
+ ObjectHelper.notNull(getCamelContext(), "camelContext");
URI u = new URI(uri);
String path = u.getHost();
if (path == null) {
@@ -120,21 +110,6 @@
}
}
- /**
- * Returns true if the uri matches one of the available prefixes from
[EMAIL PROTECTED] #getUriPrefixes()}
- *
- * @param uri the URI
- * @return true if the URI matches one of the available prefixes
- */
- protected String matchesPrefixes(String uri) {
- String[] prefixes = getUriPrefixes();
- for (String prefix : prefixes) {
- if (uri.startsWith(prefix)) {
- return uri.substring(prefix.length());
- }
- }
- return null;
- }
/**
* A factory method allowing derived components to create a new endpoint
from the given URI,
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponentResolver.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponentResolver.java?view=diff&rev=525634&r1=525633&r2=525634
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponentResolver.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponentResolver.java
Wed Apr 4 15:46:55 2007
@@ -56,11 +56,7 @@
return null;
}
if (Component.class.isAssignableFrom(type)) {
- Component<E> answer = (Component<E>)
context.getInjector().newInstance(type);
- // lets add the component using the prefix
- context.addComponent(scheme, answer);
- // TODO should we start it?
- return answer;
+ return (Component<E>)context.getInjector().newInstance(type);
}
else {
throw new IllegalArgumentException("Type is not a Component
implementation. Found: " + type.getName());
Modified:
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/timer/TimerRouteTest.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/timer/TimerRouteTest.java?view=diff&rev=525634&r1=525633&r2=525634
==============================================================================
---
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/timer/TimerRouteTest.java
(original)
+++
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/timer/TimerRouteTest.java
Wed Apr 4 15:46:55 2007
@@ -44,7 +44,7 @@
hitCount.incrementAndGet();
}
});
- container.addComponent("default", component);
+ container.addComponent("pojo", component);
// lets add some routes
container.addRoutes(new RouteBuilder() {
Modified:
activemq/camel/trunk/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfComponent.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfComponent.java?view=diff&rev=525634&r1=525633&r2=525634
==============================================================================
---
activemq/camel/trunk/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfComponent.java
(original)
+++
activemq/camel/trunk/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfComponent.java
Wed Apr 4 15:46:55 2007
@@ -17,6 +17,9 @@
*/
package org.apache.camel.component.cxf;
+import java.net.URI;
+import java.util.Map;
+
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.impl.DefaultComponent;
@@ -28,11 +31,6 @@
import org.apache.cxf.transport.local.LocalTransportFactory;
import org.xmlsoap.schemas.wsdl.http.AddressType;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.Map;
-
/**
* @version $Revision$
*/
@@ -44,11 +42,6 @@
public CxfComponent(CamelContext context) {
super(context);
- }
-
- @Override
- public String[] getUriPrefixes() {
- return new String[] {"cxf"};
}
@Override
Modified:
activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java?view=diff&rev=525634&r1=525633&r2=525634
==============================================================================
---
activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
(original)
+++
activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
Wed Apr 4 15:46:55 2007
@@ -80,11 +80,6 @@
}
@Override
- public String[] getUriPrefixes() {
- return new String[]{"jms"};
- }
-
- @Override
protected Endpoint<JmsExchange> createEndpoint(String uri, String
remaining, Map parameters) throws Exception {
boolean pubSubDomain = false;
Modified:
activemq/camel/trunk/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteTest.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteTest.java?view=diff&rev=525634&r1=525633&r2=525634
==============================================================================
---
activemq/camel/trunk/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteTest.java
(original)
+++
activemq/camel/trunk/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteTest.java
Wed Apr 4 15:46:55 2007
@@ -102,8 +102,8 @@
// lets add some routes
container.addRoutes(new RouteBuilder() {
public void configure() {
- from("jms:queue:test.a").to("jms:queue:test.b");
- from("jms:queue:test.b").process(new Processor<JmsExchange>() {
+ from("activemq:queue:test.a").to("activemq:queue:test.b");
+ from("activemq:queue:test.b").process(new
Processor<JmsExchange>() {
public void process(JmsExchange e) {
System.out.println("Received exchange: " + e.getIn());
receivedExchange = e;
@@ -112,7 +112,7 @@
});
}
});
- endpoint = container.resolveEndpoint("jms:queue:test.a");
+ endpoint = container.resolveEndpoint("activemq:queue:test.a");
assertNotNull("No endpoint found!", endpoint);
container.start();
Modified:
activemq/camel/trunk/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaComponent.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaComponent.java?view=diff&rev=525634&r1=525633&r2=525634
==============================================================================
---
activemq/camel/trunk/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaComponent.java
(original)
+++
activemq/camel/trunk/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaComponent.java
Wed Apr 4 15:46:55 2007
@@ -54,11 +54,6 @@
//-------------------------------------------------------------------------
@Override
- public String[] getUriPrefixes() {
- return new String[]{"jpa"};
- }
-
- @Override
protected Endpoint<Exchange> createEndpoint(String uri, String path, Map
options) throws Exception {
JpaEndpoint endpoint = new JpaEndpoint(uri, this);
Map consumerProperties =
IntrospectionSupport.extractProperties(options, "consumer.");
Modified:
activemq/camel/trunk/camel-mina/src/main/java/org/apache/camel/component/mina/MinaComponent.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-mina/src/main/java/org/apache/camel/component/mina/MinaComponent.java?view=diff&rev=525634&r1=525633&r2=525634
==============================================================================
---
activemq/camel/trunk/camel-mina/src/main/java/org/apache/camel/component/mina/MinaComponent.java
(original)
+++
activemq/camel/trunk/camel-mina/src/main/java/org/apache/camel/component/mina/MinaComponent.java
Wed Apr 4 15:46:55 2007
@@ -53,11 +53,6 @@
}
@Override
- public String[] getUriPrefixes() {
- return new String[] { "mina" };
- }
-
- @Override
protected Endpoint<MinaExchange> createEndpoint(String uri, String
remaining, Map parameters) throws Exception {
URI u = new URI(remaining);
Modified:
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=diff&rev=525634&r1=525633&r2=525634
==============================================================================
---
activemq/camel/trunk/camel-spring/src/main/java/org/apache/camel/spring/SpringComponentResolver.java
(original)
+++
activemq/camel/trunk/camel-spring/src/main/java/org/apache/camel/spring/SpringComponentResolver.java
Wed Apr 4 15:46:55 2007
@@ -18,13 +18,13 @@
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;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Component;
+import org.apache.camel.spi.ComponentResolver;
+import org.springframework.context.ApplicationContext;
/**
* An implementation of [EMAIL PROTECTED] ComponentResolver} which tries to
find a Camel [EMAIL PROTECTED] Component}
Modified:
activemq/camel/trunk/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppComponent.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppComponent.java?view=diff&rev=525634&r1=525633&r2=525634
==============================================================================
---
activemq/camel/trunk/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppComponent.java
(original)
+++
activemq/camel/trunk/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppComponent.java
Wed Apr 4 15:46:55 2007
@@ -48,11 +48,6 @@
}
@Override
- public String[] getUriPrefixes() {
- return new String[] {"xmpp"};
- }
-
- @Override
protected Endpoint<XmppExchange> createEndpoint(String uri, String
remaining, Map parameters) throws Exception {
XmppEndpoint endpoint = new XmppEndpoint(uri, this);