001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package org.jboss.mq;
023:
024: import java.io.Serializable;
025: import java.util.Properties;
026:
027: import javax.jms.Connection;
028: import javax.jms.ConnectionFactory;
029: import javax.jms.JMSException;
030: import javax.jms.QueueConnection;
031: import javax.jms.QueueConnectionFactory;
032: import javax.jms.TopicConnection;
033: import javax.jms.TopicConnectionFactory;
034: import javax.naming.NamingException;
035: import javax.naming.Reference;
036: import javax.naming.Referenceable;
037:
038: import org.jboss.mq.referenceable.ObjectRefAddr;
039:
040: /**
041: * This class implements <code>javax.jms.TopicConnectionFactory</code> and
042: * <code>javax.jms.QueueConnectionFactory</code>.
043: *
044: * @author Norbert Lataille (Norbert.Lataille@m4x.org)
045: * @author Hiram Chirino (Cojonudo14@hotmail.com)
046: * @author <a href="mailto:jason@planet57.com">Jason Dillon</a>
047: * @author <a href="mailto:adrian@jboss.org">Adrian Brock</a>
048: * @version <tt>$Revision: 57198 $</tt>
049: */
050: public class SpyConnectionFactory implements Serializable,
051: ConnectionFactory, QueueConnectionFactory,
052: TopicConnectionFactory, Referenceable {
053: /** The serialVersionUID */
054: static final long serialVersionUID = 3392566934963731105L;
055:
056: /** The delegate factory */
057: protected GenericConnectionFactory factory;
058:
059: /**
060: * Create a new SpyConnectionFactory
061: *
062: * @param factory the delegate factory
063: */
064: public SpyConnectionFactory(GenericConnectionFactory factory) {
065: this .factory = factory;
066: }
067:
068: /**
069: * Create a new SpyConnectionFactory
070: *
071: * @param config the configuration
072: */
073: public SpyConnectionFactory(Properties config) {
074: this .factory = new GenericConnectionFactory(null, config);
075: }
076:
077: /**
078: * For testing
079: */
080: public Properties getProperties() {
081: if (factory == null)
082: return null;
083: else
084: return factory.getProperties();
085: }
086:
087: public Reference getReference() throws NamingException {
088: return new Reference(
089: "org.jboss.mq.SpyConnectionFactory",
090: new ObjectRefAddr("DCF", factory),
091: "org.jboss.mq.referenceable.SpyConnectionFactoryObjectFactory",
092: null);
093: }
094:
095: public Connection createConnection() throws JMSException {
096: return internalCreateConnection(SpyConnection.UNIFIED);
097: }
098:
099: public Connection createConnection(String userName, String password)
100: throws JMSException {
101: return internalCreateConnection(SpyConnection.UNIFIED,
102: userName, password);
103: }
104:
105: public QueueConnection createQueueConnection() throws JMSException {
106: return (QueueConnection) internalCreateConnection(SpyConnection.QUEUE);
107: }
108:
109: public QueueConnection createQueueConnection(String userName,
110: String password) throws JMSException {
111: return (QueueConnection) internalCreateConnection(
112: SpyConnection.QUEUE, userName, password);
113: }
114:
115: public TopicConnection createTopicConnection() throws JMSException {
116: return (TopicConnection) internalCreateConnection(SpyConnection.TOPIC);
117: }
118:
119: public TopicConnection createTopicConnection(String userName,
120: String password) throws JMSException {
121: return (TopicConnection) internalCreateConnection(
122: SpyConnection.TOPIC, userName, password);
123: }
124:
125: /**
126: * Create a connection
127: *
128: * @param type the type
129: * @return the connection
130: * @throws JMSException for any error
131: */
132: protected Connection internalCreateConnection(int type)
133: throws JMSException {
134: try {
135: return new SpyConnection(type, factory);
136: } catch (JMSException e) {
137: throw e;
138: } catch (Exception e) {
139: throw new SpyJMSException("Failed to create Connection", e);
140: }
141: }
142:
143: /**
144: * Create a connection
145: *
146: * @param type the type
147: * @param userName the user name
148: * @param password the password
149: * @return the connection
150: * @throws JMSException for any error
151: */
152: protected Connection internalCreateConnection(int type,
153: String userName, String password) throws JMSException {
154: try {
155: if (userName == null)
156: throw new SpyJMSException("Username is null");
157: if (password == null)
158: throw new SpyJMSException("Password is null");
159:
160: return new SpyConnection(type, userName, password, factory);
161: } catch (JMSException e) {
162: throw e;
163: } catch (Exception e) {
164: throw new SpyJMSException("Failed to create Connection", e);
165: }
166: }
167: }
|