1 17 18 package org.apache.geronimo.console.internaldb; 19 20 import java.sql.Connection ; 21 import java.sql.DriverManager ; 22 import java.sql.SQLException ; 23 import java.util.HashMap ; 24 import java.util.Iterator ; 25 26 import javax.sql.DataSource ; 27 28 import org.apache.commons.logging.Log; 29 import org.apache.commons.logging.LogFactory; 30 import org.apache.geronimo.gbean.AbstractName; 31 import org.apache.geronimo.gbean.AbstractNameQuery; 32 import org.apache.geronimo.kernel.KernelRegistry; 33 import org.apache.geronimo.kernel.repository.Artifact; 34 import org.apache.geronimo.kernel.repository.Version; 35 36 45 public class DerbyConnectionUtil { 46 47 private final static Log log = LogFactory.getLog(DerbyConnectionUtil.class); 48 49 public static final String CREATE_DB_PROP = ";create=true"; 50 51 public static final String SHUTDOWN_DB_PROP = ";shutdown=true"; 52 53 private static final int RDBMS_DERBY = 1; 54 55 private static final int RDBMS_MSSQL = 2; 56 57 private static final String SYSTEM_DB = "SYSTEMDATABASE"; 58 59 private static final String DERBY_DRIVER = "org.apache.derby.jdbc.EmbeddedDriver"; 60 61 private static final String PROTOCOL = "jdbc:derby:"; 62 63 private static final String EMPTY_PROPS = ""; 64 65 private static AbstractName SYSTEM_DATASOURCE_NAME = null; 66 67 static { 68 try { 69 log.debug("Looking up system datasource name..."); 70 71 HashMap props = new HashMap (); 73 props.put("name","SystemDatasource"); 74 props.put("j2eeType","JCAManagedConnectionFactory"); 75 Artifact systemDB = new Artifact("org.apache.geronimo.configs", "system-database", (Version)null, "car"); 76 AbstractNameQuery query = new AbstractNameQuery(systemDB,props); 77 Iterator iter = KernelRegistry.getSingleKernel().listGBeans(query).iterator(); 78 79 if (iter.hasNext()) { 80 SYSTEM_DATASOURCE_NAME = (AbstractName)iter.next(); 81 log.debug("Using system datasource name: " + SYSTEM_DATASOURCE_NAME); 82 } 83 else { 84 log.warn("Failed to lookup system datasource name"); 85 } 86 } 87 catch (Throwable t) { 88 log.error("Failed to initialize", t); 94 throw new Error (t); 95 } 96 } 97 98 105 private static Connection getConnection(String dbName, String properties, 106 String protocol, String driver) throws SQLException { 107 try { 108 Class.forName(driver).newInstance(); 109 } catch (Exception e) { 110 log.error("Problem loading driver class", e); 111 } 112 if (SYSTEM_DB.equalsIgnoreCase(dbName)) { 115 return getSystemDBConnection(); 116 } else { 117 return DriverManager.getConnection(protocol + dbName + properties); 118 } 119 } 120 121 130 public static Connection getDerbyConnection(String dbName, String properties) 131 throws SQLException { 132 return getConnection(dbName, properties, PROTOCOL, DERBY_DRIVER); 133 } 134 135 public static Connection getDerbyConnection(String dbName) 136 throws SQLException { 137 return getDerbyConnection(dbName, EMPTY_PROPS); 138 } 139 140 146 public static Connection getSystemDBConnection() throws SQLException { 147 DataSource ds = null; 148 try { 149 ds = getDataSource(SYSTEM_DB); 150 return ds.getConnection(); 151 } catch (Exception e) { 152 throw new SQLException (e.getMessage()); 153 } 154 } 155 156 162 public static DataSource getDataSource(String dbName) { 163 try { 164 if (SYSTEM_DATASOURCE_NAME!=null && SYSTEM_DB.equalsIgnoreCase(dbName)) { 165 return (DataSource ) KernelRegistry.getSingleKernel().invoke( 166 SYSTEM_DATASOURCE_NAME, "$getResource"); 167 } 168 } catch (Exception e) { 169 log.error("Problem getting datasource " + dbName, e); 170 } 171 return null; 172 } 173 174 } 175 | Popular Tags |