Author: mikedd
Date: Fri Oct 22 00:09:57 2010
New Revision: 1026183

URL: http://svn.apache.org/viewvc?rev=1026183&view=rev
Log:
OPENJPA-1847: Use one connection to create schema objects.

Modified:
    
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaGenerator.java

Modified: 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaGenerator.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaGenerator.java?rev=1026183&r1=1026182&r2=1026183&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaGenerator.java
 (original)
+++ 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaGenerator.java
 Fri Oct 22 00:09:57 2010
@@ -70,6 +70,8 @@ public class SchemaGenerator {
 
     private List<Listener> _listeners = null;
     private int _schemaObjects = 0;
+    
+    private Connection _conn = null;
 
     /**
      * Constructor.
@@ -296,32 +298,41 @@ public class SchemaGenerator {
         }
 
         // generate all schemas and tables
-        for (int i = 0; i < schemaMap.length; i++)
-            generateSchema((DBIdentifier) schemaMap[i][0],
-                (DBIdentifier[]) schemaMap[i][1]);
-
-        // generate pks, indexes, fks
-        DBIdentifier schemaName = DBIdentifier.NULL;
-        DBIdentifier[] tableNames;
-        for (int i = 0; i < schemaMap.length; i++) {
-            schemaName = (DBIdentifier) schemaMap[i][0];
-            tableNames = (DBIdentifier[]) schemaMap[i][1];
-
-            // estimate the number of schema objects we will need to visit
-            // in order to estimate progress total for any listeners
-            int numTables = (tableNames != null) ? tableNames.length
-                : getTables(schemaName).size();
-            _schemaObjects += numTables
-                + (_pks ? numTables : 0)
-                + (_indexes ? numTables : 0)
-                + (_fks ? numTables : 0);
-
-            if (_pks)
-                generatePrimaryKeys(schemaName, tableNames);
-            if (_indexes)
-                generateIndexes(schemaName, tableNames);
-            if (_fks)
-                generateForeignKeys(schemaName, tableNames);
+        try{ 
+            getConn(); 
+            for (int i = 0; i < schemaMap.length; i++) {
+                generateSchema((DBIdentifier) schemaMap[i][0], 
(DBIdentifier[]) schemaMap[i][1]);
+            }
+        
+            // generate pks, indexes, fks
+            DBIdentifier schemaName = DBIdentifier.NULL;
+            DBIdentifier[] tableNames;
+            for (int i = 0; i < schemaMap.length; i++) {
+                schemaName = (DBIdentifier) schemaMap[i][0];
+                tableNames = (DBIdentifier[]) schemaMap[i][1];
+    
+                // estimate the number of schema objects we will need to visit
+                // in order to estimate progress total for any listeners
+                int numTables = (tableNames != null) ? tableNames.length
+                    : getTables(schemaName).size();
+                _schemaObjects += numTables
+                    + (_pks ? numTables : 0)
+                    + (_indexes ? numTables : 0)
+                    + (_fks ? numTables : 0);
+    
+                if (_pks) {
+                    generatePrimaryKeys(schemaName, tableNames);
+                }
+                if (_indexes) {
+                    generateIndexes(schemaName, tableNames);
+                }
+                if (_fks) {
+                    generateForeignKeys(schemaName, tableNames);
+                }
+            }
+        }
+        finally  { 
+            closeConn(); 
         }
     }
 
@@ -352,25 +363,21 @@ public class SchemaGenerator {
         fireGenerationEvent(_loc.get("generating-schema", name));
 
         // generate tables, including columns and primary keys
-        Connection conn = _ds.getConnection();
-        DatabaseMetaData meta = conn.getMetaData();
+        DatabaseMetaData meta = _conn.getMetaData();
         try {
             if (tableNames == null)
-                generateTables(name, DBIdentifier.NULL, conn, meta);
+                generateTables(name, DBIdentifier.NULL, _conn, meta);
             else
                 for (int i = 0; i < tableNames.length; i++)
-                    generateTables(name, tableNames[i], conn, meta);
+                    generateTables(name, tableNames[i], _conn, meta);
 
-            if (_seqs)
-                generateSequences(name, DBIdentifier.NULL, conn, meta);
+            if (_seqs) {
+                generateSequences(name, DBIdentifier.NULL, _conn, meta);
+            }
         } finally {
             // some databases require a commit after metadata to release locks
             try {
-                conn.commit();
-            } catch (SQLException se) {
-            }
-            try {
-                conn.close();
+                _conn.commit();
             } catch (SQLException se) {
             }
         }
@@ -402,22 +409,17 @@ public class SchemaGenerator {
         throws SQLException {
         fireGenerationEvent(_loc.get("generating-all-primaries", schemaName));
 
-        Connection conn = _ds.getConnection();
-        DatabaseMetaData meta = conn.getMetaData();
+        DatabaseMetaData meta = _conn.getMetaData();
         try {
             if (tableNames == null)
-                generatePrimaryKeys(schemaName, null, conn, meta);
+                generatePrimaryKeys(schemaName, null, _conn, meta);
             else
                 for (int i = 0; i < tableNames.length; i++)
-                    generatePrimaryKeys(schemaName, tableNames[i], conn, meta);
+                    generatePrimaryKeys(schemaName, tableNames[i], _conn, 
meta);
         } finally {
             // some databases require a commit after metadata to release locks
             try {
-                conn.commit();
-            } catch (SQLException se) {
-            }
-            try {
-                conn.close();
+                _conn.commit();
             } catch (SQLException se) {
             }
         }
@@ -448,22 +450,17 @@ public class SchemaGenerator {
         throws SQLException {
         fireGenerationEvent(_loc.get("generating-all-indexes", schemaName));
 
-        Connection conn = _ds.getConnection();
-        DatabaseMetaData meta = conn.getMetaData();
+        DatabaseMetaData meta = _conn.getMetaData();
         try {
             if (tableNames == null)
-                generateIndexes(schemaName, null, conn, meta);
+                generateIndexes(schemaName, null, _conn, meta);
             else
                 for (int i = 0; i < tableNames.length; i++)
-                    generateIndexes(schemaName, tableNames[i], conn, meta);
+                    generateIndexes(schemaName, tableNames[i], _conn, meta);
         } finally {
             // some databases require a commit after metadata to release locks
             try {
-                conn.commit();
-            } catch (SQLException se) {
-            }
-            try {
-                conn.close();
+                _conn.commit();
             } catch (SQLException se) {
             }
         }
@@ -495,22 +492,17 @@ public class SchemaGenerator {
         throws SQLException {
         fireGenerationEvent(_loc.get("generating-all-foreigns", schemaName));
 
-        Connection conn = _ds.getConnection();
-        DatabaseMetaData meta = conn.getMetaData();
+        DatabaseMetaData meta = _conn.getMetaData();
         try {
             if (tableNames == null)
-                generateForeignKeys(schemaName, null, conn, meta);
+                generateForeignKeys(schemaName, null, _conn, meta);
             else
                 for (int i = 0; i < tableNames.length; i++)
-                    generateForeignKeys(schemaName, tableNames[i], conn, meta);
+                    generateForeignKeys(schemaName, tableNames[i], _conn, 
meta);
         } finally {
             // some databases require a commit after metadata to release locks
             try {
-                conn.commit();
-            } catch (SQLException se) {
-            }
-            try {
-                conn.close();
+                _conn.commit();
             } catch (SQLException se) {
             }
         }
@@ -1076,4 +1068,16 @@ public class SchemaGenerator {
             return _total;
         }
     }
+    
+    private void getConn() throws SQLException {
+        if (_conn == null) {
+            _conn = _ds.getConnection();
+        }
+    }
+
+    private void closeConn() throws SQLException {
+        if (_conn != null) {
+            _conn.close();
+        }
+    }
 }


Reply via email to