Repository: zest-java Updated Branches: refs/heads/develop 52d69b6e0 -> d117531c5
ZEST-128 - Trying to improve error reporting in 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/2e5671e3 Tree: http://git-wip-us.apache.org/repos/asf/zest-java/tree/2e5671e3 Diff: http://git-wip-us.apache.org/repos/asf/zest-java/diff/2e5671e3 Branch: refs/heads/develop Commit: 2e5671e3fd7ac3d7f1b09cf940100da1166e608d Parents: 73b7f19 Author: Niclas Hedhman <[email protected]> Authored: Tue Nov 17 19:20:13 2015 +0800 Committer: Niclas Hedhman <[email protected]> Committed: Tue Nov 17 19:20:13 2015 +0800 ---------------------------------------------------------------------- .../ConcurrentEntityModificationException.java | 23 ++++++++++++++++---- .../UnitOfWorkCompletionException.java | 2 +- .../runtime/unitofwork/UnitOfWorkInstance.java | 8 ++++--- ...currentEntityStateModificationException.java | 13 +---------- .../ConcurrentModificationCheckConcern.java | 4 ---- .../ConcurrentUoWFileModificationException.java | 3 ++- 6 files changed, 28 insertions(+), 25 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/zest-java/blob/2e5671e3/core/api/src/main/java/org/apache/zest/api/unitofwork/ConcurrentEntityModificationException.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/unitofwork/ConcurrentEntityModificationException.java b/core/api/src/main/java/org/apache/zest/api/unitofwork/ConcurrentEntityModificationException.java index e494f82..e9656a2 100644 --- a/core/api/src/main/java/org/apache/zest/api/unitofwork/ConcurrentEntityModificationException.java +++ b/core/api/src/main/java/org/apache/zest/api/unitofwork/ConcurrentEntityModificationException.java @@ -14,7 +14,10 @@ package org.apache.zest.api.unitofwork; +import java.util.Map; +import java.util.stream.Collectors; import org.apache.zest.api.entity.EntityComposite; +import org.apache.zest.api.type.HasTypes; import org.apache.zest.api.usecase.Usecase; /** @@ -26,17 +29,29 @@ public class ConcurrentEntityModificationException { private static final long serialVersionUID = 3872723845064767689L; - private final Iterable<EntityComposite> concurrentlyModifiedEntities; + private final Map<EntityComposite, HasTypes> concurrentlyModifiedEntities; - public ConcurrentEntityModificationException( Iterable<EntityComposite> concurrentlyModifiedEntities, + public ConcurrentEntityModificationException( Map<EntityComposite, HasTypes> concurrentlyModifiedEntities, Usecase usecase ) { - super( "Entities changed concurrently, and detected in usecase '" + usecase + "'\nModified entities : " + concurrentlyModifiedEntities ); + super( "Entities changed concurrently, and detected in usecase '" + usecase + "'\nModified entities : " + format( concurrentlyModifiedEntities ) ); this.concurrentlyModifiedEntities = concurrentlyModifiedEntities; } - public Iterable<EntityComposite> concurrentlyModifiedEntities() + private static String format( Map<EntityComposite, HasTypes> concurrentlyModifiedEntities ) + { + return concurrentlyModifiedEntities.entrySet().stream() + .map( entry -> + entry.getKey() + + " : " + + entry.getValue().types().map( Class::getSimpleName ) + .collect( Collectors.joining( "," ) ) + ) + .collect( Collectors.joining( "\n" ) ); + } + + public Map<EntityComposite, HasTypes> concurrentlyModifiedEntities() { return concurrentlyModifiedEntities; } http://git-wip-us.apache.org/repos/asf/zest-java/blob/2e5671e3/core/api/src/main/java/org/apache/zest/api/unitofwork/UnitOfWorkCompletionException.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/unitofwork/UnitOfWorkCompletionException.java b/core/api/src/main/java/org/apache/zest/api/unitofwork/UnitOfWorkCompletionException.java index 092fc62..b867d26 100644 --- a/core/api/src/main/java/org/apache/zest/api/unitofwork/UnitOfWorkCompletionException.java +++ b/core/api/src/main/java/org/apache/zest/api/unitofwork/UnitOfWorkCompletionException.java @@ -19,7 +19,7 @@ package org.apache.zest.api.unitofwork; * fails, this exception will be thrown. */ public class UnitOfWorkCompletionException - extends Exception + extends RuntimeException { private static final long serialVersionUID = 6531642131384516904L; http://git-wip-us.apache.org/repos/asf/zest-java/blob/2e5671e3/core/runtime/src/main/java/org/apache/zest/runtime/unitofwork/UnitOfWorkInstance.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/unitofwork/UnitOfWorkInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/unitofwork/UnitOfWorkInstance.java index e9ea72c..fc0810b 100755 --- a/core/runtime/src/main/java/org/apache/zest/runtime/unitofwork/UnitOfWorkInstance.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/unitofwork/UnitOfWorkInstance.java @@ -21,6 +21,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Stack; import java.util.concurrent.TimeUnit; import org.apache.zest.api.common.MetaInfo; @@ -32,6 +33,7 @@ import org.apache.zest.api.metrics.MetricsCounterFactory; import org.apache.zest.api.metrics.MetricsProvider; import org.apache.zest.api.metrics.MetricsTimer; import org.apache.zest.api.metrics.MetricsTimerFactory; +import org.apache.zest.api.type.HasTypes; import org.apache.zest.api.unitofwork.ConcurrentEntityModificationException; import org.apache.zest.api.unitofwork.EntityTypeNotFoundException; import org.apache.zest.api.unitofwork.NoSuchEntityException; @@ -364,14 +366,14 @@ public final class UnitOfWorkInstance // If we cancelled due to concurrent modification, then create the proper exception for it! ConcurrentEntityStateModificationException mee = (ConcurrentEntityStateModificationException) e; Collection<EntityReference> modifiedEntityIdentities = mee.modifiedEntities(); - Collection<EntityComposite> modifiedEntities = new ArrayList<>(); + Map<EntityComposite, HasTypes> modifiedEntities = new HashMap<>(); for( EntityReference modifiedEntityIdentity : modifiedEntityIdentities ) { instanceCache.values().stream() .filter( instance -> instance.identity().equals( modifiedEntityIdentity ) ) - .forEach( instance -> modifiedEntities.add( instance.<EntityComposite>proxy() ) ); + .forEach( instance -> modifiedEntities.put( instance.<EntityComposite>proxy(), instance ) ); } - throw new ConcurrentEntityModificationException( modifiedEntities, ( (ConcurrentEntityStateModificationException) e ).getUsecase() ); + throw new ConcurrentEntityModificationException( modifiedEntities, usecase ); } else { http://git-wip-us.apache.org/repos/asf/zest-java/blob/2e5671e3/core/spi/src/main/java/org/apache/zest/spi/entitystore/ConcurrentEntityStateModificationException.java ---------------------------------------------------------------------- diff --git a/core/spi/src/main/java/org/apache/zest/spi/entitystore/ConcurrentEntityStateModificationException.java b/core/spi/src/main/java/org/apache/zest/spi/entitystore/ConcurrentEntityStateModificationException.java index b6716ed..dd08ff3 100644 --- a/core/spi/src/main/java/org/apache/zest/spi/entitystore/ConcurrentEntityStateModificationException.java +++ b/core/spi/src/main/java/org/apache/zest/spi/entitystore/ConcurrentEntityStateModificationException.java @@ -28,7 +28,6 @@ public class ConcurrentEntityStateModificationException extends EntityStoreException { private Collection<EntityReference> modifiedEntities; - private Usecase usecase; public ConcurrentEntityStateModificationException( Collection<EntityReference> modifiedEntities ) { @@ -44,16 +43,6 @@ public class ConcurrentEntityStateModificationException @Override public String getMessage() { - return "Entities changed concurrently. Changes detected in usecase '" + usecase + "\nModified entities are;\n" + modifiedEntities; - } - - public Usecase getUsecase() - { - return usecase; - } - - public void setUsecase( Usecase usecase ) - { - this.usecase = usecase; + return "Entities changed concurrently.\nModified entities are;\n" + modifiedEntities; } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-java/blob/2e5671e3/core/spi/src/main/java/org/apache/zest/spi/entitystore/ConcurrentModificationCheckConcern.java ---------------------------------------------------------------------- diff --git a/core/spi/src/main/java/org/apache/zest/spi/entitystore/ConcurrentModificationCheckConcern.java b/core/spi/src/main/java/org/apache/zest/spi/entitystore/ConcurrentModificationCheckConcern.java index 5ed5f91..9e85c83 100755 --- a/core/spi/src/main/java/org/apache/zest/spi/entitystore/ConcurrentModificationCheckConcern.java +++ b/core/spi/src/main/java/org/apache/zest/spi/entitystore/ConcurrentModificationCheckConcern.java @@ -131,10 +131,6 @@ public abstract class ConcurrentModificationCheckConcern catch( EntityStoreException e ) { lock.writeLock().unlock(); - if( e instanceof ConcurrentEntityStateModificationException ) - { - ((ConcurrentEntityStateModificationException) e).setUsecase( usecase() ); - } throw e; } } http://git-wip-us.apache.org/repos/asf/zest-java/blob/2e5671e3/libraries/uowfile/src/main/java/org/apache/zest/library/uowfile/internal/ConcurrentUoWFileModificationException.java ---------------------------------------------------------------------- diff --git a/libraries/uowfile/src/main/java/org/apache/zest/library/uowfile/internal/ConcurrentUoWFileModificationException.java b/libraries/uowfile/src/main/java/org/apache/zest/library/uowfile/internal/ConcurrentUoWFileModificationException.java index c1d8fe6..d91fabf 100644 --- a/libraries/uowfile/src/main/java/org/apache/zest/library/uowfile/internal/ConcurrentUoWFileModificationException.java +++ b/libraries/uowfile/src/main/java/org/apache/zest/library/uowfile/internal/ConcurrentUoWFileModificationException.java @@ -19,6 +19,7 @@ package org.apache.zest.library.uowfile.internal; import java.util.Collections; import org.apache.zest.api.entity.EntityComposite; +import org.apache.zest.api.type.HasTypes; import org.apache.zest.api.unitofwork.ConcurrentEntityModificationException; import org.apache.zest.api.usecase.Usecase; @@ -29,7 +30,7 @@ public class ConcurrentUoWFileModificationException ConcurrentUoWFileModificationException( Iterable<UoWFile> concurrentlyModifiedFiles, Usecase usecase ) { - super( Collections.<EntityComposite>emptyList(), usecase ); + super( Collections.<EntityComposite,HasTypes>emptyMap(), usecase ); this.concurrentlyModifiedFiles = concurrentlyModifiedFiles; }
