1 /***
2 *
3 * Copyright 2004 Hiram Chirino
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 **/
18 package org.codehaus.activemq.ra;
19
20 import org.apache.commons.logging.Log;
21 import org.apache.commons.logging.LogFactory;
22
23 import javax.jms.Connection;
24 import javax.jms.ConnectionFactory;
25 import javax.jms.JMSException;
26 import javax.naming.Reference;
27 import javax.resource.Referenceable;
28 import javax.resource.ResourceException;
29 import javax.resource.spi.ConnectionManager;
30 import java.io.Serializable;
31
32
33 /***
34 * @version $Revision: 1.6 $
35 */
36 public class ActiveMQConnectionFactory implements ConnectionFactory, Referenceable, Serializable {
37
38 private static final Log log = LogFactory.getLog(ActiveMQConnectionFactory.class);
39 transient private ConnectionManager manager;
40 transient private ActiveMQManagedConnectionFactory factory;
41 private Reference reference;
42 private final ActiveMQConnectionRequestInfo info;
43
44
45 /***
46 * @param factory
47 * @param manager
48 * @param info
49 */
50 public ActiveMQConnectionFactory(ActiveMQManagedConnectionFactory factory, ConnectionManager manager, ActiveMQConnectionRequestInfo info) {
51 this.factory = factory;
52 this.manager = manager;
53 this.info = info;
54 }
55
56 /***
57 * @see javax.jms.ConnectionFactory#createConnection()
58 */
59 public Connection createConnection() throws JMSException {
60 return createConnection(info.copy());
61 }
62
63 /***
64 * @see javax.jms.ConnectionFactory#createConnection(java.lang.String, java.lang.String)
65 */
66 public Connection createConnection(String userName, String password) throws JMSException {
67 ActiveMQConnectionRequestInfo i = info.copy();
68 i.setUserName(userName);
69 i.setPassword(password);
70 return createConnection(i);
71 }
72
73 /***
74 * @param info
75 * @return
76 * @throws JMSException
77 */
78 private Connection createConnection(ActiveMQConnectionRequestInfo info) throws JMSException {
79 try {
80 return (Connection) manager.allocateConnection(factory, info);
81 }
82 catch (ResourceException e) {
83
84 if (e.getCause() instanceof JMSException) {
85 throw (JMSException) e.getCause();
86 }
87 log.debug("Connection could not be created:", e);
88 throw new JMSException(e.getMessage());
89 }
90 }
91
92 /***
93 * @see javax.naming.Referenceable#getReference()
94 */
95 public Reference getReference() {
96 return reference;
97 }
98
99 /***
100 * @see javax.resource.Referenceable#setReference(javax.naming.Reference)
101 */
102 public void setReference(Reference reference) {
103 this.reference = reference;
104 }
105
106 }