Author: tomdz
Date: Fri Aug 19 04:58:04 2005
New Revision: 233467

URL: http://svn.apache.org/viewcvs?rev=233467&view=rev
Log:
Added failOnError attribute to the database-modifying commands

Fixed ConcurrentModificationException bug when inserting a incomplete data xml 
file


Modified:
    db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataToDatabaseSink.java
    
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/CreateDatabaseCommand.java
    db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseCommand.java
    db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DropDatabaseCommand.java
    
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteDataToSpecifiedDatabaseCommand.java
    
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaSqlToFileCommand.java
    
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaToDatabaseCommand.java

Modified: 
db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataToDatabaseSink.java
URL: 
http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataToDatabaseSink.java?rev=233467&r1=233466&r2=233467&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataToDatabaseSink.java 
(original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataToDatabaseSink.java 
Fri Aug 19 04:58:04 2005
@@ -243,8 +243,9 @@
         }

         if (_processedIdentities.containsKey(table.getName()))

         {

-            Identity identity           = buildIdentityFromPKs(table, bean);

-            HashSet  identitiesForTable = 
(HashSet)_processedIdentities.get(table.getName());

+            Identity  identity           = buildIdentityFromPKs(table, bean);

+            HashSet   identitiesForTable = 
(HashSet)_processedIdentities.get(table.getName());

+            ArrayList finishedObjs       = new ArrayList();

 

             identitiesForTable.add(identity);

             for (Iterator waitingObjIt = _waitingObjects.iterator(); 
waitingObjIt.hasNext();)

@@ -259,13 +260,20 @@
                     // prior to that we also update the fk fields in case one 
of the pk

                     // columns of the target object is auto-incremented by the 
database

                     updateFKColumns(waitingObj.getObject(), bean, 
fkIdentity.getForeignKeyName());

-                    addBean(waitingObj.getObject());

-                    if (_log.isDebugEnabled())

-                    {

-                        Table waitingObjTable = 
((SqlDynaClass)waitingObj.getObject().getDynaClass()).getTable();

+                    // we defer handling of the finished objects to avoid 
concurrent modification exceptions

+                    finishedObjs.add(waitingObj.getObject());

+                }

+            }

+            for (Iterator finishedObjIt = finishedObjs.iterator(); 
finishedObjIt.hasNext();)

+            {

+                DynaBean finishedObj = (DynaBean)finishedObjIt.next();

+

+                addBean(finishedObj);

+                if (_log.isDebugEnabled())

+                {

+                    Table waitingObjTable = 
((SqlDynaClass)finishedObj.getDynaClass()).getTable();

 

-                        _log.debug("Inserted deferred bean 
"+buildIdentityFromPKs(waitingObjTable, waitingObj.getObject()));

-                    }

+                    _log.debug("Inserted deferred bean 
"+buildIdentityFromPKs(waitingObjTable, finishedObj));

                 }

             }

         }


Modified: 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/CreateDatabaseCommand.java
URL: 
http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/CreateDatabaseCommand.java?rev=233467&r1=233466&r2=233467&view=diff
==============================================================================
--- 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/CreateDatabaseCommand.java 
(original)
+++ 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/CreateDatabaseCommand.java 
Fri Aug 19 04:58:04 2005
@@ -57,7 +57,14 @@
         }

         catch (Exception ex)

         {

-            throw new BuildException(ex);

+            if (isFailOnError())

+            {

+                throw new BuildException(ex);

+            }

+            else

+            {

+                task.log(ex.getLocalizedMessage(), Project.MSG_ERR);

+            }

         }

     }

 }


Modified: 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseCommand.java
URL: 
http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseCommand.java?rev=233467&r1=233466&r2=233467&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseCommand.java 
(original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseCommand.java 
Fri Aug 19 04:58:04 2005
@@ -15,8 +15,8 @@
     private String _databaseType;

     /** The data source to use for accessing the database */

     private BasicDataSource _dataSource;

-    /** Whether to alter or re-set the database if it already exists */

-    private boolean _alterDb = true;

+    /** Whether to stop execution upon an error */

+    private boolean _failOnError = true;

 

     /**

      * Returns the database type.

@@ -59,23 +59,24 @@
     }

 

     /**

-     * Determines whether to alter the database if it already exists, or 
re-set it.

-     * 

-     * @return <code>true</code> if to alter the database

+     * Determines whether the command execution will be stopped upon an error.

+     * Default value is <code>true</code>.

+     *

+     * @return <code>true</code> if the execution stops in case of an error

      */

-    protected boolean isAlterDatabase()

+    public boolean isFailOnError()

     {

-        return _alterDb;

+        return _failOnError;

     }

 

     /**

-     * Specifies whether to alter the database if it already exists, or re-set 
it.

-     * 

-     * @param alterTheDb <code>true</code> if to alter the database

+     * Specifies whether the command execution will be stopped upon an error.

+     *

+     * @param failOnError <code>true</code> if the execution stops in case of 
an error

      */

-    public void setAlterDatabase(boolean alterTheDb)

+    public void setFailOnError(boolean failOnError)

     {

-        _alterDb = alterTheDb;

+        _failOnError = failOnError;

     }

 

     /**


Modified: 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DropDatabaseCommand.java
URL: 
http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DropDatabaseCommand.java?rev=233467&r1=233466&r2=233467&view=diff
==============================================================================
--- 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DropDatabaseCommand.java 
(original)
+++ 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DropDatabaseCommand.java 
Fri Aug 19 04:58:04 2005
@@ -57,7 +57,14 @@
         }

         catch (Exception ex)

         {

-            throw new BuildException(ex);

+            if (isFailOnError())

+            {

+                throw new BuildException(ex);

+            }

+            else

+            {

+                task.log(ex.getLocalizedMessage(), Project.MSG_ERR);

+            }

         }

     }

 }


Modified: 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteDataToSpecifiedDatabaseCommand.java
URL: 
http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteDataToSpecifiedDatabaseCommand.java?rev=233467&r1=233466&r2=233467&view=diff
==============================================================================
--- 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteDataToSpecifiedDatabaseCommand.java
 (original)
+++ 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteDataToSpecifiedDatabaseCommand.java
 Fri Aug 19 04:58:04 2005
@@ -19,9 +19,7 @@
 import java.io.File;

 import java.util.ArrayList;

 import java.util.Iterator;

-

 import org.apache.ddlutils.Platform;

-import org.apache.ddlutils.PlatformFactory;

 import org.apache.ddlutils.io.DataReader;

 import org.apache.ddlutils.io.DataToDatabaseSink;

 import org.apache.ddlutils.model.Database;

@@ -73,7 +71,7 @@
 

         try

         {

-            Platform           platform = 
PlatformFactory.createNewPlatformInstance(getDatabaseType());

+            Platform           platform = getPlatform();

             DataToDatabaseSink sink     = new DataToDatabaseSink(platform, 
model);

             DataReader         reader   = new DataReader();

 


Modified: 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaSqlToFileCommand.java
URL: 
http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaSqlToFileCommand.java?rev=233467&r1=233466&r2=233467&view=diff
==============================================================================
--- 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaSqlToFileCommand.java
 (original)
+++ 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaSqlToFileCommand.java
 Fri Aug 19 04:58:04 2005
@@ -35,6 +35,8 @@
 {

     /** The file to output the DTD to */

     private File _outputFile;

+    /** Whether to alter or re-set the database if it already exists */

+    private boolean _alterDb = true;

 

     /**

      * Sets the file to output the sql to.

@@ -46,6 +48,26 @@
         _outputFile = outputFile;

     }

 

+    /**

+     * Determines whether to alter the database if it already exists, or 
re-set it.

+     * 

+     * @return <code>true</code> if to alter the database

+     */

+    protected boolean isAlterDatabase()

+    {

+        return _alterDb;

+    }

+

+    /**

+     * Specifies whether to alter the database if it already exists, or re-set 
it.

+     * 

+     * @param alterTheDb <code>true</code> if to alter the database

+     */

+    public void setAlterDatabase(boolean alterTheDb)

+    {

+        _alterDb = alterTheDb;

+    }

+

     /* (non-Javadoc)

      * @see 
org.apache.ddlutils.task.Command#execute(org.apache.tools.ant.Task, 
org.apache.ddlutils.model.Database)

      */

@@ -89,7 +111,14 @@
         }

         catch (Exception ex)

         {

-            throw new BuildException(ex);

+            if (isFailOnError())

+            {

+                throw new BuildException(ex);

+            }

+            else

+            {

+                task.log(ex.getLocalizedMessage(), Project.MSG_ERR);

+            }

         }

         finally

         {

@@ -104,5 +133,4 @@
             }

         }

     }

-

 }


Modified: 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaToDatabaseCommand.java
URL: 
http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaToDatabaseCommand.java?rev=233467&r1=233466&r2=233467&view=diff
==============================================================================
--- 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaToDatabaseCommand.java
 (original)
+++ 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaToDatabaseCommand.java
 Fri Aug 19 04:58:04 2005
@@ -27,6 +27,29 @@
  */

 public class WriteSchemaToDatabaseCommand extends DatabaseCommand

 {

+    /** Whether to alter or re-set the database if it already exists */

+    private boolean _alterDb = true;

+

+    /**

+     * Determines whether to alter the database if it already exists, or 
re-set it.

+     * 

+     * @return <code>true</code> if to alter the database

+     */

+    protected boolean isAlterDatabase()

+    {

+        return _alterDb;

+    }

+

+    /**

+     * Specifies whether to alter the database if it already exists, or re-set 
it.

+     * 

+     * @param alterTheDb <code>true</code> if to alter the database

+     */

+    public void setAlterDatabase(boolean alterTheDb)

+    {

+        _alterDb = alterTheDb;

+    }

+

     /* (non-Javadoc)

      * @see 
org.apache.ddlutils.task.Command#execute(org.apache.tools.ant.Task, 
org.apache.ddlutils.model.Database)

      */

@@ -54,7 +77,14 @@
         }

         catch (Exception ex)

         {

-            throw new BuildException(ex);

+            if (isFailOnError())

+            {

+                throw new BuildException(ex);

+            }

+            else

+            {

+                task.log(ex.getLocalizedMessage(), Project.MSG_ERR);

+            }

         }

     }

 }



Reply via email to