/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.jms; import javax.jms.JMSException; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; import javax.jms.TopicConnection; import javax.jms.TopicConnectionFactory; import javax.jms.XAConnectionFactory; import javax.jms.XAQueueConnectionFactory; import javax.jms.XATopicConnectionFactory; import org.jboss.logging.Logger; /** * A helper for creating connections from jms connection factories. * * @author <a href="mailto:jason@planet57.com">Jason Dillon</a> * @author <a href="mailto:adrian@jboss.com">Adrian Brock</a> * @version $Revision: 81030 $ */ public class ConnectionFactoryHelper { /** Class logger. */ private static Logger log = Logger.getLogger(ConnectionFactoryHelper.class); /** * Create a connection from the given factory. An XA connection will * be created if possible. * * @param factory An object that implements ConnectionFactory, * XAQConnectionFactory * @param username The username to use or null for no user. * @param password The password for the given username or null if no * username was specified. * @return A queue connection. * * @throws JMSException Failed to create connection. * @throws IllegalArgumentException Factory is null or invalid. */ public static Connection createConnection(final Object factory, final String username, final String password) throws JMSException { if (factory == null) throw new IllegalArgumentException("factory is null"); log.debug("using connection factory: " + factory); log.debug("using username/password: " + String.valueOf(username) + "/-- not shown --"); Connection connection; if (factory instanceof XAConnectionFactory) { XAConnectionFactory qFactory = (XAConnectionFactory) factory; if (username != null) connection = qFactory.createXAConnection(username, password); else connection = qFactory.createXAConnection(); log.debug("created XAConnection: " + connection); } else if (factory instanceof ConnectionFactory) { ConnectionFactory qFactory = (ConnectionFactory) factory; if (username != null) connection = qFactory.createConnection(username, password); else connection = qFactory.createConnection(); log.debug("created Connection: " + connection); } else { throw new IllegalArgumentException("factory is invalid"); } return connection; } /** * Create a connection from the given factory. An XA connection will * be created if possible. * * @param factory An object that implements QueueConnectionFactory, * XAQueueConnectionFactory * @return A queue connection. * * @throws JMSException Failed to create connection. * @throws IllegalArgumentException Factory is null or invalid. */ public static Connection createConnection(final Object factory) throws JMSException { return createConnection(factory, null, null); } /** * Create a queue connection from the given factory. An XA connection will * be created if possible. * * @param factory An object that implements QueueConnectionFactory, * XAQueueConnectionFactory * @param username The username to use or null for no user. * @param password The password for the given username or null if no * username was specified. * @return A queue connection. * * @throws JMSException Failed to create connection. * @throws IllegalArgumentException Factory is null or invalid. */ public static QueueConnection createQueueConnection(final Object factory, final String username, final String password) throws JMSException { if (factory == null) throw new IllegalArgumentException("factory is null"); log.debug("using connection factory: " + factory); log.debug("using username/password: " + String.valueOf(username) + "/-- not shown --"); QueueConnection connection; if (factory instanceof XAQueueConnectionFactory) { XAQueueConnectionFactory qFactory = (XAQueueConnectionFactory) factory; if (username != null) connection = qFactory.createXAQueueConnection(username, password); else connection = qFactory.createXAQueueConnection(); log.debug("created XAQueueConnection: " + connection); } else if (factory instanceof QueueConnectionFactory) { QueueConnectionFactory qFactory = (QueueConnectionFactory) factory; if (username != null) connection = qFactory.createQueueConnection(username, password); else connection = qFactory.createQueueConnection(); log.debug("created QueueConnection: " + connection); } else throw new IllegalArgumentException("factory is invalid"); return connection; } /** * Create a queue connection from the given factory. An XA connection will * be created if possible. * * @param factory An object that implements QueueConnectionFactory, * XAQueueConnectionFactory * @return A queue connection. * * @throws JMSException Failed to create connection. * @throws IllegalArgumentException Factory is null or invalid. */ public static QueueConnection createQueueConnection(final Object factory) throws JMSException { return createQueueConnection(factory, null, null); } /** * Create a topic connection from the given factory. An XA connection will * be created if possible. * * @param factory An object that implements TopicConnectionFactory, * XATopicConnectionFactory * @param username The username to use or null for no user. * @param password The password for the given username or null if no * username was specified. * @return A topic connection. * * @throws JMSException Failed to create connection. * @throws IllegalArgumentException Factory is null or invalid. */ public static TopicConnection createTopicConnection(final Object factory, final String username, final String password) throws JMSException { if (factory == null) throw new IllegalArgumentException("factory is null"); log.debug("using connection factory: " + factory); log.debug("using username/password: " + String.valueOf(username) + "/-- not shown --"); TopicConnection connection; if (factory instanceof XATopicConnectionFactory) { XATopicConnectionFactory tFactory = (XATopicConnectionFactory) factory; if (username != null) connection = tFactory.createXATopicConnection(username, password); else connection = tFactory.createXATopicConnection(); log.debug("created XATopicConnection: " + connection); } else if (factory instanceof TopicConnectionFactory) { TopicConnectionFactory tFactory = (TopicConnectionFactory) factory; if (username != null) connection = tFactory.createTopicConnection(username, password); else connection = tFactory.createTopicConnection(); log.debug("created TopicConnection: " + connection); } else throw new IllegalArgumentException("factory is invalid"); return connection; } /** * Create a topic connection from the given factory. An XA connection will * be created if possible. * * @param factory An object that implements TopicConnectionFactory, * XATopicConnectionFactory * @return A topic connection. * * @throws JMSException Failed to create connection. * @throws IllegalArgumentException Factory is null or invalid. */ public static TopicConnection createTopicConnection(final Object factory) throws JMSException { return createTopicConnection(factory, null, null); } }