Print

Print


Author: [log in to unmask]
Date: Fri Jan 16 15:59:31 2015
New Revision: 1949

Log:
Add some methods for managing connections better in query methods.

Modified:
    java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java	Fri Jan 16 15:59:31 2015
@@ -159,11 +159,21 @@
 
         return (DatabaseConditionsManager) manager;
     }
+    
+    public boolean checkConnection() {
+        if (!isConnected()) {
+            openConnection();
+            return true;
+        } else {
+            return false;
+        }
+    }
 
     /**
      * Open the database connection.
      */
-    public Connection openConnection() {
+    public boolean openConnection() {
+        boolean openedConnection = false;
         if (!isConnected) {
             // Do the connection parameters need to be figured out automatically?
             if (connectionParameters == null) {
@@ -183,10 +193,13 @@
 
             // Create the connection using the parameters.
             connection = connectionParameters.createConnection();
-            isConnected = true;
+            isConnected = true;                        
+            openedConnection = true;
         } 
         logger.info("connection opened");
-        return connection;
+        
+        // Flag to indicate whether an existing connection was used or not.
+        return openedConnection;
     }
 
     /**
@@ -205,6 +218,17 @@
         connection = null;
         isConnected = false;
         logger.info("connection closed");
+    }
+    
+    /**
+     * Close the database connection but only if there was a connection opened
+     * based on the flag.  Otherwise, it should be left open.
+     * @param connectionOpened Whether or not to close the connection.
+     */
+    public void closeConnection(boolean connectionOpened) {
+        if (connectionOpened) {
+            closeConnection();
+        }
     }
 
     /**
@@ -458,6 +482,7 @@
      * @return The next collection ID.
      */
     public int getNextCollectionID(String tableName) {
+        boolean openedConnection = openConnection();
         TableMetaData tableData = tableRegistry.findByTableName(tableName);
         if (tableData == null)
             throw new IllegalArgumentException("There is no meta data for table " + tableName);
@@ -471,6 +496,7 @@
             logger.warning(e.getMessage());
         }
         logger.fine("new collection ID " + collectionId + " created for table " + tableName);
+        closeConnection(openedConnection);
         return collectionId;
     }
 
@@ -526,7 +552,7 @@
      * @return The keys of the rows affected.
      */
     public List<Integer> updateQuery(String query) {
-        openConnection();
+        boolean openedConnection = openConnection();
         logger.fine(query);
         List<Integer> keys = new ArrayList<Integer>();
         Statement statement = null;
@@ -543,7 +569,7 @@
             throw new RuntimeException("Error in SQL query: " + query, x);
         } 
         DatabaseUtilities.cleanup(resultSet);
-        closeConnection();
+        closeConnection(openedConnection);        
         return keys;
     }
 
@@ -683,7 +709,7 @@
         TableMetaData tableMetaData = collection.getTableMetaData();
         if (tableMetaData == null) {            
             tableMetaData = tableRegistry.findByCollectionType(collection.getClass()); 
-            logger.fine("using default table meta data with table " + tableMetaData.getTableName() + " for collection of type " + collection.getClass().getCanonicalName());
+            logger.fine("using default table meta data with table " + tableMetaData.getTableName() + " for collection of type " + collection.getClass().getCanonicalName());            
         }
         if (collection.getCollectionId() == -1) {
             try {
@@ -693,7 +719,7 @@
             }
         }
         logger.info("inserting collection with ID " + collection.getCollectionId() 
-                + " and key " + collection.getTableMetaData().getKey() + " into table " + tableMetaData.getTableName());
+                + " and key " + tableMetaData.getKey() + " into table " + tableMetaData.getTableName());
 
         boolean openedConnection = false;
         if (!isConnected()) {
@@ -737,10 +763,8 @@
             preparedStatement.close();
         } catch (Exception e) {
         }
-        
-        if (openedConnection) {
-            closeConnection();
-        }
+               
+        closeConnection(openedConnection);        
     }
     
     /**