KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > exolab > jms > net > connector > AbstractConnectionFactory


1 /**
2  * Redistribution and use of this software and associated documentation
3  * ("Software"), with or without modification, are permitted provided
4  * that the following conditions are met:
5  *
6  * 1. Redistributions of source code must retain copyright
7  * statements and notices. Redistributions must also contain a
8  * copy of this document.
9  *
10  * 2. Redistributions in binary form must reproduce the
11  * above copyright notice, this list of conditions and the
12  * following disclaimer in the documentation and/or other
13  * materials provided with the distribution.
14  *
15  * 3. The name "Exolab" must not be used to endorse or promote
16  * products derived from this Software without prior written
17  * permission of Exoffice Technologies. For written permission,
18  * please contact info@exolab.org.
19  *
20  * 4. Products derived from this Software may not be called "Exolab"
21  * nor may "Exolab" appear in their names without prior written
22  * permission of Exoffice Technologies. Exolab is a registered
23  * trademark of Exoffice Technologies.
24  *
25  * 5. Due credit should be given to the Exolab Project
26  * (http://www.exolab.org/).
27  *
28  * THIS SOFTWARE IS PROVIDED BY EXOFFICE TECHNOLOGIES AND CONTRIBUTORS
29  * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
30  * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
31  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
32  * EXOFFICE TECHNOLOGIES OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
33  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
34  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
35  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
36  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
37  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
38  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
39  * OF THE POSSIBILITY OF SUCH DAMAGE.
40  *
41  * Copyright 2003-2004 (C) Exoffice Technologies Inc. All Rights Reserved.
42  *
43  * $Id: AbstractConnectionFactory.java,v 1.5 2005/05/03 13:45:58 tanderson Exp $
44  */

45 package org.exolab.jms.net.connector;
46
47 import java.util.Map JavaDoc;
48
49 import java.security.Principal JavaDoc;
50
51 import org.exolab.jms.net.uri.URI;
52 import org.exolab.jms.net.uri.URIHelper;
53 import org.exolab.jms.net.util.Properties;
54
55
56 /**
57  * Abstract implementation of the {@link ConnectionFactory} interface.
58  *
59  * @author <a HREF="mailto:tma@netspace.net.au">Tim Anderson</a>
60  * @version $Revision: 1.5 $ $Date: 2005/05/03 13:45:58 $
61  */

62 public abstract class AbstractConnectionFactory implements ConnectionFactory {
63
64     /**
65      * Connection property prefix. Connection properties are prefixed with this,
66      * followed by the connection scheme.
67      */

68     public static final String JavaDoc PROPERTY_PREFIX = "org.exolab.jms.net.";
69
70     /**
71      * The connect scheme that this factory supports.
72      */

73     private final String JavaDoc _connectScheme;
74
75     /**
76      * The accept scheme that this factory supports.
77      */

78     private final String JavaDoc _acceptScheme;
79
80     /**
81      * The managed connection factory.
82      */

83     private final ManagedConnectionFactory _factory;
84
85     /**
86      * The connection manager.
87      */

88     private final ConnectionManager _manager;
89
90
91     /**
92      * Construct a new <code>AbstractConnectionFactory</code>.
93      *
94      * @param scheme the scheme that this factory supports, for both connect
95      * and accept
96      * @param factory the managed connection factory
97      * @param manager the connection manager
98      */

99     public AbstractConnectionFactory(String JavaDoc scheme,
100                                      ManagedConnectionFactory factory,
101                                      ConnectionManager manager) {
102         this(scheme, scheme, factory, manager);
103     }
104
105     /**
106      * Construct a new <code>AbstractConnectionFactory</code>.
107      *
108      * @param connectScheme the connect scheme that this factory supports
109      * @param acceptScheme the accept scheme that this factory supports
110      * @param factory the managed connection factory
111      * @param manager the connection manager
112      */

113     public AbstractConnectionFactory(String JavaDoc connectScheme,
114                                      String JavaDoc acceptScheme,
115                                      ManagedConnectionFactory factory,
116                                      ConnectionManager manager) {
117         _connectScheme = connectScheme;
118         _acceptScheme = acceptScheme;
119         _factory = factory;
120         _manager = manager;
121     }
122
123     /**
124      * Determines if this factory supports connections to the specified URI.
125      *
126      * @param uri the connection address
127      * @return <code>true</code> if this factory supports the URI;
128      * <code>false</code> otherwise
129      */

130     public boolean canConnect(URI uri) {
131         return _connectScheme.equals(uri.getScheme());
132     }
133
134     /**
135      * Returns a connection to the specified URI, using the default connection
136      * properties.
137      *
138      * @param principal the security principal. May be <code>null</code>
139      * @param uri the connection address
140      * @return a connection to <code>uri</code>
141      * @throws ResourceException if a connection cannot be established
142      */

143     public Connection getConnection(Principal JavaDoc principal, URI uri)
144             throws ResourceException {
145         return getConnection(principal, uri, null);
146     }
147
148     /**
149      * Returns a connection to the specified URI, using the specified connection
150      * properties.
151      *
152      * @param principal the security principal. May be <code>null</code>
153      * @param uri the connection address
154      * @param properties connection properties. If <code>null</code>, use the
155      * default connection properties
156      * @return a connection to <code>uri</code>
157      * @throws ResourceException if a connection cannot be established
158      */

159     public Connection getConnection(Principal JavaDoc principal, URI uri,
160                                     Map JavaDoc properties)
161             throws ResourceException {
162         ConnectionRequestInfo info =
163                 getConnectionRequestInfo(uri, properties);
164         if (principal == null) {
165             principal = URIHelper.getPrincipal(uri);
166         }
167         return _manager.allocateConnection(_factory, principal, info);
168     }
169
170     /**
171      * Determines if this factory supports listening for new connections on the
172      * specified URI.
173      *
174      * @param uri the connection address
175      * @return <code>true</code> if this factory supports the URI;
176      * <code>false</code> otherwise
177      */

178     public boolean canAccept(URI uri) {
179         return _acceptScheme.equals(uri.getScheme());
180     }
181
182     /**
183      * Listen for new connections on the specified URI, using the default
184      * connection acceptor properties.
185      *
186      * @param uri the connection address
187      * @throws ResourceException if connections can't be accepted on the
188      * specified URI
189      */

190     public void accept(URI uri) throws ResourceException {
191         accept(uri, null);
192     }
193
194     /**
195      * Listen for new connections on the specified URI, using the specified
196      * acceptor properties.
197      *
198      * @param uri the connection address
199      * @param properties acceptor properties. May be <code>null</code>
200      * @throws ResourceException if connections can't be accepted on the
201      * specified URI
202      */

203     public void accept(URI uri, Map JavaDoc properties) throws ResourceException {
204         ConnectionRequestInfo info = getAcceptorRequestInfo(uri, properties);
205         _manager.accept(_factory, info);
206     }
207
208     /**
209      * Returns connection request info for the specified URI and connection
210      * properties.
211      *
212      * @param uri the connection address
213      * @param properties connection properties. If <code>null</code>, use the
214      * default connection properties
215      * @return connection request info corresponding to <code>uri</code> and
216      * <code>properties</code>
217      * @throws ResourceException for any error
218      */

219     protected abstract ConnectionRequestInfo getConnectionRequestInfo(
220             URI uri, Map JavaDoc properties)
221             throws ResourceException;
222
223     /**
224      * Returns connection request info for the specified URI and connection
225      * acceptor properties.
226      * <p/>
227      * This implementation returns {@link #getConnectionRequestInfo(URI, Map)}.
228      *
229      * @param uri the connection address
230      * @param properties acceptor properties. May be <code>null</code>
231      * @return connection request info corresponding to <code>uri</code> and
232      * <code>properties</code>
233      * @throws ResourceException for any error
234      */

235     protected ConnectionRequestInfo getAcceptorRequestInfo(
236             URI uri, Map JavaDoc properties)
237             throws ResourceException {
238         return getConnectionRequestInfo(uri, properties);
239     }
240
241     /**
242      * Returns the managed connection factory.
243      *
244      * @return the managed connection factory
245      */

246     protected ManagedConnectionFactory getManagedConnectionFactory() {
247         return _factory;
248     }
249
250     /**
251      * Returns the connection manager.
252      *
253      * @return the connection manager
254      */

255     protected ConnectionManager getConnectionManager() {
256         return _manager;
257     }
258
259     /**
260      * Helper to return a {@link Properties} instance for the supplied
261      * map.
262      * <p/>
263      * All searches will be performed with properties prefixed by
264      * "org.exolab.jms.net.&lt;scheme&gt;." .
265      */

266     protected Properties getProperties(Map JavaDoc properties) {
267         String JavaDoc prefix = PROPERTY_PREFIX + _connectScheme + ".";
268         return new Properties(properties, prefix);
269     }
270
271 }
272
Popular Tags