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/03/28 20:16:53 UTC

svn commit: r523430 - in /activemq/camel/trunk: ./ camel-jms/ camel-jms/src/main/java/org/apache/camel/component/jms/ camel-jms/src/test/java/org/apache/camel/component/jms/

Author: jstrachan
Date: Wed Mar 28 11:16:48 2007
New Revision: 523430

URL: http://svn.apache.org/viewvc?view=rev&rev=523430
Log:
upgraded to spring 2.0.3 and tidied up the JMS endpoints so that they can configure the JmsTemplate / MessageListenerContainer objects from Spring

Added:
    activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java   (with props)
Modified:
    activemq/camel/trunk/camel-jms/pom.xml
    activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
    activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConsumer.java
    activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
    activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpointResolver.java
    activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsExchange.java
    activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java
    activemq/camel/trunk/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteTest.java
    activemq/camel/trunk/pom.xml

Modified: activemq/camel/trunk/camel-jms/pom.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/pom.xml?view=diff&rev=523430&r1=523429&r2=523430
==============================================================================
--- activemq/camel/trunk/camel-jms/pom.xml (original)
+++ activemq/camel/trunk/camel-jms/pom.xml Wed Mar 28 11:16:48 2007
@@ -40,6 +40,11 @@
     </dependency>
 
     <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring</artifactId>
+    </dependency>
+
+    <dependency>
       <groupId>commons-logging</groupId>
       <artifactId>commons-logging</artifactId>
     </dependency>
@@ -50,24 +55,28 @@
     </dependency>
 
     <dependency>
-      <groupId>org.apache.activemq</groupId>
-      <artifactId>apache-activemq</artifactId>
-    </dependency>
-
-    <dependency>
       <groupId>org.apache.geronimo.specs</groupId>
       <artifactId>geronimo-jta_1.0.1B_spec</artifactId>
       <optional>true</optional>
     </dependency>
+
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-j2ee-management_1.0_spec</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-j2ee-jacc_1.0_spec</artifactId>
-      <optional>true</optional>
+      <groupId>org.apache.activemq</groupId>
+      <artifactId>apache-activemq</artifactId>
+      <scope>test</scope>
     </dependency>
+    <!--
+        <dependency>
+          <groupId>org.apache.geronimo.specs</groupId>
+          <artifactId>geronimo-j2ee-management_1.0_spec</artifactId>
+          <scope>test</scope>
+        </dependency>
+        <dependency>
+          <groupId>org.apache.geronimo.specs</groupId>
+          <artifactId>geronimo-j2ee-jacc_1.0_spec</artifactId>
+          <scope>test</scope>
+        </dependency>
+    -->
 
     <dependency>
       <groupId>junit</groupId>

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=523430&r1=523429&r2=523430
==============================================================================
--- 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 Mar 28 11:16:48 2007
@@ -22,12 +22,8 @@
 import org.apache.camel.Processor;
 import org.apache.camel.impl.DefaultComponent;
 import org.apache.camel.util.ObjectHelper;
-import org.springframework.jms.core.JmsTemplate;
-import org.springframework.jms.listener.AbstractMessageListenerContainer;
-import org.springframework.jms.listener.DefaultMessageListenerContainer;
 
 import javax.jms.ConnectionFactory;
-import javax.jms.Session;
 
 /**
  * @version $Revision:520964 $
@@ -35,7 +31,7 @@
 public class JmsComponent extends DefaultComponent<JmsExchange> {
     public static final String QUEUE_PREFIX = "queue/";
     public static final String TOPIC_PREFIX = "topic/";
-    private JmsTemplate template;
+    private JmsConfiguration configuration;
 
     /**
      * Static builder method
@@ -47,38 +43,38 @@
     /**
      * Static builder method
      */
-    public static JmsComponent jmsComponent(JmsTemplate template) {
-        return new JmsComponent(template);
+    public static JmsComponent jmsComponent(JmsConfiguration configuration) {
+        return new JmsComponent(configuration);
     }
 
     /**
      * Static builder method
      */
     public static JmsComponent jmsComponent(ConnectionFactory connectionFactory) {
-        return jmsComponent(new JmsTemplate(connectionFactory));
+        return jmsComponent(new JmsConfiguration(connectionFactory));
     }
 
     /**
      * Static builder method
      */
     public static JmsComponent jmsComponentClientAcknowledge(ConnectionFactory connectionFactory) {
-        JmsTemplate template = new JmsTemplate(connectionFactory);
-        template.setSessionTransacted(false);
-        template.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
+        JmsConfiguration template = new JmsConfiguration(connectionFactory);
+        template.setProducerAcknowledgementMode("CLIENT_ACKNOWLEDGE");
+        template.setConsumerAcknowledgementMode("CLIENT_ACKNOWLEDGE");
         return jmsComponent(template);
     }
 
     protected JmsComponent() {
-        this.template = new JmsTemplate();
+        this.configuration = new JmsConfiguration();
     }
 
-    protected JmsComponent(JmsTemplate template) {
-        this.template = template;
+    public JmsComponent(JmsConfiguration configuration) {
+        this.configuration = configuration;
     }
 
     public JmsComponent(CamelContext context) {
         super(context);
-        this.template = new JmsTemplate();
+        this.configuration = new JmsConfiguration();
     }
 
     public JmsEndpoint createEndpoint(Uri uri) {
@@ -91,17 +87,17 @@
     public JmsEndpoint createEndpoint(String uri, String path) {
         ObjectHelper.notNull(getContext(), "container");
 
+        boolean pubSubDomain = false;
         if (path.startsWith(QUEUE_PREFIX)) {
-            template.setPubSubDomain(false);
+            pubSubDomain = false;
             path = path.substring(QUEUE_PREFIX.length());
         }
         else if (path.startsWith(TOPIC_PREFIX)) {
-            template.setPubSubDomain(false);
+            pubSubDomain = true;
             path = path.substring(TOPIC_PREFIX.length());
         }
 
         final String subject = convertPathToActualDestination(path);
-        template.setDefaultDestinationName(subject);
 
         /*
         Destination destination = (Destination) template.execute(new SessionCallback() {
@@ -111,15 +107,21 @@
         });
         */
 
-        return new JmsEndpoint(uri, getContext(), subject, template);
+        // TODO configure endpoint configuration and selector using URI properties
+        return new JmsEndpoint(uri, getContext(), subject, pubSubDomain, getConfiguration().copy());
     }
 
-    public JmsTemplate getTemplate() {
-        return template;
+    public JmsConfiguration getConfiguration() {
+        return configuration;
     }
 
-    public void setTemplate(JmsTemplate template) {
-        this.template = template;
+    /**
+     * Sets the JMS configuration
+     *
+     * @param configuration the configuration to use by default for endpoints
+     */
+    public void setConfiguration(JmsConfiguration configuration) {
+        this.configuration = configuration;
     }
 
     /**

Added: activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java?view=auto&rev=523430
==============================================================================
--- activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java (added)
+++ activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java Wed Mar 28 11:16:48 2007
@@ -0,0 +1,512 @@
+/**
+ *
+ * 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.component.jms;
+
+import org.apache.camel.RuntimeCamelException;
+import org.springframework.core.task.TaskExecutor;
+import org.springframework.jms.core.JmsOperations;
+import org.springframework.jms.core.JmsTemplate;
+import org.springframework.jms.core.JmsTemplate102;
+import org.springframework.jms.listener.AbstractMessageListenerContainer;
+import org.springframework.jms.listener.DefaultMessageListenerContainer;
+import org.springframework.jms.listener.SimpleMessageListenerContainer;
+import org.springframework.jms.listener.serversession.ServerSessionFactory;
+import org.springframework.jms.listener.serversession.ServerSessionMessageListenerContainer;
+import org.springframework.jms.support.converter.MessageConverter;
+import org.springframework.transaction.PlatformTransactionManager;
+
+import javax.jms.ConnectionFactory;
+import javax.jms.ExceptionListener;
+
+/**
+ * @version $Revision$
+ */
+public class JmsConfiguration implements Cloneable {
+    protected static final String TRANSACTED = "TRANSACTED";
+    private ConnectionFactory connectionFactory;
+    private ConnectionFactory producerConnectionFactory;
+    private boolean useVersion102;
+    private boolean autoStartup;
+    private boolean acceptMessagesWhileStopping;
+    private String consumerClientId;
+    private String durableSubscriptionName;
+    private ExceptionListener exceptionListener;
+    private String producerAcknowledgementMode = TRANSACTED;
+    private boolean subscriptionDurable;
+    private String consumerAcknowledgementMode = TRANSACTED;
+    private boolean exposeListenerSession;
+    // not used for ServerSessionMessageListenerContainer 
+    private TaskExecutor taskExecutor;
+    // SimpleMessageListenerContainer only
+    private boolean pubSubNoLocal;
+    // not used for ServerSessionMessageListenerContainer
+    private int concurrentConsumers = -1;
+    // not used for SimpleMessageListenerContainer
+    private int maxMessagesPerTask = -1;
+    // ServerSessionMessageListenerContainer only
+    private ServerSessionFactory serverSessionFactory;
+    //  DefaultMessageListenerContainer only
+    private int cacheLevel = -1;
+    private String cacheName;
+    private long recoveryInterval = -1;
+    private long receiveTimeout = -1;
+    private PlatformTransactionManager transactionManager;
+    private String transactionName;
+    private int transactionTimeout = -1;
+    private int idleTaskExecutionLimit = -1;
+    private int maxConcurrentConsumers = -1;
+    // JmsTemplate only
+    private boolean explicitQosEnabled;
+    private boolean deliveryPersistent = true;
+    private long timeToLive = -1;
+    private MessageConverter messageConverter;
+    private boolean messageIdEnabled = true;
+    private boolean messageTimestampEnabled;
+    private int priority = -1;
+
+    public JmsConfiguration() {
+    }
+
+    public JmsConfiguration(ConnectionFactory connectionFactory) {
+        this.connectionFactory = connectionFactory;
+    }
+
+    /**
+     * Returns a copy of this configuration
+     */
+    public JmsConfiguration copy() {
+        try {
+            return (JmsConfiguration) clone();
+        }
+        catch (CloneNotSupportedException e) {
+            throw new RuntimeCamelException(e);
+        }
+    }
+
+    public JmsOperations createJmsOperations(boolean pubSubDomain, String destination) {
+        JmsTemplate template = useVersion102
+                ? new JmsTemplate102(getProducerConnectionFactory(), pubSubDomain)
+                : new JmsTemplate(getProducerConnectionFactory());
+        template.setPubSubDomain(pubSubDomain);
+        template.setDefaultDestinationName(destination);
+
+        template.setExplicitQosEnabled(explicitQosEnabled);
+        template.setDeliveryPersistent(deliveryPersistent);
+        if (messageConverter != null) {
+            template.setMessageConverter(messageConverter);
+        }
+        template.setMessageIdEnabled(messageIdEnabled);
+        template.setMessageTimestampEnabled(messageTimestampEnabled);
+        if (priority >= 0) {
+            template.setPriority(priority);
+        }
+        template.setPubSubNoLocal(pubSubNoLocal);
+        if (receiveTimeout >= 0) {
+            template.setReceiveTimeout(receiveTimeout);
+        }
+        if (timeToLive >= 0) {
+            template.setTimeToLive(timeToLive);
+        }
+
+        boolean transacted = TRANSACTED.equals(producerAcknowledgementMode);
+        template.setSessionTransacted(transacted);
+        if (!transacted) {
+            // TODO not sure if Spring can handle TRANSACTED as an ack mode
+            template.setSessionAcknowledgeModeName(producerAcknowledgementMode);
+        }
+        return template;
+    }
+
+    public AbstractMessageListenerContainer createMessageListenerContainer() {
+        AbstractMessageListenerContainer container = chooseMessageListenerContainerImplementation();
+        configureMessageListenerContainer(container);
+        return container;
+    }
+
+    protected void configureMessageListenerContainer(AbstractMessageListenerContainer container) {
+        container.setConnectionFactory(getConnectionFactory());
+        if (autoStartup) {
+            container.setAutoStartup(true);
+        }
+        if (consumerClientId != null) {
+            container.setClientId(consumerClientId);
+        }
+        if (durableSubscriptionName != null) {
+            container.setDurableSubscriptionName(durableSubscriptionName);
+        }
+        if (exceptionListener != null) {
+            container.setExceptionListener(exceptionListener);
+        }
+        container.setAcceptMessagesWhileStopping(acceptMessagesWhileStopping);
+        container.setExposeListenerSession(exposeListenerSession);
+        boolean transacted = TRANSACTED.equals(consumerAcknowledgementMode);
+        container.setSessionTransacted(transacted);
+        if (!transacted) {
+            // TODO not sure if Spring can handle TRANSACTED as an ack mode
+            container.setSessionAcknowledgeModeName(consumerAcknowledgementMode);
+        }
+        container.setSubscriptionDurable(subscriptionDurable);
+
+        if (container instanceof DefaultMessageListenerContainer) {
+            // this includes DefaultMessageListenerContainer102
+            DefaultMessageListenerContainer listenerContainer = (DefaultMessageListenerContainer) container;
+            if (concurrentConsumers >= 0) {
+                listenerContainer.setConcurrentConsumers(concurrentConsumers);
+            }
+            if (cacheLevel >= 0) {
+                listenerContainer.setCacheLevel(cacheLevel);
+            }
+            if (cacheName != null) {
+                listenerContainer.setCacheLevelName(cacheName);
+            }
+            if (idleTaskExecutionLimit >= 0) {
+                listenerContainer.setIdleTaskExecutionLimit(idleTaskExecutionLimit);
+            }
+            if (maxConcurrentConsumers >= 0) {
+                listenerContainer.setMaxConcurrentConsumers(maxConcurrentConsumers);
+            }
+            if (maxMessagesPerTask >= 0) {
+                listenerContainer.setMaxMessagesPerTask(maxMessagesPerTask);
+            }
+            listenerContainer.setPubSubNoLocal(pubSubNoLocal);
+            if (receiveTimeout >= 0) {
+                listenerContainer.setReceiveTimeout(receiveTimeout);
+            }
+            if (recoveryInterval >= 0) {
+                listenerContainer.setRecoveryInterval(recoveryInterval);
+            }
+            if (taskExecutor != null) {
+                listenerContainer.setTaskExecutor(taskExecutor);
+            }
+            if (transactionManager != null) {
+                listenerContainer.setTransactionManager(transactionManager);
+            }
+            if (transactionName != null) {
+                listenerContainer.setTransactionName(transactionName);
+            }
+            if (transactionTimeout >= 0) {
+                listenerContainer.setTransactionTimeout(transactionTimeout);
+            }
+        }
+        else if (container instanceof ServerSessionMessageListenerContainer) {
+            // this includes ServerSessionMessageListenerContainer102
+            ServerSessionMessageListenerContainer listenerContainer = (ServerSessionMessageListenerContainer) container;
+            if (maxMessagesPerTask >= 0) {
+                listenerContainer.setMaxMessagesPerTask(maxMessagesPerTask);
+            }
+            if (serverSessionFactory != null) {
+                listenerContainer.setServerSessionFactory(serverSessionFactory);
+            }
+        }
+        else if (container instanceof SimpleMessageListenerContainer) {
+            // this includes SimpleMessageListenerContainer102
+            SimpleMessageListenerContainer listenerContainer = (SimpleMessageListenerContainer) container;
+            if (concurrentConsumers >= 0) {
+                listenerContainer.setConcurrentConsumers(concurrentConsumers);
+            }
+            listenerContainer.setPubSubNoLocal(pubSubNoLocal);
+            if (taskExecutor != null) {
+                listenerContainer.setTaskExecutor(taskExecutor);
+            }
+        }
+    }
+
+    // Properties
+    //-------------------------------------------------------------------------
+    public ConnectionFactory getConnectionFactory() {
+        return connectionFactory;
+    }
+
+    public void setConnectionFactory(ConnectionFactory connectionFactory) {
+        this.connectionFactory = connectionFactory;
+    }
+
+    public ConnectionFactory getProducerConnectionFactory() {
+        if (producerConnectionFactory == null) {
+            return getConnectionFactory();
+        }
+        return producerConnectionFactory;
+    }
+
+    /**
+     * Allows the connection factory for the producer side (sending) to be different from the connection factory used for consuming.
+     * By default the {@link #getConnectionFactory()} will be used for both.
+     *
+     * @param producerConnectionFactory the connection factory to be used for sending.
+     */
+    public void setProducerConnectionFactory(ConnectionFactory producerConnectionFactory) {
+        this.producerConnectionFactory = producerConnectionFactory;
+    }
+
+    public boolean isUseVersion102() {
+        return useVersion102;
+    }
+
+    public void setUseVersion102(boolean useVersion102) {
+        this.useVersion102 = useVersion102;
+    }
+
+    public boolean isAutoStartup() {
+        return autoStartup;
+    }
+
+    public void setAutoStartup(boolean autoStartup) {
+        this.autoStartup = autoStartup;
+    }
+
+    public boolean isAcceptMessagesWhileStopping() {
+        return acceptMessagesWhileStopping;
+    }
+
+    public void setAcceptMessagesWhileStopping(boolean acceptMessagesWhileStopping) {
+        this.acceptMessagesWhileStopping = acceptMessagesWhileStopping;
+    }
+
+    public String getConsumerClientId() {
+        return consumerClientId;
+    }
+
+    public void setConsumerClientId(String consumerClientId) {
+        this.consumerClientId = consumerClientId;
+    }
+
+    public String getDurableSubscriptionName() {
+        return durableSubscriptionName;
+    }
+
+    public void setDurableSubscriptionName(String durableSubscriptionName) {
+        this.durableSubscriptionName = durableSubscriptionName;
+    }
+
+    public ExceptionListener getExceptionListener() {
+        return exceptionListener;
+    }
+
+    public void setExceptionListener(ExceptionListener exceptionListener) {
+        this.exceptionListener = exceptionListener;
+    }
+
+    public String getProducerAcknowledgementMode() {
+        return producerAcknowledgementMode;
+    }
+
+    public void setProducerAcknowledgementMode(String producerAcknowledgementMode) {
+        this.producerAcknowledgementMode = producerAcknowledgementMode;
+    }
+
+    public boolean isSubscriptionDurable() {
+        return subscriptionDurable;
+    }
+
+    public void setSubscriptionDurable(boolean subscriptionDurable) {
+        this.subscriptionDurable = subscriptionDurable;
+    }
+
+    public String getConsumerAcknowledgementMode() {
+        return consumerAcknowledgementMode;
+    }
+
+    public void setConsumerAcknowledgementMode(String consumerAcknowledgementMode) {
+        this.consumerAcknowledgementMode = consumerAcknowledgementMode;
+    }
+
+    public boolean isExposeListenerSession() {
+        return exposeListenerSession;
+    }
+
+    public void setExposeListenerSession(boolean exposeListenerSession) {
+        this.exposeListenerSession = exposeListenerSession;
+    }
+
+    public TaskExecutor getTaskExecutor() {
+        return taskExecutor;
+    }
+
+    public void setTaskExecutor(TaskExecutor taskExecutor) {
+        this.taskExecutor = taskExecutor;
+    }
+
+    public boolean isPubSubNoLocal() {
+        return pubSubNoLocal;
+    }
+
+    public void setPubSubNoLocal(boolean pubSubNoLocal) {
+        this.pubSubNoLocal = pubSubNoLocal;
+    }
+
+    public int getConcurrentConsumers() {
+        return concurrentConsumers;
+    }
+
+    public void setConcurrentConsumers(int concurrentConsumers) {
+        this.concurrentConsumers = concurrentConsumers;
+    }
+
+    public int getMaxMessagesPerTask() {
+        return maxMessagesPerTask;
+    }
+
+    public void setMaxMessagesPerTask(int maxMessagesPerTask) {
+        this.maxMessagesPerTask = maxMessagesPerTask;
+    }
+
+    public ServerSessionFactory getServerSessionFactory() {
+        return serverSessionFactory;
+    }
+
+    public void setServerSessionFactory(ServerSessionFactory serverSessionFactory) {
+        this.serverSessionFactory = serverSessionFactory;
+    }
+
+    public int getCacheLevel() {
+        return cacheLevel;
+    }
+
+    public void setCacheLevel(int cacheLevel) {
+        this.cacheLevel = cacheLevel;
+    }
+
+    public String getCacheName() {
+        return cacheName;
+    }
+
+    public void setCacheName(String cacheName) {
+        this.cacheName = cacheName;
+    }
+
+    public long getRecoveryInterval() {
+        return recoveryInterval;
+    }
+
+    public void setRecoveryInterval(long recoveryInterval) {
+        this.recoveryInterval = recoveryInterval;
+    }
+
+    public long getReceiveTimeout() {
+        return receiveTimeout;
+    }
+
+    public void setReceiveTimeout(long receiveTimeout) {
+        this.receiveTimeout = receiveTimeout;
+    }
+
+    public PlatformTransactionManager getTransactionManager() {
+        return transactionManager;
+    }
+
+    public void setTransactionManager(PlatformTransactionManager transactionManager) {
+        this.transactionManager = transactionManager;
+    }
+
+    public String getTransactionName() {
+        return transactionName;
+    }
+
+    public void setTransactionName(String transactionName) {
+        this.transactionName = transactionName;
+    }
+
+    public int getTransactionTimeout() {
+        return transactionTimeout;
+    }
+
+    public void setTransactionTimeout(int transactionTimeout) {
+        this.transactionTimeout = transactionTimeout;
+    }
+
+    public int getIdleTaskExecutionLimit() {
+        return idleTaskExecutionLimit;
+    }
+
+    public void setIdleTaskExecutionLimit(int idleTaskExecutionLimit) {
+        this.idleTaskExecutionLimit = idleTaskExecutionLimit;
+    }
+
+    public int getMaxConcurrentConsumers() {
+        return maxConcurrentConsumers;
+    }
+
+    public void setMaxConcurrentConsumers(int maxConcurrentConsumers) {
+        this.maxConcurrentConsumers = maxConcurrentConsumers;
+    }
+
+    public boolean isExplicitQosEnabled() {
+        return explicitQosEnabled;
+    }
+
+    public void setExplicitQosEnabled(boolean explicitQosEnabled) {
+        this.explicitQosEnabled = explicitQosEnabled;
+    }
+
+    public boolean isDeliveryPersistent() {
+        return deliveryPersistent;
+    }
+
+    public void setDeliveryPersistent(boolean deliveryPersistent) {
+        this.deliveryPersistent = deliveryPersistent;
+    }
+
+    public long getTimeToLive() {
+        return timeToLive;
+    }
+
+    public void setTimeToLive(long timeToLive) {
+        this.timeToLive = timeToLive;
+    }
+
+    public MessageConverter getMessageConverter() {
+        return messageConverter;
+    }
+
+    public void setMessageConverter(MessageConverter messageConverter) {
+        this.messageConverter = messageConverter;
+    }
+
+    public boolean isMessageIdEnabled() {
+        return messageIdEnabled;
+    }
+
+    public void setMessageIdEnabled(boolean messageIdEnabled) {
+        this.messageIdEnabled = messageIdEnabled;
+    }
+
+    public boolean isMessageTimestampEnabled() {
+        return messageTimestampEnabled;
+    }
+
+    public void setMessageTimestampEnabled(boolean messageTimestampEnabled) {
+        this.messageTimestampEnabled = messageTimestampEnabled;
+    }
+
+    public int getPriority() {
+        return priority;
+    }
+
+    public void setPriority(int priority) {
+        this.priority = priority;
+    }
+
+    // Implementation methods
+    //-------------------------------------------------------------------------
+    protected AbstractMessageListenerContainer chooseMessageListenerContainerImplementation() {
+        // TODO use an enum to auto-switch container types?
+
+        //return new SimpleMessageListenerContainer();
+        return new DefaultMessageListenerContainer();
+    }
+}

Propchange: activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConsumer.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConsumer.java?view=diff&rev=523430&r1=523429&r2=523430
==============================================================================
--- activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConsumer.java (original)
+++ activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConsumer.java Wed Mar 28 11:16:48 2007
@@ -17,14 +17,11 @@
  */
 package org.apache.camel.component.jms;
 
-import org.apache.camel.Processor;
 import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
 import org.apache.camel.impl.DefaultConsumer;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.springframework.jms.listener.AbstractMessageListenerContainer;
 
-import javax.jms.Message;
 import javax.jms.MessageListener;
 
 /**
@@ -57,12 +54,10 @@
         listenerContainer.start();
     }
 
-
     @Override
     protected void doStop() throws Exception {
         listenerContainer.stop();
         listenerContainer.destroy();
         super.doStop();
     }
-
 }

Modified: activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java?view=diff&rev=523430&r1=523429&r2=523430
==============================================================================
--- activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java (original)
+++ activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java Wed Mar 28 11:16:48 2007
@@ -17,55 +17,45 @@
 package org.apache.camel.component.jms;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.Exchange;
-import org.apache.camel.Producer;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
+import org.apache.camel.Producer;
 import org.apache.camel.impl.DefaultEndpoint;
-import org.apache.camel.impl.DefaultProducer;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.springframework.jms.core.JmsOperations;
-import org.springframework.jms.core.MessageCreator;
-import org.springframework.jms.core.JmsTemplate;
 import org.springframework.jms.listener.AbstractMessageListenerContainer;
-import org.springframework.jms.listener.DefaultMessageListenerContainer;
 
-import javax.jms.JMSException;
 import javax.jms.Message;
-import javax.jms.MessageListener;
-import javax.jms.Session;
 
 /**
  * @version $Revision:520964 $
  */
 public class JmsEndpoint extends DefaultEndpoint<JmsExchange> {
-    private static final Log log = LogFactory.getLog(JmsEndpoint.class);
     private JmsBinding binding;
-    private JmsTemplate template;
     private String destination;
-
-    public JmsEndpoint(String endpointUri, CamelContext container, String destination, JmsTemplate template) {
-        super(endpointUri, container);
+    private final boolean pubSubDomain;
+    private String selector;
+    private JmsConfiguration configuration;
+
+    public JmsEndpoint(String uri, CamelContext context, String destination, boolean pubSubDomain, JmsConfiguration configuration) {
+        super(uri, context);
+        this.configuration = configuration;
         this.destination = destination;
-        this.template = template;
+        this.pubSubDomain = pubSubDomain;
     }
 
     public Producer<JmsExchange> createProducer() throws Exception {
+        JmsOperations template = configuration.createJmsOperations(pubSubDomain, destination);
         return startService(new JmsProducer(this, template));
     }
 
     public Consumer<JmsExchange> createConsumer(Processor<JmsExchange> processor) throws Exception {
-        AbstractMessageListenerContainer listenerContainer = createMessageListenerContainer(template);
+
+        AbstractMessageListenerContainer listenerContainer = configuration.createMessageListenerContainer();
         listenerContainer.setDestinationName(destination);
-        listenerContainer.setPubSubDomain(template.isPubSubDomain());
-        listenerContainer.setConnectionFactory(template.getConnectionFactory());
+        listenerContainer.setPubSubDomain(pubSubDomain);
 
         // TODO support optional parameters
         // selector
-        // messageConverter
-        // durableSubscriberName
-
 
         return startService(new JmsConsumer(this, processor, listenerContainer));
     }
@@ -96,22 +86,22 @@
         this.binding = binding;
     }
 
-    public JmsOperations getTemplate() {
-        return template;
-    }
-
     public String getDestination() {
         return destination;
     }
 
-    // Implementation methods
-    //-------------------------------------------------------------------------
-
-    protected AbstractMessageListenerContainer createMessageListenerContainer(JmsTemplate template) {
-        // TODO use an enum to auto-switch container types?
+    public JmsConfiguration getConfiguration() {
+        return configuration;
+    }
 
-        //return new SimpleMessageListenerContainer();
-        return new DefaultMessageListenerContainer();
+    public String getSelector() {
+        return selector;
     }
 
+    /**
+     * Sets the JMS selector to use
+     */
+    public void setSelector(String selector) {
+        this.selector = selector;
+    }
 }

Modified: activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpointResolver.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpointResolver.java?view=diff&rev=523430&r1=523429&r2=523430
==============================================================================
--- activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpointResolver.java (original)
+++ activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpointResolver.java Wed Mar 28 11:16:48 2007
@@ -17,7 +17,6 @@
  */
 package org.apache.camel.component.jms;
 
-import org.apache.axis.transport.jms.JMSEndpoint;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Component;
 import org.apache.camel.EndpointResolver;
@@ -27,7 +26,7 @@
 
 /**
  * An implementation of {@link EndpointResolver} that creates
- * {@link JMSEndpoint} objects.
+ * {@link JmsEndpoint} objects.
  * <p/>
  * The syntax for a JMS URI looks like:
  * <p/>
@@ -84,6 +83,4 @@
         });
         return (JmsComponent) rc;
     }
-
-
 }

Modified: activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsExchange.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsExchange.java?view=diff&rev=523430&r1=523429&r2=523430
==============================================================================
--- activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsExchange.java (original)
+++ activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsExchange.java Wed Mar 28 11:16:48 2007
@@ -64,7 +64,6 @@
         return new JmsExchange(getContext(), binding);
     }
 
-
     // Expose JMS APIs
     //-------------------------------------------------------------------------
 
@@ -94,7 +93,6 @@
     public Message getFaultMessage() {
         return getOut().getJmsMessage();
     }
-
 
     // Implementation methods
     //-------------------------------------------------------------------------

Modified: activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java?view=diff&rev=523430&r1=523429&r2=523430
==============================================================================
--- activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java (original)
+++ activemq/camel/trunk/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java Wed Mar 28 11:16:48 2007
@@ -17,23 +17,22 @@
  */
 package org.apache.camel.component.jms;
 
-import org.apache.camel.impl.DefaultProducer;
 import org.apache.camel.Exchange;
+import org.apache.camel.impl.DefaultProducer;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.springframework.jms.core.MessageCreator;
 import org.springframework.jms.core.JmsOperations;
+import org.springframework.jms.core.MessageCreator;
 
+import javax.jms.JMSException;
 import javax.jms.Message;
 import javax.jms.Session;
-import javax.jms.JMSException;
 
 /**
  * @version $Revision$
  */
 public class JmsProducer extends DefaultProducer<JmsExchange> {
     private static final transient Log log = LogFactory.getLog(JmsProducer.class);
-
     private final JmsEndpoint endpoint;
     private final JmsOperations template;
 

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=523430&r1=523429&r2=523430
==============================================================================
--- 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 Mar 28 11:16:48 2007
@@ -22,18 +22,17 @@
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Processor;
-import org.apache.camel.Producer;
-import org.apache.camel.util.ProducerCache;
 import org.apache.camel.builder.RouteBuilder;
 import static org.apache.camel.component.jms.JmsComponent.jmsComponentClientAcknowledge;
 import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.util.ProducerCache;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import javax.jms.ConnectionFactory;
 import javax.jms.Message;
-import javax.jms.TextMessage;
 import javax.jms.ObjectMessage;
+import javax.jms.TextMessage;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 

Modified: activemq/camel/trunk/pom.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/pom.xml?view=diff&rev=523430&r1=523429&r2=523430
==============================================================================
--- activemq/camel/trunk/pom.xml (original)
+++ activemq/camel/trunk/pom.xml Wed Mar 28 11:16:48 2007
@@ -224,6 +224,13 @@
         <groupId>org.apache.activemq</groupId>
         <artifactId>apache-activemq</artifactId>
         <version>4.1.0-incubator</version>
+        <optional>true</optional>
+        <exclusions>
+          <exclusion>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring</artifactId>
+          </exclusion>
+        </exclusions>
       </dependency>
 
       <dependency>
@@ -273,7 +280,7 @@
       <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring</artifactId>
-        <version>2.0</version>
+        <version>2.0.3</version>
         <optional>true</optional>
         <exclusions>
           <exclusion>