All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.quartz.utils.JNDIConnectionProvider Maven / Gradle / Ivy

Go to download

SDK for dev_appserver (local development) with some of the dependencies shaded (repackaged)

There is a newer version: 2.0.31
Show newest version
/* 
 * Copyright 2004-2005 OpenSymphony 
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 
 * use this file except in compliance with the License. You may obtain a copy 
 * of the License at 
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0 
 *   
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
 * License for the specific language governing permissions and limitations 
 * under the License.
 * 
 */

/*
 * Previously Copyright (c) 2001-2004 James House
 */
package org.quartz.utils;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import javax.sql.XADataSource;

import com.google.appengine.repackaged.org.apache.commons.logging.Log;
import com.google.appengine.repackaged.org.apache.commons.logging.LogFactory;

/**
 * 

* A ConnectionProvider that provides connections from a DataSource * that is managed by an application server, and made available via JNDI. *

* * @see DBConnectionManager * @see ConnectionProvider * @see PoolingConnectionProvider * * @author James House * @author Sharada Jambula * @author Mohammad Rezaei * @author Patrick Lightbody * @author Srinivas Venkatarangaiah */ public class JNDIConnectionProvider implements ConnectionProvider { /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * Data members. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ private String url; private Properties props; private Object datasource; private boolean alwaysLookup = false; /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * Constructors. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /** * Constructor * * @param jndiUrl * The url for the datasource */ public JNDIConnectionProvider(String jndiUrl, boolean alwaysLookup) { this.url = jndiUrl; this.alwaysLookup = alwaysLookup; init(); } /** * Constructor * * @param jndiUrl * The URL for the DataSource * @param jndiProps * The JNDI properties to use when establishing the InitialContext * for the lookup of the given URL. */ public JNDIConnectionProvider(String jndiUrl, Properties jndiProps, boolean alwaysLookup) { this.url = jndiUrl; this.props = jndiProps; this.alwaysLookup = alwaysLookup; init(); } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * Interface. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ Log getLog() { return LogFactory.getLog(getClass()); } private void init() { if (!isAlwaysLookup()) { Context ctx = null; try { if (props != null) ctx = new InitialContext(props); else ctx = new InitialContext(); datasource = (DataSource) ctx.lookup(url); } catch (Exception e) { getLog().error( "Error looking up datasource: " + e.getMessage(), e); } finally { if(ctx != null) try { ctx.close(); } catch(Exception ignore) {} } } } public Connection getConnection() throws SQLException { Context ctx = null; try { Object ds = this.datasource; if (ds == null || isAlwaysLookup()) { if (props != null) ctx = new InitialContext(props); else ctx = new InitialContext(); ds = ctx.lookup(url); if (!isAlwaysLookup()) this.datasource = ds; } if (ds == null) throw new SQLException( "There is no object at the JNDI URL '" + url + "'"); if (ds instanceof XADataSource) return (((XADataSource) ds) .getXAConnection().getConnection()); else if (ds instanceof DataSource) return ((DataSource) ds) .getConnection(); else throw new SQLException("Object at JNDI URL '" + url + "' is not a DataSource."); } catch (Exception e) { this.datasource = null; throw new SQLException( "Could not retrieve datasource via JNDI url '" + url + "' " + e.getClass().getName() + ": " + e.getMessage()); } finally { if(ctx != null) try { ctx.close(); } catch(Exception ignore) {} } } public boolean isAlwaysLookup() { return alwaysLookup; } public void setAlwaysLookup(boolean b) { alwaysLookup = b; } /* * @see org.quartz.utils.ConnectionProvider#shutdown() */ public void shutdown() throws SQLException { // do nothing } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy