You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by js...@apache.org on 2007/04/04 16:19:50 UTC
svn commit: r525519 - in /activemq/camel/trunk:
camel-core/src/main/java/org/apache/camel/
camel-core/src/main/java/org/apache/camel/impl/
camel-core/src/main/java/org/apache/camel/util/
camel-core/src/test/java/org/apache/camel/util/ camel-cxf/src/mai...
Author: jstrachan
Date: Wed Apr 4 07:19:48 2007
New Revision: 525519
URL: http://svn.apache.org/viewvc?view=rev&rev=525519
Log:
simplified the auto-discovery and endpoint resolving mechanism to simplify the API, reduce the amount of code that a developer has to write and allow for more flexible IoC injection
Added:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponentResolver.java (with props)
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/ObjectHelperTest.java (with props)
activemq/camel/trunk/camel-cxf/src/main/resources/META-INF/services/org/apache/camel/component/
- copied from r525477, activemq/camel/trunk/camel-cxf/src/main/resources/META-INF/services/org/apache/camel/EndpointResolver/
activemq/camel/trunk/camel-jms/src/main/resources/META-INF/services/org/apache/camel/component/
activemq/camel/trunk/camel-jms/src/main/resources/META-INF/services/org/apache/camel/component/jms
- copied, changed from r525477, activemq/camel/trunk/camel-jms/src/main/resources/META-INF/services/org/apache/camel/EndpointResolver/jms
activemq/camel/trunk/camel-jpa/src/main/resources/META-INF/services/org/apache/camel/component/
activemq/camel/trunk/camel-jpa/src/main/resources/META-INF/services/org/apache/camel/component/jpa
activemq/camel/trunk/camel-mina/src/main/resources/META-INF/services/org/apache/camel/component/
activemq/camel/trunk/camel-mina/src/main/resources/META-INF/services/org/apache/camel/component/mina
Removed:
activemq/camel/trunk/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpointResolver.java
activemq/camel/trunk/camel-cxf/src/main/resources/META-INF/services/org/apache/camel/EndpointResolver/
activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpointResolver.java
activemq/camel/trunk/camel-jms/src/main/resources/META-INF/services/org/apache/camel/EndpointResolver/
activemq/camel/trunk/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaEndpointResolver.java
activemq/camel/trunk/camel-jpa/src/main/resources/META-INF/services/org/apache/camel/EndpointResolver/
activemq/camel/trunk/camel-mina/src/main/java/org/apache/camel/component/mina/MinaEndpointResolver.java
activemq/camel/trunk/camel-mina/src/main/resources/META-INF/services/org/apache/camel/EndpointResolver/
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Component.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/util/FactoryFinder.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
activemq/camel/trunk/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfBinding.java
activemq/camel/trunk/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfComponent.java
activemq/camel/trunk/camel-cxf/src/main/resources/META-INF/services/org/apache/camel/component/cxf
activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/CamelJbiComponent.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-jpa/src/main/java/org/apache/camel/component/jpa/JpaEndpoint.java
activemq/camel/trunk/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaTest.java
activemq/camel/trunk/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaUsingCustomPersistenceUnitTest.java
activemq/camel/trunk/camel-mina/src/main/java/org/apache/camel/component/mina/MinaComponent.java
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Component.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Component.java?view=diff&rev=525519&r1=525518&r2=525519
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Component.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Component.java Wed Apr 4 07:19:48 2007
@@ -23,7 +23,7 @@
*
* @version $Revision: 519901 $
*/
-public interface Component<E> {
+public interface Component<E extends Exchange> {
/**
* Returns the context
@@ -44,5 +44,13 @@
* @return the executor for this endpoint
*/
ScheduledExecutorService getExecutorService();
-
+
+ /**
+ * Attempt to create an endpoint for the given URI if the component is capable of handling the URI
+ *
+ * @param uri the URI to create
+ * @return a newly created endpoint or null if this component cannot create instances of the given
+ * uri
+ */
+ Endpoint<E> createEndpoint(String uri) throws Exception;
}
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=525519&r1=525518&r2=525519
==============================================================================
--- 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 07:19:48 2007
@@ -23,10 +23,8 @@
import org.apache.camel.impl.converter.Injector;
import org.apache.camel.impl.converter.ReflectionInjector;
import org.apache.camel.util.FactoryFinder;
-import org.apache.camel.util.ServiceHelper;
import org.apache.camel.util.NoFactoryAvailableException;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.apache.camel.util.ServiceHelper;
import java.io.IOException;
import java.util.ArrayList;
@@ -36,7 +34,6 @@
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.atomic.AtomicBoolean;
/**
* Represents the context used to configure routes and the policies to use.
@@ -45,7 +42,6 @@
* @org.apache.xbean.XBean element="container" rootElement="true"
*/
public class DefaultCamelContext extends ServiceSupport implements CamelContext, Service {
- private static final transient Log log = LogFactory.getLog(DefaultCamelContext.class);
private Map<String, Endpoint> endpoints = new HashMap<String, Endpoint>();
private Map<String, Component> components = new HashMap<String, Component>();
private List<EndpointResolver> resolvers = new CopyOnWriteArrayList<EndpointResolver>();
@@ -55,7 +51,7 @@
private EndpointResolver endpointResolver;
private ExchangeConverter exchangeConverter;
private Injector injector;
- private AtomicBoolean started = new AtomicBoolean(false);
+ private DefaultComponentResolver componentResolver = new DefaultComponentResolver();
/**
* Adds a component to the container.
@@ -137,10 +133,27 @@
answer = endpoints.get(uri);
if (answer == null) {
try {
- for (EndpointResolver resolver : resolvers) {
- answer = resolver.resolveEndpoint(this, uri);
- if (answer != null) {
- break;
+ synchronized (components) {
+ Collection<Component> componentSet = components.values();
+ for (Component component : componentSet) {
+ answer = component.createEndpoint(uri);
+ if (answer != null) {
+ break;
+ }
+ }
+ }
+ if (answer == null) {
+ Component component = componentResolver.resolveComponent(uri, this);
+ if (component != null) {
+ answer = component.createEndpoint(uri);
+ }
+ }
+ if (answer == null) {
+ for (EndpointResolver resolver : resolvers) {
+ answer = resolver.resolveEndpoint(this, uri);
+ if (answer != null) {
+ break;
+ }
}
}
if (answer == null) {
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=525519&r1=525518&r2=525519
==============================================================================
--- 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 07:19:48 2007
@@ -19,8 +19,14 @@
import org.apache.camel.CamelContext;
import org.apache.camel.Component;
+import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
+import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.URISupport;
+import org.apache.camel.util.ObjectHelper;
+import java.net.URI;
+import java.util.Map;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadFactory;
@@ -29,6 +35,7 @@
* @version $Revision$
*/
public class DefaultComponent<E extends Exchange> extends ServiceSupport implements Component<E> {
+ protected static String[] EMPTY_ARRAY = {};
private int defaultThreadPoolSize = 5;
private CamelContext camelContext;
private ScheduledExecutorService executorService;
@@ -40,6 +47,36 @@
this.camelContext = context;
}
+ public String[] getUriPrefixes() {
+ return EMPTY_ARRAY;
+ }
+
+ public Endpoint<E> createEndpoint(String uri) throws Exception {
+ ObjectHelper.notNull(getCamelContext(), "camelContext");
+ String remaining = matchesPrefixes(uri);
+ if (remaining == null) {
+ return null;
+ }
+ if (remaining.startsWith(":")) {
+ remaining = remaining.substring(1);
+ }
+ URI u = new URI(uri);
+ String path = u.getHost();
+ if (path == null) {
+ path = u.getSchemeSpecificPart();
+ }
+ Map parameters = URISupport.parseParamters(u);
+
+ Endpoint<E> endpoint = createEndpoint(uri, path, parameters);
+ if (endpoint == null) {
+ return null;
+ }
+ if (parameters != null) {
+ IntrospectionSupport.setProperties(endpoint, parameters);
+ }
+ return endpoint;
+ }
+
public CamelContext getCamelContext() {
return camelContext;
}
@@ -81,5 +118,34 @@
if (executorService != null) {
executorService.shutdown();
}
+ }
+
+ /**
+ * Returns true if the uri matches one of the available prefixes from {@link #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,
+ * remaining path and optional parameters
+ *
+ * @param uri the full URI of the endpoint
+ * @param remaining the remaining part of the URI without the query parameters or component prefix
+ * @param parameters the optional parameters passed in
+ * @return a newly created endpoint or null if the endpoint cannot be created based on the inputs
+ */
+ protected Endpoint<E> createEndpoint(String uri, String remaining, Map parameters) throws Exception {
+ return null;
}
}
Added: 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=auto&rev=525519
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponentResolver.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponentResolver.java Wed Apr 4 07:19:48 2007
@@ -0,0 +1,73 @@
+/**
+ *
+ * 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.impl;
+
+import org.apache.camel.Component;
+import org.apache.camel.EndpointResolver;
+import org.apache.camel.Exchange;
+import org.apache.camel.CamelContext;
+import org.apache.camel.impl.converter.Injector;
+import org.apache.camel.util.FactoryFinder;
+import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.NoFactoryAvailableException;
+
+/**
+ * An implementation of {@link org.apache.camel.EndpointResolver} that delegates to
+ * other {@link EndpointResolver} which are selected based on the uri prefix.
+ * <p/>
+ * The delegate {@link EndpointResolver} are associated with uri prefixes by
+ * adding a property file with the same uri prefix in the
+ * META-INF/services/org/apache/camel/EndpointResolver/
+ * directory on the classpath.
+ *
+ * @version $Revision$
+ */
+public class DefaultComponentResolver<E extends Exchange> {
+ static final private FactoryFinder componentFactory = new FactoryFinder("META-INF/services/org/apache/camel/component/");
+
+ public Component<E> resolveComponent(String uri, CamelContext context) {
+ 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];
+ Class type;
+ try {
+ type = componentFactory.findClass(scheme);
+ }
+ catch (NoFactoryAvailableException e) {
+ return null;
+ }
+ catch (Throwable e) {
+ throw new IllegalArgumentException("Invalid URI, no EndpointResolver registered for scheme : " + scheme, e);
+ }
+ if (type == null) {
+ 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;
+ }
+ else {
+ throw new IllegalArgumentException("Type is not a Component implementation. Found: " + type.getName());
+ }
+ }
+}
Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponentResolver.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponentResolver.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponentResolver.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/FactoryFinder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/FactoryFinder.java?view=diff&rev=525519&r1=525518&r2=525519
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/FactoryFinder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/FactoryFinder.java Wed Apr 4 07:19:48 2007
@@ -48,6 +48,15 @@
public Object newInstance(String key, String propertyPrefix)
throws IllegalAccessException, InstantiationException, IOException, ClassNotFoundException
{
+ Class clazz = findClass(key, propertyPrefix);
+ return clazz.newInstance();
+ }
+
+ public Class findClass(String key) throws ClassNotFoundException, IOException {
+ return findClass(key, null);
+ }
+
+ public Class findClass(String key, String propertyPrefix) throws ClassNotFoundException, IOException {
if (propertyPrefix == null)
propertyPrefix = "";
@@ -56,7 +65,7 @@
clazz = newInstance(doFindFactoryProperies(key), propertyPrefix);
classMap.put(propertyPrefix + key, clazz);
}
- return clazz.newInstance();
+ return clazz;
}
private Class newInstance(Properties properties, String propertyPrefix) throws ClassNotFoundException, IOException {
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java?view=diff&rev=525519&r1=525518&r2=525519
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java Wed Apr 4 07:19:48 2007
@@ -95,6 +95,26 @@
}
/**
+ * Removes any starting characters on the given text which match the given character
+ *
+ * @param text the string
+ * @param ch the initial characters to remove
+ * @return either the original string or the new substring
+ */
+ public static String removeStartingCharacters(String text, char ch) {
+ int idx = 0;
+ while (text.charAt(idx) == ch) {
+ idx++;
+ }
+ if (idx > 0) {
+ return text.substring(idx);
+ }
+ return text;
+ }
+
+
+
+ /**
* Returns true if the collection contains the specified value
*/
public static boolean contains(Object collectionOrArray, Object value) {
Added: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/ObjectHelperTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/ObjectHelperTest.java?view=auto&rev=525519
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/ObjectHelperTest.java (added)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/ObjectHelperTest.java Wed Apr 4 07:19:48 2007
@@ -0,0 +1,31 @@
+/**
+ *
+ * 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.util;
+
+import junit.framework.TestCase;
+
+/**
+ * @version $Revision$
+ */
+public class ObjectHelperTest extends TestCase {
+ public void testRemoveInitialCharacters() throws Exception {
+ assertEquals(ObjectHelper.removeStartingCharacters("foo", '/'), "foo");
+ assertEquals(ObjectHelper.removeStartingCharacters("/foo", '/'), "foo");
+ assertEquals(ObjectHelper.removeStartingCharacters("//foo", '/'), "foo");
+ }
+}
Propchange: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/ObjectHelperTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/ObjectHelperTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/ObjectHelperTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: activemq/camel/trunk/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfBinding.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfBinding.java?view=diff&rev=525519&r1=525518&r2=525519
==============================================================================
--- activemq/camel/trunk/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfBinding.java (original)
+++ activemq/camel/trunk/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfBinding.java Wed Apr 4 07:19:48 2007
@@ -70,7 +70,9 @@
public void storeCxfResponse(CxfExchange exchange, Message response) {
// no need to process headers as we use the CXF message
CxfMessage out = exchange.getOut();
- out.setMessage(response);
- out.setBody(getBody(response));
+ if (response != null) {
+ out.setMessage(response);
+ out.setBody(getBody(response));
+ }
}
}
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=525519&r1=525518&r2=525519
==============================================================================
--- 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 07:19:48 2007
@@ -18,6 +18,7 @@
package org.apache.camel.component.cxf;
import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
import org.apache.camel.impl.DefaultComponent;
import org.apache.cxf.Bus;
import org.apache.cxf.BusException;
@@ -30,6 +31,7 @@
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.Map;
/**
* @version $Revision$
@@ -44,14 +46,19 @@
super(context);
}
- public synchronized CxfEndpoint createEndpoint(String uri, String[] urlParts) throws IOException, URISyntaxException {
- String remainingUrl = uri.substring("cxf:".length());
- URI u = new URI(remainingUrl);
+ @Override
+ public String[] getUriPrefixes() {
+ return new String[] {"cxf"};
+ }
+
+ @Override
+ protected Endpoint<CxfExchange> createEndpoint(String uri, String remaining, Map parameters) throws Exception {
+ URI u = new URI(remaining);
// TODO this is a hack!!!
EndpointInfo endpointInfo = new EndpointInfo(null, "http://schemas.xmlsoap.org/soap/http");
AddressType a = new AddressType();
- a.setLocation(remainingUrl);
+ a.setLocation(remaining);
endpointInfo.addExtensor(a);
return new CxfEndpoint(uri, this, endpointInfo);
Modified: activemq/camel/trunk/camel-cxf/src/main/resources/META-INF/services/org/apache/camel/component/cxf
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-cxf/src/main/resources/META-INF/services/org/apache/camel/component/cxf?view=diff&rev=525519&r1=525477&r2=525519
==============================================================================
--- activemq/camel/trunk/camel-cxf/src/main/resources/META-INF/services/org/apache/camel/component/cxf (original)
+++ activemq/camel/trunk/camel-cxf/src/main/resources/META-INF/services/org/apache/camel/component/cxf Wed Apr 4 07:19:48 2007
@@ -1 +1 @@
-class=org.apache.camel.component.cxf.CxfEndpointResolver
+class=org.apache.camel.component.cxf.CxfComponent
Modified: activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/CamelJbiComponent.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/CamelJbiComponent.java?view=diff&rev=525519&r1=525518&r2=525519
==============================================================================
--- activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/CamelJbiComponent.java (original)
+++ activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/CamelJbiComponent.java Wed Apr 4 07:19:48 2007
@@ -41,7 +41,7 @@
*
* @version $Revision: 426415 $
*/
-public class CamelJbiComponent extends DefaultComponent implements Component<JbiExchange>, EndpointResolver {
+public class CamelJbiComponent extends DefaultComponent implements Component<Exchange> {
private JbiBinding binding;
private CamelContext camelContext;
private ScheduledExecutorService executorService;
@@ -123,11 +123,7 @@
// Resolve Camel Endpoints
//-------------------------------------------------------------------------
- public Component resolveComponent(CamelContext context, String uri) throws Exception {
- return null;
- }
-
- public Endpoint resolveEndpoint(CamelContext context, String uri) throws Exception {
+ public Endpoint<Exchange> createEndpoint(String uri) {
if (uri.startsWith("jbi:")) {
uri = uri.substring("jbi:".length());
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=525519&r1=525518&r2=525519
==============================================================================
--- 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 07:19:48 2007
@@ -17,25 +17,22 @@
*/
package org.apache.camel.component.jms;
-import com.sun.jndi.toolkit.url.Uri;
+import static org.apache.camel.util.ObjectHelper.removeStartingCharacters;
import org.apache.camel.CamelContext;
-import org.apache.camel.Processor;
+import org.apache.camel.Endpoint;
import org.apache.camel.impl.DefaultComponent;
import org.apache.camel.util.IntrospectionSupport;
import org.apache.camel.util.ObjectHelper;
-import org.apache.camel.util.URISupport;
import javax.jms.ConnectionFactory;
-import java.net.URI;
-import java.net.URISyntaxException;
import java.util.Map;
/**
* @version $Revision:520964 $
*/
public class JmsComponent extends DefaultComponent<JmsExchange> {
- public static final String QUEUE_PREFIX = "queue/";
- public static final String TOPIC_PREFIX = "topic/";
+ public static final String QUEUE_PREFIX = "queue:";
+ public static final String TOPIC_PREFIX = "topic:";
private JmsConfiguration configuration;
/**
@@ -69,7 +66,7 @@
return jmsComponent(template);
}
- protected JmsComponent() {
+ public JmsComponent() {
this.configuration = new JmsConfiguration();
}
@@ -82,38 +79,34 @@
this.configuration = new JmsConfiguration();
}
- public JmsEndpoint createEndpoint(Uri uri) throws URISyntaxException {
- // lets figure out from the URI whether its a queue, topic etc
-
- String path = uri.getPath();
- return createEndpoint(uri.toString(), path);
+ @Override
+ public String[] getUriPrefixes() {
+ return new String[]{"jms"};
}
- public JmsEndpoint createEndpoint(String uri, String path) throws URISyntaxException {
- ObjectHelper.notNull(getCamelContext(), "camelContext");
+ @Override
+ protected Endpoint<JmsExchange> createEndpoint(String uri, String remaining, Map parameters) throws Exception {
boolean pubSubDomain = false;
- if (path.startsWith(QUEUE_PREFIX)) {
+ if (remaining.startsWith(QUEUE_PREFIX)) {
pubSubDomain = false;
- path = path.substring(QUEUE_PREFIX.length());
+ remaining = removeStartingCharacters(remaining.substring(QUEUE_PREFIX.length()), '/');
}
- else if (path.startsWith(TOPIC_PREFIX)) {
+ else if (remaining.startsWith(TOPIC_PREFIX)) {
pubSubDomain = true;
- path = path.substring(TOPIC_PREFIX.length());
+ remaining = removeStartingCharacters(remaining.substring(TOPIC_PREFIX.length()), '/');
}
- final String subject = convertPathToActualDestination(path);
+ final String subject = convertPathToActualDestination(remaining);
// lets make sure we copy the configuration as each endpoint can customize its own version
JmsEndpoint endpoint = new JmsEndpoint(uri, this, subject, pubSubDomain, getConfiguration().copy());
- URI u = new URI(uri);
- Map options = URISupport.parseParamters(u);
- String selector = (String) options.remove("selector");
+ String selector = (String) parameters.remove("selector");
if (selector != null) {
endpoint.setSelector(selector);
}
- IntrospectionSupport.setProperties(endpoint.getConfiguration(), options);
+ IntrospectionSupport.setProperties(endpoint.getConfiguration(), parameters);
return endpoint;
}
@@ -136,13 +129,5 @@
*/
protected String convertPathToActualDestination(String path) {
return path;
- }
-
- public void activate(JmsEndpoint endpoint, Processor<JmsExchange> processor) {
- // TODO Auto-generated method stub
- }
-
- public void deactivate(JmsEndpoint endpoint) {
- // TODO Auto-generated method stub
}
}
Copied: activemq/camel/trunk/camel-jms/src/main/resources/META-INF/services/org/apache/camel/component/jms (from r525477, activemq/camel/trunk/camel-jms/src/main/resources/META-INF/services/org/apache/camel/EndpointResolver/jms)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/main/resources/META-INF/services/org/apache/camel/component/jms?view=diff&rev=525519&p1=activemq/camel/trunk/camel-jms/src/main/resources/META-INF/services/org/apache/camel/EndpointResolver/jms&r1=525477&p2=activemq/camel/trunk/camel-jms/src/main/resources/META-INF/services/org/apache/camel/component/jms&r2=525519
==============================================================================
--- activemq/camel/trunk/camel-jms/src/main/resources/META-INF/services/org/apache/camel/EndpointResolver/jms (original)
+++ activemq/camel/trunk/camel-jms/src/main/resources/META-INF/services/org/apache/camel/component/jms Wed Apr 4 07:19:48 2007
@@ -1 +1 @@
-class=org.apache.camel.component.jms.JmsEndpointResolver
+class=org.apache.camel.component.jms.JmsComponent
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=525519&r1=525518&r2=525519
==============================================================================
--- 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 07:19:48 2007
@@ -102,8 +102,8 @@
// lets add some routes
container.addRoutes(new RouteBuilder() {
public void configure() {
- from("jms:activemq:test.a").to("jms:activemq:test.b");
- from("jms:activemq:test.b").process(new Processor<JmsExchange>() {
+ from("jms:queue:test.a").to("jms:queue:test.b");
+ from("jms:queue:test.b").process(new Processor<JmsExchange>() {
public void onExchange(JmsExchange e) {
System.out.println("Received exchange: " + e.getIn());
receivedExchange = e;
@@ -112,7 +112,7 @@
});
}
});
- endpoint = container.resolveEndpoint("jms:activemq:test.a");
+ endpoint = container.resolveEndpoint("jms:queue:test.a");
assertNotNull("No endpoint found!", endpoint);
container.activateEndpoints();
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=525519&r1=525518&r2=525519
==============================================================================
--- 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 07:19:48 2007
@@ -55,65 +55,16 @@
*
* @version $Revision$
*/
-public class JpaComponent extends DefaultComponent<Exchange> implements EndpointResolver {
+public class JpaComponent extends DefaultComponent<Exchange> {
private EntityManagerFactory entityManagerFactory;
- private Map entityManagerProperties;
- private String entityManagerName = "camel";
- private JpaTemplate template;
public Component resolveComponent(CamelContext container, String uri) throws Exception {
return null;
}
- public Endpoint resolveEndpoint(CamelContext container, String uri) throws Exception {
- if (!uri.startsWith("jpa:")) {
- return null;
- }
- URI u = new URI(uri);
- String path = u.getHost();
- if (path == null) {
- path = u.getSchemeSpecificPart();
- }
- String[] paths = ObjectHelper.splitOnCharacter(path, ":", 4);
- // ignore a prefix
- if (paths[1] != null) {
- path = paths[1];
- }
- JpaEndpoint endpoint = new JpaEndpoint(uri, this);
- Map options = URISupport.parseParamters(u);
- Map consumerProperties = IntrospectionSupport.extractProperties(options, "consumer.");
- if (consumerProperties != null) {
- endpoint.setConsumerProperties(consumerProperties);
- }
- IntrospectionSupport.setProperties(endpoint, options);
-
- // lets interpret the next string as a class
- if (path != null) {
- Class<?> type = ObjectHelper.loadClass(path);
- if (type != null) {
- endpoint.setEntityType(type);
- }
- }
- return endpoint;
- }
-
// Properties
//-------------------------------------------------------------------------
- public JpaTemplate getTemplate() {
- if (template == null) {
- template = createTemplate();
- }
- return template;
- }
-
- public void setTemplate(JpaTemplate template) {
- this.template = template;
- }
-
public EntityManagerFactory getEntityManagerFactory() {
- if (entityManagerFactory == null) {
- entityManagerFactory = createEntityManagerFactory();
- }
return entityManagerFactory;
}
@@ -121,61 +72,34 @@
this.entityManagerFactory = entityManagerFactory;
}
- public Map getEntityManagerProperties() {
- if (entityManagerProperties == null) {
- entityManagerProperties = System.getProperties();
- }
- return entityManagerProperties;
- }
-
- public void setEntityManagerProperties(Map entityManagerProperties) {
- this.entityManagerProperties = entityManagerProperties;
- }
-
- public String getEntityManagerName() {
- return entityManagerName;
- }
-
- public void setEntityManagerName(String entityManagerName) {
- this.entityManagerName = entityManagerName;
- }
-
// Implementation methods
//-------------------------------------------------------------------------
- protected JpaTemplate createTemplate() {
- /* EntityManagerFactory emf = getEntityManagerFactory();
- JpaTransactionManager transactionManager = new JpaTransactionManager(emf);
- transactionManager.afterPropertiesSet();
-
- final TransactionTemplate tranasctionTemplate = new TransactionTemplate(transactionManager);
- tranasctionTemplate.afterPropertiesSet();
-
- // lets auto-default to a JpaTemplate which implicitly creates a transaction
- // TODO surely there's a cleaner way to get the JpaTemplate to create a transaction if one is not present??
- return new JpaTemplate(emf) {
- @Override
- public Object execute(final JpaCallback action, final boolean exposeNativeEntityManager) throws DataAccessException {
- return tranasctionTemplate.execute(new TransactionCallback() {
- public Object doInTransaction(TransactionStatus status) {
- return doExecute(action, exposeNativeEntityManager);
- }
- });
- }
-
- public Object doExecute(final JpaCallback action, final boolean exposeNativeEntityManager) throws DataAccessException {
- return super.execute(action, exposeNativeEntityManager);
- }
- };*/
- return new JpaTemplate(getEntityManagerFactory());
+ @Override
+ public String[] getUriPrefixes() {
+ return new String[] { "jpa" };
}
- protected EntityManagerFactory createEntityManagerFactory() {
- //return Persistence.createEntityManagerFactory(entityManagerName);
- return Persistence.createEntityManagerFactory(entityManagerName, getEntityManagerProperties());
- }
+ @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.");
+ if (consumerProperties != null) {
+ endpoint.setConsumerProperties(consumerProperties);
+ }
+ Map emProperties = IntrospectionSupport.extractProperties(options, "emf.");
+ if (emProperties != null) {
+ endpoint.setEntityManagerProperties(emProperties);
+ }
- protected EntityManager createEntityManager() {
- return getEntityManagerFactory().createEntityManager();
+ // lets interpret the next string as a class
+ if (path != null) {
+ Class<?> type = ObjectHelper.loadClass(path);
+ if (type != null) {
+ endpoint.setEntityType(type);
+ }
+ }
+ return endpoint;
}
+
}
Modified: activemq/camel/trunk/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaEndpoint.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaEndpoint.java?view=diff&rev=525519&r1=525518&r2=525519
==============================================================================
--- activemq/camel/trunk/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaEndpoint.java (original)
+++ activemq/camel/trunk/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaEndpoint.java Wed Apr 4 07:19:48 2007
@@ -23,31 +23,33 @@
import org.apache.camel.NoTypeConversionAvailableException;
import org.apache.camel.Processor;
import org.apache.camel.Producer;
-import org.apache.camel.util.IntrospectionSupport;
import org.apache.camel.builder.ExpressionBuilder;
import org.apache.camel.impl.DefaultEndpoint;
import org.apache.camel.impl.DefaultExchange;
+import org.apache.camel.util.IntrospectionSupport;
import org.springframework.orm.jpa.JpaTemplate;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
import java.util.Map;
/**
* @version $Revision$
*/
public class JpaEndpoint extends DefaultEndpoint<Exchange> {
- private final JpaComponent component;
+ private EntityManagerFactory entityManagerFactory;
+ private String persistenceUnit = "camel";
private JpaTemplate template;
private Expression<Exchange> producerExpression;
private int maximumResults = -1;
private Class<?> entityType;
private Map consumerProperties;
+ private Map entityManagerProperties;
public JpaEndpoint(String uri, JpaComponent component) {
super(uri, component);
- this.component = component;
- this.template = component.getTemplate();
+ entityManagerFactory = component.getEntityManagerFactory();
}
public Exchange createExchange() {
@@ -66,10 +68,12 @@
return startService(consumer);
}
-
// Properties
//-------------------------------------------------------------------------
public JpaTemplate getTemplate() {
+ if (template == null) {
+ template = createTemplate();
+ }
return template;
}
@@ -112,14 +116,52 @@
this.consumerProperties = consumerProperties;
}
+ public EntityManagerFactory getEntityManagerFactory() {
+ if (entityManagerFactory == null) {
+ entityManagerFactory = createEntityManagerFactory();
+ }
+ return entityManagerFactory;
+ }
+
+ public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory) {
+ this.entityManagerFactory = entityManagerFactory;
+ }
+
+ public Map getEntityManagerProperties() {
+ if (entityManagerProperties == null) {
+ entityManagerProperties = System.getProperties();
+ }
+ return entityManagerProperties;
+ }
+
+ public void setEntityManagerProperties(Map entityManagerProperties) {
+ this.entityManagerProperties = entityManagerProperties;
+ }
+
+ public String getPersistenceUnit() {
+ return persistenceUnit;
+ }
+
+ public void setPersistenceUnit(String persistenceUnit) {
+ this.persistenceUnit = persistenceUnit;
+ }
+
// Implementation methods
//-------------------------------------------------------------------------
+ protected JpaTemplate createTemplate() {
+ return new JpaTemplate(getEntityManagerFactory());
+ }
+
+ protected EntityManagerFactory createEntityManagerFactory() {
+ return Persistence.createEntityManagerFactory(persistenceUnit, getEntityManagerProperties());
+ }
+
protected EntityManager createEntityManager() {
- return component.createEntityManager();
+ return getEntityManagerFactory().createEntityManager();
}
protected TransactionStrategy createTransactionStrategy() {
- EntityManagerFactory emf = component.getEntityManagerFactory();
+ EntityManagerFactory emf = getEntityManagerFactory();
return JpaTemplateTransactionStrategy.newInstance(emf, getTemplate());
//return new DefaultTransactionStrategy(emf);
}
Added: activemq/camel/trunk/camel-jpa/src/main/resources/META-INF/services/org/apache/camel/component/jpa
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jpa/src/main/resources/META-INF/services/org/apache/camel/component/jpa?view=auto&rev=525519
==============================================================================
--- activemq/camel/trunk/camel-jpa/src/main/resources/META-INF/services/org/apache/camel/component/jpa (added)
+++ activemq/camel/trunk/camel-jpa/src/main/resources/META-INF/services/org/apache/camel/component/jpa Wed Apr 4 07:19:48 2007
@@ -0,0 +1 @@
+class=org.apache.camel.component.jpa.JpaComponent
Modified: activemq/camel/trunk/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaTest.java?view=diff&rev=525519&r1=525518&r2=525519
==============================================================================
--- activemq/camel/trunk/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaTest.java (original)
+++ activemq/camel/trunk/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaTest.java Wed Apr 4 07:19:48 2007
@@ -114,7 +114,7 @@
}
protected String getEndpointUri() {
- return "jpa:" + SendEmail.class.getName();
+ return "jpa://" + SendEmail.class.getName();
}
@Override
Modified: activemq/camel/trunk/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaUsingCustomPersistenceUnitTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaUsingCustomPersistenceUnitTest.java?view=diff&rev=525519&r1=525518&r2=525519
==============================================================================
--- activemq/camel/trunk/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaUsingCustomPersistenceUnitTest.java (original)
+++ activemq/camel/trunk/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaUsingCustomPersistenceUnitTest.java Wed Apr 4 07:19:48 2007
@@ -25,6 +25,6 @@
public class JpaUsingCustomPersistenceUnitTest extends JpaTest {
protected String getEndpointUri() {
- return "jpa:custom:" + SendEmail.class.getName();
+ return "jpa://" + SendEmail.class.getName() + "?persistenceUnit=custom";
}
}
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=525519&r1=525518&r2=525519
==============================================================================
--- 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 07:19:48 2007
@@ -18,6 +18,7 @@
package org.apache.camel.component.mina;
import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
import org.apache.camel.impl.DefaultComponent;
import org.apache.mina.common.IoAcceptor;
import org.apache.mina.common.IoConnector;
@@ -38,6 +39,7 @@
import java.net.SocketAddress;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.Map;
/**
* @version $Revision$
@@ -50,9 +52,14 @@
super(context);
}
- public synchronized MinaEndpoint createEndpoint(String uri, String[] urlParts) throws IOException, URISyntaxException {
- String remainingUrl = uri.substring("mina:".length());
- URI u = new URI(remainingUrl);
+ @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);
String protocol = u.getScheme();
if (protocol.equals("tcp")) {
Added: activemq/camel/trunk/camel-mina/src/main/resources/META-INF/services/org/apache/camel/component/mina
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-mina/src/main/resources/META-INF/services/org/apache/camel/component/mina?view=auto&rev=525519
==============================================================================
--- activemq/camel/trunk/camel-mina/src/main/resources/META-INF/services/org/apache/camel/component/mina (added)
+++ activemq/camel/trunk/camel-mina/src/main/resources/META-INF/services/org/apache/camel/component/mina Wed Apr 4 07:19:48 2007
@@ -0,0 +1 @@
+class=org.apache.camel.component.mina.MinaComponent