You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by pa...@apache.org on 2016/12/11 21:56:56 UTC
[2/2] zest-java git commit: sql: properly propagate SQL exceptions
stack traces
sql: properly propagate SQL exceptions stack traces
add sql \u201cnext\u201d exceptions as \u201csuppressed\u201d exceptions
Project: http://git-wip-us.apache.org/repos/asf/zest-java/repo
Commit: http://git-wip-us.apache.org/repos/asf/zest-java/commit/75b2ce84
Tree: http://git-wip-us.apache.org/repos/asf/zest-java/tree/75b2ce84
Diff: http://git-wip-us.apache.org/repos/asf/zest-java/diff/75b2ce84
Branch: refs/heads/develop
Commit: 75b2ce8470f419187bb2e7703a84e89d628ed65f
Parents: 260eeb2
Author: Paul Merlin <pa...@apache.org>
Authored: Sun Dec 11 22:47:10 2016 +0100
Committer: Paul Merlin <pa...@apache.org>
Committed: Sun Dec 11 22:47:10 2016 +0100
----------------------------------------------------------------------
.../entitystore/sql/SQLEntityStoreMixin.java | 23 +++++---------------
.../index/sql/internal/SQLEntityFinder.java | 2 +-
.../sql/internal/SQLStateChangeListener.java | 16 ++------------
.../postgresql/PostgreSQLAppStartup.java | 2 +-
.../postgresql/PostgreSQLIndexExporter.java | 6 ++---
.../support/skeletons/AbstractSQLIndexing.java | 18 ++++++++++-----
.../support/skeletons/AbstractSQLStartup.java | 3 ++-
.../sql/liquibase/LiquibaseServiceTest.java | 4 +++-
.../apache/zest/library/sql/common/SQLUtil.java | 11 ++++++++++
.../AbstractDataSourceServiceImporterMixin.java | 4 +++-
10 files changed, 43 insertions(+), 46 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/zest-java/blob/75b2ce84/extensions/entitystore-sql/src/main/java/org/apache/zest/entitystore/sql/SQLEntityStoreMixin.java
----------------------------------------------------------------------
diff --git a/extensions/entitystore-sql/src/main/java/org/apache/zest/entitystore/sql/SQLEntityStoreMixin.java b/extensions/entitystore-sql/src/main/java/org/apache/zest/entitystore/sql/SQLEntityStoreMixin.java
index fa66da2..d424ec4 100644
--- a/extensions/entitystore-sql/src/main/java/org/apache/zest/entitystore/sql/SQLEntityStoreMixin.java
+++ b/extensions/entitystore-sql/src/main/java/org/apache/zest/entitystore/sql/SQLEntityStoreMixin.java
@@ -202,20 +202,8 @@ public class SQLEntityStoreMixin
catch( SQLException sqle )
{
SQLUtil.rollbackQuietly( connection );
- if( LOGGER.isDebugEnabled() )
- {
- StringWriter sb = new StringWriter();
- sb.append(
- "SQLException during commit, logging nested exceptions before throwing EntityStoreException:\n" );
- SQLException e = sqle;
- while( e != null )
- {
- e.printStackTrace( new PrintWriter( sb, true ) );
- e = e.getNextException();
- }
- LOGGER.debug( sb.toString() );
- }
- throw new EntityStoreException( sqle );
+ throw new EntityStoreException( "Unable to apply state changes",
+ SQLUtil.withAllSQLExceptions( sqle ) );
}
catch( RuntimeException re )
{
@@ -310,7 +298,8 @@ public class SQLEntityStoreMixin
SQLUtil.closeQuietly( rs, ex );
SQLUtil.closeQuietly( ps, ex );
SQLUtil.closeQuietly( connection, ex );
- throw new EntityStoreException( ex );
+ throw new EntityStoreException( "Unable to get next entity state",
+ SQLUtil.withAllSQLExceptions( ex ) );
}
}
},
@@ -326,7 +315,7 @@ public class SQLEntityStoreMixin
}
catch( SQLException ex )
{
- throw new EntityStoreException( ex );
+ throw new EntityStoreException( "Unable to get entity states", SQLUtil.withAllSQLExceptions( ex ) );
}
}
@@ -532,7 +521,7 @@ public class SQLEntityStoreMixin
}
catch( SQLException sqle )
{
- throw new EntityStoreException( "Unable to get Entity " + ref, sqle );
+ throw new EntityStoreException( "Unable to get Entity " + ref, SQLUtil.withAllSQLExceptions( sqle ) );
}
finally
{
http://git-wip-us.apache.org/repos/asf/zest-java/blob/75b2ce84/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/internal/SQLEntityFinder.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/internal/SQLEntityFinder.java b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/internal/SQLEntityFinder.java
index db2dd3a..b965109 100644
--- a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/internal/SQLEntityFinder.java
+++ b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/internal/SQLEntityFinder.java
@@ -243,7 +243,7 @@ public class SQLEntityFinder
}
catch( SQLException sqle )
{
- throw new EntityFinderException( sqle );
+ throw new EntityFinderException( SQLUtil.withAllSQLExceptions( sqle ) );
}
finally
{
http://git-wip-us.apache.org/repos/asf/zest-java/blob/75b2ce84/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/internal/SQLStateChangeListener.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/internal/SQLStateChangeListener.java b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/internal/SQLStateChangeListener.java
index 2c51f84..1af26f4 100644
--- a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/internal/SQLStateChangeListener.java
+++ b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/internal/SQLStateChangeListener.java
@@ -23,17 +23,13 @@ import java.sql.SQLException;
import org.apache.zest.api.injection.scope.Service;
import org.apache.zest.api.unitofwork.UnitOfWorkException;
import org.apache.zest.index.sql.support.api.SQLIndexing;
+import org.apache.zest.library.sql.common.SQLUtil;
import org.apache.zest.spi.entity.EntityState;
import org.apache.zest.spi.entitystore.StateChangeListener;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
public class SQLStateChangeListener
implements StateChangeListener
{
-
- private static final Logger LOGGER = LoggerFactory.getLogger( SQLStateChangeListener.class );
-
@Service
private SQLIndexing _indexing;
@@ -46,16 +42,8 @@ public class SQLStateChangeListener
}
catch( SQLException sqle )
{
- SQLException lastException = sqle;
- while( sqle.getNextException() != null )
- {
- sqle = sqle.getNextException();
- }
- LOGGER.error( "Error when indexing entities", sqle );
-
// TODO is UoWException right one for this?
- throw new UnitOfWorkException( lastException );
+ throw new UnitOfWorkException( SQLUtil.withAllSQLExceptions( sqle ) );
}
}
-
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/75b2ce84/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/postgresql/PostgreSQLAppStartup.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/postgresql/PostgreSQLAppStartup.java b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/postgresql/PostgreSQLAppStartup.java
index 34dcef7..5b83cb9 100644
--- a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/postgresql/PostgreSQLAppStartup.java
+++ b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/postgresql/PostgreSQLAppStartup.java
@@ -92,7 +92,7 @@ public class PostgreSQLAppStartup
throw new InternalError( "It seems that your database doesn't have ltree as type. It is needed to store "
+ "collections. Please refer to hopefully supplied instructions on how to add "
+ "ltree type (hint: run <pg_install_dir>/share/contrib/ltree.sql script or "
- + "command 'CREATE EXTENSION ltree;')." );
+ + "command 'CREATE EXTENSION ltree;').", SQLUtil.withAllSQLExceptions( sqle ) );
}
finally
{
http://git-wip-us.apache.org/repos/asf/zest-java/blob/75b2ce84/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/postgresql/PostgreSQLIndexExporter.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/postgresql/PostgreSQLIndexExporter.java b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/postgresql/PostgreSQLIndexExporter.java
index e05f05d..fbbd0ff 100644
--- a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/postgresql/PostgreSQLIndexExporter.java
+++ b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/postgresql/PostgreSQLIndexExporter.java
@@ -194,8 +194,7 @@ public class PostgreSQLIndexExporter
}
catch( SQLException sqle )
{
- // TODO Just wrap around for now...
- throw new IOException( sqle );
+ throw new IOException( SQLUtil.withAllSQLExceptions( sqle ) );
}
finally
{
@@ -332,8 +331,7 @@ public class PostgreSQLIndexExporter
}
catch( SQLException sqle )
{
- // TODO Just wrap around for now...
- throw new IOException( sqle );
+ throw new IOException( SQLUtil.withAllSQLExceptions( sqle ) );
}
finally
{
http://git-wip-us.apache.org/repos/asf/zest-java/blob/75b2ce84/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/skeletons/AbstractSQLIndexing.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/skeletons/AbstractSQLIndexing.java b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/skeletons/AbstractSQLIndexing.java
index e42d2c5..019bd7a 100644
--- a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/skeletons/AbstractSQLIndexing.java
+++ b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/skeletons/AbstractSQLIndexing.java
@@ -262,7 +262,8 @@ public abstract class AbstractSQLIndexing
}
catch( SQLException sqle )
{
- SQLUtil.rollbackQuietly( connection );
+ sqle = SQLUtil.withAllSQLExceptions( sqle );
+ SQLUtil.rollbackQuietly( connection, sqle );
throw sqle;
}
finally
@@ -616,7 +617,8 @@ public abstract class AbstractSQLIndexing
}
catch( SQLException e )
{
- throw new EntityStoreException( "Underlying exception when inserting property " + pDesc );
+ throw new EntityStoreException( "Underlying exception when inserting property " + pDesc,
+ SQLUtil.withAllSQLExceptions( e ) );
}
} );
return propertyPK[0];
@@ -655,7 +657,8 @@ public abstract class AbstractSQLIndexing
}
catch( SQLException e )
{
- throw new EntityStoreException( "Underlying exception when inserting association " + aDesc );
+ throw new EntityStoreException( "Underlying exception when inserting association " + aDesc,
+ SQLUtil.withAllSQLExceptions( e ) );
}
} );
@@ -687,7 +690,8 @@ public abstract class AbstractSQLIndexing
}
catch( SQLException e )
{
- throw new EntityStoreException( "Underlying exception when inserting manyassociation " + mDesc );
+ throw new EntityStoreException( "Underlying exception when inserting manyassociation " + mDesc,
+ SQLUtil.withAllSQLExceptions( e ) );
}
} );
}
@@ -938,7 +942,8 @@ public abstract class AbstractSQLIndexing
}
catch( SQLException e )
{
- throw new EntityStoreException( "Underlying exception when inserting property " + pDesc + " in value " + vDesc, e );
+ throw new EntityStoreException( "Underlying exception when inserting property " + pDesc + " in value " + vDesc,
+ SQLUtil.withAllSQLExceptions( e ) );
}
} );
@@ -1054,7 +1059,8 @@ public abstract class AbstractSQLIndexing
}
catch( SQLException e )
{
- throw new EntityStoreException( "Underlying Exception when inserting " + entityPK, e );
+ throw new EntityStoreException( "Underlying Exception when inserting " + entityPK,
+ SQLUtil.withAllSQLExceptions( e ) );
}
} );
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/75b2ce84/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/skeletons/AbstractSQLStartup.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/skeletons/AbstractSQLStartup.java b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/skeletons/AbstractSQLStartup.java
index 1677027..6faaf07 100644
--- a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/skeletons/AbstractSQLStartup.java
+++ b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/skeletons/AbstractSQLStartup.java
@@ -928,7 +928,8 @@ public abstract class AbstractSQLStartup
}
catch( SQLException e )
{
- throw new EntityStoreException( "Underlying exception when setting " + pk, e );
+ throw new EntityStoreException( "Underlying exception when setting " + pk,
+ SQLUtil.withAllSQLExceptions( e ) );
}
this._state.entityTypePKs().get().put( entityTypeName, (int) pk );
// this._state.entityTypeInfos().get().put( entityTypeName, new EntityTypeInfo( descriptor, (int) pk ) );
http://git-wip-us.apache.org/repos/asf/zest-java/blob/75b2ce84/libraries/sql-liquibase/src/test/java/org/apache/zest/library/sql/liquibase/LiquibaseServiceTest.java
----------------------------------------------------------------------
diff --git a/libraries/sql-liquibase/src/test/java/org/apache/zest/library/sql/liquibase/LiquibaseServiceTest.java b/libraries/sql-liquibase/src/test/java/org/apache/zest/library/sql/liquibase/LiquibaseServiceTest.java
index 83ef261..5e4fd3d 100644
--- a/libraries/sql-liquibase/src/test/java/org/apache/zest/library/sql/liquibase/LiquibaseServiceTest.java
+++ b/libraries/sql-liquibase/src/test/java/org/apache/zest/library/sql/liquibase/LiquibaseServiceTest.java
@@ -40,6 +40,7 @@ import org.apache.zest.bootstrap.ModuleAssembly;
import org.apache.zest.bootstrap.SingletonAssembler;
import org.apache.zest.library.sql.assembly.DataSourceAssembler;
import org.apache.zest.library.sql.common.Databases;
+import org.apache.zest.library.sql.common.SQLUtil;
import org.apache.zest.library.sql.dbcp.DBCPDataSourceServiceAssembler;
import org.apache.zest.test.EntityTestAssembler;
import org.junit.Test;
@@ -145,7 +146,8 @@ public class LiquibaseServiceTest
}
catch( SQLException e )
{
- throw new IllegalArgumentException( "Could not convert to SomeValue", e );
+ throw new IllegalArgumentException( "Could not convert to SomeValue",
+ SQLUtil.withAllSQLExceptions( e ) );
}
return builder.newInstance();
http://git-wip-us.apache.org/repos/asf/zest-java/blob/75b2ce84/libraries/sql/src/main/java/org/apache/zest/library/sql/common/SQLUtil.java
----------------------------------------------------------------------
diff --git a/libraries/sql/src/main/java/org/apache/zest/library/sql/common/SQLUtil.java b/libraries/sql/src/main/java/org/apache/zest/library/sql/common/SQLUtil.java
index e87c9c6..577e62b 100644
--- a/libraries/sql/src/main/java/org/apache/zest/library/sql/common/SQLUtil.java
+++ b/libraries/sql/src/main/java/org/apache/zest/library/sql/common/SQLUtil.java
@@ -26,6 +26,17 @@ import java.sql.Statement;
public class SQLUtil
{
+ public static SQLException withAllSQLExceptions( SQLException sqlEx )
+ {
+ SQLException next = sqlEx.getNextException();
+ while( next != null )
+ {
+ sqlEx.addSuppressed( next );
+ next = next.getNextException();
+ }
+ return sqlEx;
+ }
+
public static void closeQuietly( ResultSet resultSet )
{
closeQuietly( resultSet, null );
http://git-wip-us.apache.org/repos/asf/zest-java/blob/75b2ce84/libraries/sql/src/main/java/org/apache/zest/library/sql/datasource/AbstractDataSourceServiceImporterMixin.java
----------------------------------------------------------------------
diff --git a/libraries/sql/src/main/java/org/apache/zest/library/sql/datasource/AbstractDataSourceServiceImporterMixin.java b/libraries/sql/src/main/java/org/apache/zest/library/sql/datasource/AbstractDataSourceServiceImporterMixin.java
index 41838e1..70c02c0 100644
--- a/libraries/sql/src/main/java/org/apache/zest/library/sql/datasource/AbstractDataSourceServiceImporterMixin.java
+++ b/libraries/sql/src/main/java/org/apache/zest/library/sql/datasource/AbstractDataSourceServiceImporterMixin.java
@@ -39,6 +39,7 @@ import org.apache.zest.api.unitofwork.UnitOfWorkCompletionException;
import org.apache.zest.api.unitofwork.UnitOfWorkFactory;
import org.apache.zest.api.usecase.UsecaseBuilder;
import org.apache.zest.library.circuitbreaker.CircuitBreaker;
+import org.apache.zest.library.sql.common.SQLUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -102,7 +103,8 @@ public abstract class AbstractDataSourceServiceImporterMixin<PooledDataSourceTyp
LOGGER.info( "Database for DataSource is up!" );
} catch ( SQLException e ) {
LOGGER.warn( "Database for DataSource " + importedServiceDescriptor.identity() + " is not currently available" );
- throw new ServiceImporterException( "Database for DataSource " + importedServiceDescriptor.identity() + " is not currently available", e );
+ throw new ServiceImporterException( "Database for DataSource " + importedServiceDescriptor.identity() + " is not currently available",
+ SQLUtil.withAllSQLExceptions( e ) );
} finally {
Thread.currentThread().setContextClassLoader( cl );
}