001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.camel.component.jms; 018 019 import javax.jms.Message; 020 021 import org.apache.camel.PollingConsumer; 022 import org.apache.camel.Processor; 023 import org.apache.camel.impl.DefaultEndpoint; 024 025 import org.springframework.jms.core.JmsOperations; 026 import org.springframework.jms.core.JmsTemplate; 027 import org.springframework.jms.listener.AbstractMessageListenerContainer; 028 029 /** 030 * A <a href="http://activemq.apache.org/jms.html">JMS Endpoint</a> 031 * 032 * @version $Revision:520964 $ 033 */ 034 public class JmsEndpoint extends DefaultEndpoint<JmsExchange> { 035 private JmsBinding binding; 036 private String destination; 037 private final boolean pubSubDomain; 038 private String selector; 039 private JmsConfiguration configuration; 040 041 public JmsEndpoint(String uri, JmsComponent component, String destination, boolean pubSubDomain, JmsConfiguration configuration) { 042 super(uri, component); 043 this.configuration = configuration; 044 this.destination = destination; 045 this.pubSubDomain = pubSubDomain; 046 } 047 048 public JmsProducer createProducer() throws Exception { 049 JmsOperations template = createJmsOperations(); 050 return createProducer(template); 051 } 052 053 /** 054 * Creates a producer using the given template 055 */ 056 public JmsProducer createProducer(JmsOperations template) throws Exception { 057 if (template instanceof JmsTemplate) { 058 JmsTemplate jmsTemplate = (JmsTemplate)template; 059 jmsTemplate.setPubSubDomain(pubSubDomain); 060 jmsTemplate.setDefaultDestinationName(destination); 061 } 062 return new JmsProducer(this, template); 063 } 064 065 public JmsConsumer createConsumer(Processor processor) throws Exception { 066 AbstractMessageListenerContainer listenerContainer = configuration.createMessageListenerContainer(); 067 return createConsumer(processor, listenerContainer); 068 } 069 070 /** 071 * Creates a consumer using the given processor and listener container 072 * 073 * @param processor the processor to use to process the messages 074 * @param listenerContainer the listener container 075 * @return a newly created consumer 076 * @throws Exception if the consumer cannot be created 077 */ 078 public JmsConsumer createConsumer(Processor processor, AbstractMessageListenerContainer listenerContainer) throws Exception { 079 listenerContainer.setDestinationName(destination); 080 listenerContainer.setPubSubDomain(pubSubDomain); 081 if (selector != null) { 082 listenerContainer.setMessageSelector(selector); 083 } 084 return new JmsConsumer(this, processor, listenerContainer); 085 } 086 087 @Override 088 public PollingConsumer<JmsExchange> createPollingConsumer() throws Exception { 089 JmsOperations template = createJmsOperations(); 090 return new JmsPollingConsumer(this, template); 091 } 092 093 public JmsExchange createExchange() { 094 return new JmsExchange(getContext(), getBinding()); 095 } 096 097 public JmsExchange createExchange(Message message) { 098 return new JmsExchange(getContext(), getBinding(), message); 099 } 100 101 // Properties 102 // ------------------------------------------------------------------------- 103 public JmsBinding getBinding() { 104 if (binding == null) { 105 binding = new JmsBinding(); 106 } 107 return binding; 108 } 109 110 /** 111 * Sets the binding used to convert from a Camel message to and from a JMS 112 * message 113 * 114 * @param binding the binding to use 115 */ 116 public void setBinding(JmsBinding binding) { 117 this.binding = binding; 118 } 119 120 public String getDestination() { 121 return destination; 122 } 123 124 public JmsConfiguration getConfiguration() { 125 return configuration; 126 } 127 128 public String getSelector() { 129 return selector; 130 } 131 132 /** 133 * Sets the JMS selector to use 134 */ 135 public void setSelector(String selector) { 136 this.selector = selector; 137 } 138 139 public boolean isSingleton() { 140 return false; 141 } 142 143 protected JmsOperations createJmsOperations() { 144 return configuration.createJmsOperations(pubSubDomain, destination); 145 } 146 147 }