001    /** 
002     * 
003     * Copyright 2004 Protique Ltd
004     * 
005     * Licensed under the Apache License, Version 2.0 (the "License"); 
006     * you may not use this file except in compliance with the License. 
007     * 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     **/
018    package org.activemq.axis;
019    
020    import org.apache.axis.components.jms.BeanVendorAdapter;
021    import org.apache.axis.transport.jms.JMSURLHelper;
022    import org.activemq.ActiveMQConnectionFactory;
023    
024    import javax.jms.ConnectionFactory;
025    import javax.jms.QueueConnectionFactory;
026    import javax.jms.TopicConnectionFactory;
027    import java.util.HashMap;
028    
029    /**
030     * An adapter for using ActiveMQ inside <a href="http://ws.apache.org/axis/">Apache Axis</a>
031     *
032     * @version $Revision$
033     */
034    public class ActiveMQVendorAdapter extends BeanVendorAdapter {
035    
036        protected final static String QCF_CLASS = ActiveMQConnectionFactory.class.getName();
037        protected final static String TCF_CLASS = QCF_CLASS;
038    
039    
040        /**
041         * The URL to connect to the broker
042         */
043        public final static String BROKER_URL = "brokerURL";
044    
045        /**
046         * Specifies the default user name
047         */
048        public final static String DEFAULT_USERNAME = "defaultUser";
049    
050        /**
051         * Specifies the default password
052         */
053        public final static String DEFAULT_PASSWORD = "defaultPassword";
054    
055        /**
056         * Specifies whether the broker is embedded
057         */
058        public final static String EMBEDDED_BROKER = "embeddedBroker";
059    
060    
061        public QueueConnectionFactory getQueueConnectionFactory(HashMap properties)
062                throws Exception {
063            properties = (HashMap) properties.clone();
064            properties.put(CONNECTION_FACTORY_CLASS, QCF_CLASS);
065            return super.getQueueConnectionFactory(properties);
066        }
067    
068        public TopicConnectionFactory getTopicConnectionFactory(HashMap properties)
069                throws Exception {
070            properties = (HashMap) properties.clone();
071            properties.put(CONNECTION_FACTORY_CLASS, TCF_CLASS);
072            return super.getTopicConnectionFactory(properties);
073        }
074    
075    
076        public void addVendorConnectionFactoryProperties(JMSURLHelper jmsUrl, HashMap properties) {
077            if (jmsUrl.getPropertyValue(BROKER_URL) != null) {
078                properties.put(BROKER_URL, jmsUrl.getPropertyValue(BROKER_URL));
079            }
080    
081            if (jmsUrl.getPropertyValue(DEFAULT_USERNAME) != null) {
082                properties.put(DEFAULT_USERNAME, jmsUrl.getPropertyValue(DEFAULT_USERNAME));
083            }
084            if (jmsUrl.getPropertyValue(DEFAULT_PASSWORD) != null) {
085                properties.put(DEFAULT_PASSWORD, jmsUrl.getPropertyValue(DEFAULT_PASSWORD));
086            }
087            if (jmsUrl.getPropertyValue(EMBEDDED_BROKER) != null) {
088                properties.put(EMBEDDED_BROKER, jmsUrl.getPropertyValue(EMBEDDED_BROKER));
089            }
090        }
091    
092        public boolean isMatchingConnectionFactory(ConnectionFactory connectionFactory, JMSURLHelper jmsURL, HashMap properties) {
093            String brokerURL = null;
094            boolean embeddedBroker = false;
095    
096            if (connectionFactory instanceof ActiveMQConnectionFactory) {
097                ActiveMQConnectionFactory amqConnectionFactory =
098                        (ActiveMQConnectionFactory) connectionFactory;
099    
100                // get existing queue connection factory properties
101                brokerURL = amqConnectionFactory.getBrokerURL();
102                embeddedBroker = amqConnectionFactory.isUseEmbeddedBroker();
103            }
104    
105            // compare broker url
106            String propertyBrokerURL = (String) properties.get(BROKER_URL);
107            if (!brokerURL.equals(propertyBrokerURL)) {
108                return false;
109            }
110    
111            // compare load balancing flag
112            String tmpEmbeddedBroker = (String) properties.get(EMBEDDED_BROKER);
113            boolean propertyEmbeddedBroker = false;
114            if (tmpEmbeddedBroker != null) {
115                propertyEmbeddedBroker = Boolean.valueOf(tmpEmbeddedBroker).booleanValue();
116            }
117            if (embeddedBroker != propertyEmbeddedBroker) {
118                return false;
119            }
120            return true;
121        }
122    }