You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ch...@apache.org on 2007/03/19 23:22:48 UTC

svn commit: r520124 - 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/queue/ camel-jms/src/main/java/org/apache/camel/jms/

Author: chirino
Date: Mon Mar 19 15:22:46 2007
New Revision: 520124

URL: http://svn.apache.org/viewvc?view=rev&rev=520124
Log:
Added the activate/deactivate lifecylce methods to the Component interface
and did some other small cleanups

Modified:
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContainer.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Component.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Endpoint.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/InvalidHeaderTypeException.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/RuntimeCamelException.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ExchangeSupport.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/queue/QueueComponent.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/queue/QueueEndpoint.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/queue/QueueEndpointResolver.java
    activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/DefaultJmsExchange.java
    activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/JmsComponent.java
    activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/JmsEndpointResolver.java
    activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/JmsExchange.java
    activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/MessagePropertyAcessException.java
    activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/MessagePropertyNamesAcessException.java
    activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/RuntimeJmsException.java

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContainer.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContainer.java?view=diff&rev=520124&r1=520123&r2=520124
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContainer.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContainer.java Mon Mar 19 15:22:46 2007
@@ -70,7 +70,7 @@
         return new DefaultExchangeConverter();
     }
 
-	public Component getOrCreateComponent(String componentName, Callable<Component<E>> factory) {
+	public Component getOrCreateComponent(String componentName, Callable<Component<E,? extends  Endpoint<E>>> factory) {
 		synchronized(components) { 
 			Component component = components.get(componentName);
 			if( component == null ) {
@@ -82,6 +82,13 @@
 					throw new IllegalArgumentException("Factory failed to create the "+componentName+" component", e);
 				}
 			}
+			return component;
+		}
+	}
+	
+	public Component getComponent(String componentName) {
+		synchronized(components) { 
+			Component component = components.get(componentName);
 			return component;
 		}
 	}

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=520124&r1=520123&r2=520124
==============================================================================
--- 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 Mon Mar 19 15:22:46 2007
@@ -21,6 +21,18 @@
  *
  * @version $Revision: 519901 $
  */
-public interface Component<E>  {
+public interface Component<E, EP extends Endpoint<E>>  {
 
+	/**
+	 * Asks the component to activate the delivery of {@link Exchange} objects
+	 * from the {@link Endpoint} to the {@link Processor}.
+	 */
+	void activate(EP endpoint, Processor<E> processor);
+
+	/**
+	 * Stops the delivery of messages from a previously activated 
+	 * {@link Endpoint}.
+	 */
+	void deactivate(EP endpoint);
+	
 }

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Endpoint.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Endpoint.java?view=diff&rev=520124&r1=520123&r2=520124
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Endpoint.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Endpoint.java Mon Mar 19 15:22:46 2007
@@ -29,7 +29,7 @@
     public String getEndpointUri();
 
     /**
-     * Sends the mesage exchange to this endpoint
+     * Sends the message exchange to this endpoint
      */
     void send(E exchange);
 

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java?view=diff&rev=520124&r1=520123&r2=520124
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java Mon Mar 19 15:22:46 2007
@@ -23,12 +23,12 @@
  *
  * @version $Revision$
  */
-public interface Exchange<M> {
+public interface Exchange<M,R,F> {
 
     /**
      * Accesses a specific header
      */
-    <T> T getHeader(String name);
+    Object getHeader(String name);
 
     /**
      * Sets a header on the exchange
@@ -48,12 +48,12 @@
     /**
      * Returns the response message
      */
-    M getResponse();
+    R getResponse();
 
     /**
      * Returns the fault message
      */
-    M getFault();
+    F getFault();
 
     /**
      * Returns the exception associated with this exchange

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/InvalidHeaderTypeException.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/InvalidHeaderTypeException.java?view=diff&rev=520124&r1=520123&r2=520124
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/InvalidHeaderTypeException.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/InvalidHeaderTypeException.java Mon Mar 19 15:22:46 2007
@@ -20,7 +20,9 @@
  * @version $Revision$
  */
 public class InvalidHeaderTypeException extends RuntimeCamelException {
-    private Object headerValue;
+
+	private static final long serialVersionUID = -8417806626073055262L;
+	private Object headerValue;
 
     public InvalidHeaderTypeException(Throwable cause, Object headerValue) {
         super(cause.getMessage() + " headerValue is: " + headerValue + " of type: "

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/RuntimeCamelException.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/RuntimeCamelException.java?view=diff&rev=520124&r1=520123&r2=520124
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/RuntimeCamelException.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/RuntimeCamelException.java Mon Mar 19 15:22:46 2007
@@ -20,9 +20,9 @@
  * @version $Revision$
  */
 public class RuntimeCamelException extends RuntimeException {
+	private static final long serialVersionUID = 8046489554418284257L;
 
-
-    public RuntimeCamelException() {
+	public RuntimeCamelException() {
     }
 
     public RuntimeCamelException(String message) {

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java?view=diff&rev=520124&r1=520123&r2=520124
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java Mon Mar 19 15:22:46 2007
@@ -26,7 +26,7 @@
  *
  * @version $Revision$
  */
-public class DefaultExchange<M> extends ExchangeSupport<M> {
+public class DefaultExchange<M,R,F> extends ExchangeSupport<M,R,F> {
     private Map<String,Object> headers;
 
     public Object getHeader(String name) {

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ExchangeSupport.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ExchangeSupport.java?view=diff&rev=520124&r1=520123&r2=520124
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ExchangeSupport.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ExchangeSupport.java Mon Mar 19 15:22:46 2007
@@ -23,10 +23,10 @@
  *
  * @version $Revision$
  */
-public abstract class ExchangeSupport<M> implements Exchange<M> {
+public abstract class ExchangeSupport<M,R,F> implements Exchange<M,R,F> {
     private M request;
-    private M response;
-    private M fault;
+    private R response;
+    private F fault;
     private Exception exception;
 
     public Exception getException() {
@@ -37,11 +37,11 @@
         this.exception = exception;
     }
 
-    public M getFault() {
+    public F getFault() {
         return fault;
     }
 
-    public void setFault(M fault) {
+    public void setFault(F fault) {
         this.fault = fault;
     }
 
@@ -53,11 +53,11 @@
         this.request = request;
     }
 
-    public M getResponse() {
+    public R getResponse() {
         return response;
     }
 
-    public void setResponse(M response) {
+    public void setResponse(R response) {
         this.response = response;
     }
 }

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/queue/QueueComponent.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/queue/QueueComponent.java?view=diff&rev=520124&r1=520123&r2=520124
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/queue/QueueComponent.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/queue/QueueComponent.java Mon Mar 19 15:22:46 2007
@@ -19,8 +19,10 @@
 import java.util.HashMap;
 import java.util.Queue;
 import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.camel.Component;
+import org.apache.camel.Processor;
 
 /**
  * Represents the component that manages {@link QueueEndpoint}.  It holds the 
@@ -28,9 +30,37 @@
  *
  * @version $Revision: 519973 $
  */
-public class QueueComponent<E> implements Component<E> {
+public class QueueComponent<E> implements Component<E, QueueEndpoint<E>> {
 	
     private HashMap<String, Queue<E>> registry = new HashMap<String, Queue<E>>();
+    private HashMap<QueueEndpoint<E>, Activation> activations = new HashMap<QueueEndpoint<E>, Activation>();
+    
+    class Activation implements Runnable {
+		private final QueueEndpoint<E> endpoint;
+		AtomicBoolean stop = new AtomicBoolean();
+		private Thread thread;
+		
+		public Activation(QueueEndpoint<E> endpoint) {
+			this.endpoint = endpoint;
+		}
+
+		public void run() {
+			while(!stop.get()) {
+				
+			}
+		}
+
+		public void start() {
+			thread = new Thread(this, endpoint.getEndpointUri());
+			thread.setDaemon(true);
+			thread.start();
+		}
+
+		public void stop() throws InterruptedException {
+			stop.set(true);
+			thread.join();
+		}
+    }
 
 	synchronized public Queue<E> getOrCreateQueue(String uri) {
 		Queue<E> queue = registry.get(uri);
@@ -44,5 +74,27 @@
 	private Queue<E> createQueue() {
 		return new LinkedBlockingQueue<E>();
 	}
-    
+
+	public void activate(QueueEndpoint<E> endpoint, Processor<E> processor) {
+		Activation activation = activations.get(endpoint);
+		if( activation!=null ) {
+			throw new IllegalArgumentException("Endpoint "+endpoint.getEndpointUri()+" has already been activated.");
+		}
+		
+		activation = new Activation(endpoint);
+		activation.start();
+	}
+
+	public void deactivate(QueueEndpoint<E> endpoint) {
+		Activation activation = activations.remove(endpoint);
+		if( activation==null ) {
+			throw new IllegalArgumentException("Endpoint "+endpoint.getEndpointUri()+" is not activate.");
+		}		
+		try {
+			activation.stop();
+		} catch (InterruptedException e) {
+			throw new RuntimeException(e);
+		}
+	}
+
 }

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/queue/QueueEndpoint.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/queue/QueueEndpoint.java?view=diff&rev=520124&r1=520123&r2=520124
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/queue/QueueEndpoint.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/queue/QueueEndpoint.java Mon Mar 19 15:22:46 2007
@@ -42,7 +42,7 @@
 
     public E createExchange() {
     	// How can we create a specific Exchange if we are generic??
-    	// perhaps it would be better if we did not impement this. 
+    	// perhaps it would be better if we did not implement this. 
         return (E) new DefaultExchange();
     }
 

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/queue/QueueEndpointResolver.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/queue/QueueEndpointResolver.java?view=diff&rev=520124&r1=520123&r2=520124
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/queue/QueueEndpointResolver.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/queue/QueueEndpointResolver.java Mon Mar 19 15:22:46 2007
@@ -29,7 +29,7 @@
  * An implementation of {@link EndpointResolver} that creates 
  * {@link QueueEndpoint} objects.
  *
- * The synatx for a Queue URI looks like:
+ * The syntax for a Queue URI looks like:
  * 
  * <pre><code>queue:[component:]queuename</code></pre>
  * the component is optional, and if it is not specified, the default component name
@@ -48,8 +48,8 @@
 	 * @see org.apache.camel.EndpointResolver#resolveComponent(org.apache.camel.CamelContainer, java.lang.String)
 	 */
 	public Component resolveComponent(CamelContainer container, String uri) {
-		String splitURI[] = ObjectHelper.splitOnCharacter(uri, ":", 3);
-		return resolveQueueComponent(container, splitURI);
+		String id[] = getEndpointId(uri);        
+    	return resolveQueueComponent(container, id[0]);  
 	}
 
 	/**
@@ -59,19 +59,31 @@
 	 * @see org.apache.camel.EndpointResolver#resolveEndpoint(org.apache.camel.CamelContainer, java.lang.String)
 	 */
 	public Endpoint<E> resolveEndpoint(CamelContainer container, String uri) {
-		String splitURI[] = ObjectHelper.splitOnCharacter(uri, ":", 3);        
-    	QueueComponent<E> component = resolveQueueComponent(container, splitURI);        
-        Queue<E> queue = component.getOrCreateQueue(uri);
+		String id[] = getEndpointId(uri);        
+    	QueueComponent<E> component = resolveQueueComponent(container, id[0]);  
+        Queue<E> queue = component.getOrCreateQueue(id[1]);
 		return new QueueEndpoint<E>(uri, container, queue);
     }
 
-	private QueueComponent<E> resolveQueueComponent(CamelContainer container, String[] splitURI) {
-		String componentName = DEFAULT_COMPONENT_NAME;
+	/**
+	 * @return an array that looks like: [componentName,endpointName] 
+	 */
+	private String[] getEndpointId(String uri) {
+		String rc [] = {DEFAULT_COMPONENT_NAME, null};
+		String splitURI[] = ObjectHelper.splitOnCharacter(uri, ":", 3);        
     	if( splitURI[2] != null ) {
-    		componentName =  splitURI[1];
+    		rc[0] =  splitURI[1];
+    		rc[0] =  splitURI[2];
+    	} else {
+    		rc[0] =  splitURI[1];
     	}
-    	Component rc = container.getOrCreateComponent(componentName, new Callable<Component<E>>(){
-			public Component<E> call() throws Exception {
+		return rc;
+	}
+	
+	@SuppressWarnings("unchecked")
+	private QueueComponent<E> resolveQueueComponent(CamelContainer container, String componentName) {
+    	Component rc = container.getOrCreateComponent(componentName, new Callable<Component<E,? extends Endpoint<E>>>(){
+			public Component<E, ? extends Endpoint<E>> call() throws Exception {
 				return new QueueComponent<E>();
 			}});
     	return (QueueComponent<E>) rc;

Modified: activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/DefaultJmsExchange.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/DefaultJmsExchange.java?view=diff&rev=520124&r1=520123&r2=520124
==============================================================================
--- activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/DefaultJmsExchange.java (original)
+++ activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/DefaultJmsExchange.java Mon Mar 19 15:22:46 2007
@@ -29,7 +29,7 @@
 /**
  * @version $Revision$
  */
-public class DefaultJmsExchange extends ExchangeSupport<Message> implements JmsExchange {
+public class DefaultJmsExchange extends ExchangeSupport<Message,Message,Message> implements JmsExchange {
     private Map<String, Object> lazyHeaders;
 
     public DefaultJmsExchange() {
@@ -39,13 +39,13 @@
         setRequest(message);
     }
 
-    public <T> T getHeader(String name) {
+    public Object getHeader(String name) {
         Message request = getRequest();
         if (request != null) {
             try {
                 Object value = request.getObjectProperty(name);
                 try {
-                    return (T) value;
+                    return value;
                 }
                 catch (ClassCastException e) {
                     throw new InvalidHeaderTypeException(e.getMessage(), value);

Modified: activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/JmsComponent.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/JmsComponent.java?view=diff&rev=520124&r1=520123&r2=520124
==============================================================================
--- activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/JmsComponent.java (original)
+++ activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/JmsComponent.java Mon Mar 19 15:22:46 2007
@@ -17,25 +17,24 @@
  */
 package org.apache.camel.jms;
 
-import org.springframework.jms.core.JmsOperations;
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.Session;
+
+import org.apache.camel.CamelContainer;
+import org.apache.camel.Component;
+import org.apache.camel.Processor;
 import org.springframework.jms.core.JmsTemplate;
 import org.springframework.jms.core.SessionCallback;
 import org.springframework.jms.listener.AbstractMessageListenerContainer;
 import org.springframework.jms.listener.DefaultMessageListenerContainer;
-import org.apache.camel.CamelContainer;
-import org.apache.camel.Component;
-
-import javax.jms.ConnectionFactory;
-import javax.jms.Session;
-import javax.jms.JMSException;
-import javax.jms.Destination;
 
 import com.sun.jndi.toolkit.url.Uri;
 
 /**
  * @version $Revision$
  */
-public class JmsComponent implements Component<JmsExchange> {
+public class JmsComponent implements Component<JmsExchange, JmsEndpoint> {
     private JmsTemplate template = new JmsTemplate();
     private static final String QUEUE_PREFIX = "queue/";
     private static final String TOPIC_PREFIX = "topic/";
@@ -95,4 +94,11 @@
     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
+	}
 }

Modified: activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/JmsEndpointResolver.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/JmsEndpointResolver.java?view=diff&rev=520124&r1=520123&r2=520124
==============================================================================
--- activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/JmsEndpointResolver.java (original)
+++ activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/JmsEndpointResolver.java Mon Mar 19 15:22:46 2007
@@ -17,23 +17,22 @@
  */
 package org.apache.camel.jms;
 
-import org.apache.camel.EndpointResolver;
+import java.util.concurrent.Callable;
+
+import org.apache.axis.transport.jms.JMSEndpoint;
 import org.apache.camel.CamelContainer;
 import org.apache.camel.Component;
-import org.apache.camel.util.ObjectHelper;
-import org.apache.camel.queue.QueueEndpoint;
+import org.apache.camel.EndpointResolver;
 import org.apache.camel.queue.QueueComponent;
-
-import java.util.Queue;
-import java.util.concurrent.Callable;
+import org.apache.camel.util.ObjectHelper;
 
 /**
  * An implementation of {@link EndpointResolver} that creates
- * {@link QueueEndpoint} objects.
+ * {@link JMSEndpoint} objects.
  *
- * The synatx for a Queue URI looks like:
+ * The syntax for a JMS URI looks like:
  *
- * <pre><code>queue:[component:]queuename</code></pre>
+ * <pre><code>jms:[component:]destination</code></pre>
  * the component is optional, and if it is not specified, the default component name
  * is assumed.
  *
@@ -48,8 +47,8 @@
 	 * object do not exist, it will be created.
 	 */
 	public Component resolveComponent(CamelContainer container, String uri) {
-		String splitURI[] = ObjectHelper.splitOnCharacter(uri, ":", 3);
-		return resolveJmsComponent(container, splitURI);
+		String id[] = getEndpointId(uri);        
+		return resolveJmsComponent(container, id[0]);
 	}
 
 	/**
@@ -57,22 +56,34 @@
 	 * {@see QueueComponent} object do not exist, they will be created.
 	 */
 	public JmsEndpoint resolveEndpoint(CamelContainer container, String uri) {
-		String splitURI[] = ObjectHelper.splitOnCharacter(uri, ":", 3);
-    	JmsComponent component = resolveJmsComponent(container, splitURI);
-
-        return component.createEndpoint(uri, splitURI[2]);
+		String id[] = getEndpointId(uri);        
+    	JmsComponent component = resolveJmsComponent(container, id[0]);
+        return component.createEndpoint(uri, id[1]);
     }
 
-	private JmsComponent resolveJmsComponent(final CamelContainer container, String[] splitURI) {
-		String componentName = DEFAULT_COMPONENT_NAME;
+	/**
+	 * @return an array that looks like: [componentName,endpointName] 
+	 */
+	private String[] getEndpointId(String uri) {
+		String rc [] = {DEFAULT_COMPONENT_NAME, null};
+		String splitURI[] = ObjectHelper.splitOnCharacter(uri, ":", 3);        
     	if( splitURI[2] != null ) {
-    		componentName =  splitURI[1];
+    		rc[0] =  splitURI[1];
+    		rc[0] =  splitURI[2];
+    	} else {
+    		rc[0] =  splitURI[1];
     	}
+		return rc;
+	}
+	
+	@SuppressWarnings("unchecked")
+	private JmsComponent resolveJmsComponent(final CamelContainer container, String componentName) {
     	Component rc = container.getOrCreateComponent(componentName, new Callable<JmsComponent>(){
 			public JmsComponent call() throws Exception {
 				return new JmsComponent(container);
 			}});
     	return (JmsComponent) rc;
 	}
+
 
 }

Modified: activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/JmsExchange.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/JmsExchange.java?view=diff&rev=520124&r1=520123&r2=520124
==============================================================================
--- activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/JmsExchange.java (original)
+++ activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/JmsExchange.java Mon Mar 19 15:22:46 2007
@@ -25,7 +25,7 @@
 /**
  * @version $Revision$
  */
-public interface JmsExchange extends Exchange<Message> {
+public interface JmsExchange extends Exchange<Message,Message,Message> {
 
     /**
      * Creates the JMS message for this exchange so that it can be sent to

Modified: activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/MessagePropertyAcessException.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/MessagePropertyAcessException.java?view=diff&rev=520124&r1=520123&r2=520124
==============================================================================
--- activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/MessagePropertyAcessException.java (original)
+++ activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/MessagePropertyAcessException.java Mon Mar 19 15:22:46 2007
@@ -22,7 +22,8 @@
  * @version $Revision$
  */
 public class MessagePropertyAcessException extends RuntimeJmsException {
-    private String propertyName;
+	private static final long serialVersionUID = -3996286386119163309L;
+	private String propertyName;
 
     public MessagePropertyAcessException(String propertyName, JMSException e) {
         super("Error accessing header: " + propertyName, e);

Modified: activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/MessagePropertyNamesAcessException.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/MessagePropertyNamesAcessException.java?view=diff&rev=520124&r1=520123&r2=520124
==============================================================================
--- activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/MessagePropertyNamesAcessException.java (original)
+++ activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/MessagePropertyNamesAcessException.java Mon Mar 19 15:22:46 2007
@@ -23,7 +23,9 @@
  */
 public class MessagePropertyNamesAcessException extends RuntimeJmsException {
 
-    public MessagePropertyNamesAcessException(JMSException e) {
+	private static final long serialVersionUID = -6744171518099741324L;
+
+	public MessagePropertyNamesAcessException(JMSException e) {
         super("Failed to acess the JMS message property names", e);
     }
 }

Modified: activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/RuntimeJmsException.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/RuntimeJmsException.java?view=diff&rev=520124&r1=520123&r2=520124
==============================================================================
--- activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/RuntimeJmsException.java (original)
+++ activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/jms/RuntimeJmsException.java Mon Mar 19 15:22:46 2007
@@ -22,7 +22,10 @@
  * @version $Revision$
  */
 public class RuntimeJmsException extends RuntimeException {
-    public RuntimeJmsException(String message, JMSException cause) {
+
+	private static final long serialVersionUID = -2141493732308871761L;
+
+	public RuntimeJmsException(String message, JMSException cause) {
         super(message, cause);
     }
 }