package org.t4f.msc.db; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.Driver; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Enumeration; import java.util.logging.Logger; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; public class ConnectionManager { private final static Logger LOGGER = Logger.getLogger("POCSAG-MSC"); private final static String DATASOURCE_NAME = "jdbc/pocsag"; private final static String DATASOURCE_SHUTDOWN_NAME = "jdbc/pocsagShutDown"; private static DataSource datasource; private static DataSource getDataSource(String dataSourceLocation) throws NamingException { try { Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } Context ctx = new InitialContext(); Context envContext = (Context) ctx.lookup("java:/comp/env"); javax.sql.DataSource ds = (javax.sql.DataSource) envContext .lookup(dataSourceLocation); return ds; } public static Connection getConnection() throws SQLException { // if (datasource==null) { try { LOGGER.finest("Looking for datasource " + DATASOURCE_NAME); datasource = getDataSource(DATASOURCE_NAME); } catch (NamingException e) { LOGGER.severe("Can't find datasource " + DATASOURCE_NAME + "\n" + e.toString()); throw new SQLException("Can't open datasource"); } // } LOGGER.finest("Trying to get connection"); return datasource.getConnection(); } public static boolean checkTableExist(String tableName) throws SQLException { Connection conn = getConnection(); DatabaseMetaData metadata = conn.getMetaData(); ResultSet resultSet = metadata.getTables(null, null, tableName, null); boolean exist = resultSet.next(); conn.close(); return exist; } public static boolean shutdownDataSource() { try { LOGGER.info("Closing datasource..."); Context ctx = new InitialContext(); Context envContext = (Context) ctx.lookup("java:/comp/env"); envContext.lookup(DATASOURCE_SHUTDOWN_NAME); LOGGER.info("Datasource closed"); } catch (Exception e) { System.out.println(e); return true; } return false; } // // public static boolean execute(String sql) throws SQLException { // // // Connection conn = getConnection(); // Statement st = conn.createStatement(); // // boolean state = st.execute(sql); // // st.close(); // // return state; // // } // // // public static ResultSet executeQuery(String sql) throws SQLException { // // Connection conn = getConnection(); // Statement st = conn.createStatement(); // // return st.executeQuery(sql); // // // WARNING: Not closing the Resulset or the statement. // } // public static void deregisterDriver() { Enumeration<Driver> drivers = DriverManager.getDrivers(); while (drivers.hasMoreElements()) { Driver driver = drivers.nextElement(); try { DriverManager.deregisterDriver(driver); LOGGER.info(String.format("deregistering jdbc driver: %s", driver)); } catch (SQLException e) { LOGGER.warning(String.format("Error deregistering driver %s", driver)); } } datasource = null; } }