001    // Copyright (c) 2001 Hursh Jain (http://www.mollypages.org) 
002    // The Molly framework is freely distributable under the terms of an
003    // MIT-style license. For details, see the molly pages web site at:
004    // http://www.mollypages.org/. Use, modify, have fun !
005    
006    package fc.jdbc;
007    
008    import java.io.*;
009    import java.util.*;
010    import java.util.logging.*;
011    import java.sql.*;
012    
013    import fc.io.*;
014    import fc.util.*;
015    
016    /** 
017    A simple connection manager that returns a new connection to the
018    database every time.
019    
020    @author hursh jain
021    */
022    public class SimpleConnectionMgr extends ConnectionMgr
023    {
024    
025    /**
026    {@see ConnectionMgr} 
027    **/
028    public SimpleConnectionMgr(
029        String jdbc_url, String jdbc_driver, 
030        String jdbc_user, String jdbc_password, 
031        String jdbc_catalog)  
032    throws Exception
033      {
034      super(jdbc_url, jdbc_driver, jdbc_user, jdbc_password, jdbc_catalog);
035      }
036    
037    
038    /** {@see ConnectionMgr} **/
039    public SimpleConnectionMgr(PropertyMgr props) 
040    throws Exception
041      {
042      super(props);
043      }
044    
045    /** {@see ConnectionMgr} **/
046    public SimpleConnectionMgr(PropertyMgr props, String prefix) 
047    throws Exception
048      {
049      super(props, prefix);
050      }
051    
052    /** {@see ConnectionMgr} **/
053    public SimpleConnectionMgr(SystemLog log, PropertyMgr props) 
054    throws Exception
055      {
056      super(log, props);
057      }
058    
059    protected boolean handleMgrShutdown()
060      {
061      //nothing to do
062      return true;
063      }
064      
065    /**
066    Returns a new connection to the DB everytime it's called.
067    **/ 
068    protected Connection getConImpl() throws SQLException
069      {
070      Connection con = null;
071      log.bug("enter");
072      if (log.getLevel() == Log.DEBUG) {
073        DriverManager.setLogStream(System.err);
074        }
075      try {
076        con = DriverManager.getConnection(url,user,password);
077        log.bug("getOneImpl(), got connection: " + con);  
078        }
079      catch (SQLException e) {  
080        log.warn("getOneConnection(): Could not get a database connection.", e);
081        e.fillInStackTrace();
082        throw e;
083        }
084      return con;
085      } //~ connect()
086        
087    /** 
088    Unit Test History   
089    <pre>
090    Tester    Status      Notes       
091    hj      passed    
092    </pre>
093    **/ 
094    public static void main(String[] args) throws Exception
095      {
096      Args myargs = new Args(args);
097      myargs.setUsage("java fc.jdbc.SimpleConnectionMgr -conf <path-to-config-file> [-query query-to-execute]");
098      
099      String query    = myargs.get("query", null);
100      String propfile = myargs.getRequired("conf");
101      
102      try {
103        ConnectionMgr mgr = new SimpleConnectionMgr(  
104                      new FilePropertyMgr(
105                        new File(propfile)));
106        
107        Connection con = mgr.getConnection();
108        System.out.println("GOT CONNECTION:" + con);
109    
110        if (query != null)
111          {
112          Statement stmt = con.createStatement();
113          ResultSet rs = stmt.executeQuery(query);
114          System.out.println("======= query using connection ===");
115          QueryUtil.printRS(rs);
116          System.out.println("==================================");
117          stmt.close();   
118          }
119        System.out.println("The following should give an error");
120        mgr.close();
121        mgr.getConnection();
122        }
123      catch (Exception e) {
124        e.printStackTrace();
125        } 
126      }
127      
128    }  //~class JDBCConnection
129    
130