blob: abe91c2713796f4ee3f47423f3d43b0d489016d7 [file] [log] [blame]
/**
* Redistribution and use of this software and associated documentation
* ("Software"), with or without modification, are permitted provided
* that the following conditions are met:
*
* 1. Redistributions of source code must retain copyright
* statements and notices. Redistributions must also contain a
* copy of this document.
*
* 2. Redistributions in binary form must reproduce the
* above copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* 3. The name "OpenEJB" must not be used to endorse or promote
* products derived from this Software without prior written
* permission of The OpenEJB Group. For written permission,
* please contact openejb-group@openejb.sf.net.
*
* 4. Products derived from this Software may not be called "OpenEJB"
* nor may "OpenEJB" appear in their names without prior written
* permission of The OpenEJB Group. OpenEJB is a registered
* trademark of The OpenEJB Group.
*
* 5. Due credit should be given to the OpenEJB Project
* (http://openejb.sf.net/).
*
* THIS SOFTWARE IS PROVIDED BY THE OPENEJB GROUP AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
* NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE OPENEJB GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Copyright 2001 (C) The OpenEJB Group. All Rights Reserved.
*
* $Id$
*/
package org.openejb.client;
import java.io.IOException;
import java.util.Properties;
/**
* @since 11/25/2001
*/
public class ConnectionManager {
private static ConnectionFactory factory;
private static Class defaultFactoryClass = SocketConnectionFactory.class;
private static String factoryName;
static {
try {
installFactory(defaultFactoryClass);
} catch (Throwable e) {
throw (IllegalStateException) new IllegalStateException("ConnectionFactory could not be installed").initCause(e);
}
}
public static Connection getConnection(ServerMetaData server) throws IOException {
return factory.getConnection(server);
}
public static void setFactory(String factoryName) throws IOException {
installFactory(factoryName);
}
public static ConnectionFactory getFactory() {
return factory;
}
public static String getFactoryName() {
return factoryName;
}
private static void installFactory(String factoryName) throws IOException {
Class factoryClass = null;
try {
ClassLoader cl = getContextClassLoader();
factoryClass = Class.forName(factoryName, true, cl);
} catch (Exception e) {
throw (IOException) new IOException("No ConnectionFactory Can be installed. Unable to load the class " + factoryName).initCause(e);
}
installFactory(factoryClass);
}
private static void installFactory(Class factoryClass) throws IOException {
ConnectionFactory factory;
try {
factory = (ConnectionFactory) factoryClass.newInstance();
} catch (Exception e) {
throw (IOException) new IOException("No ConnectionFactory Can be installed. Unable to instantiate the class " + factoryName).initCause(e);
}
try {
// TODO:3: At some point we may support a mechanism for
// actually specifying properties for the Factories
factory.init(new Properties());
} catch (Exception e) {
throw (IOException) new IOException("No ConnectionFactory Can be installed. Unable to initialize the class " + factoryName).initCause(e);
}
ConnectionManager.factory = factory;
ConnectionManager.factoryName = factoryClass.getName();
}
public static ClassLoader getContextClassLoader() {
return (ClassLoader) java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() {
public Object run() {
return Thread.currentThread().getContextClassLoader();
}
});
}
}