diff --git a/embedded-examples/src/test/java/org/neo4j/examples/GetOrCreateTest.java b/embedded-examples/src/test/java/org/neo4j/examples/GetOrCreateTest.java index 471ed4f33..0413dca43 100644 --- a/embedded-examples/src/test/java/org/neo4j/examples/GetOrCreateTest.java +++ b/embedded-examples/src/test/java/org/neo4j/examples/GetOrCreateTest.java @@ -25,6 +25,7 @@ import java.util.List; import java.util.Map; import java.util.NoSuchElementException; +import java.util.concurrent.atomic.AtomicReference; import org.junit.Test; import org.neo4j.graphdb.GraphDatabaseService; @@ -68,7 +69,6 @@ class ThreadRunner implements Runnable this.impl = impl; } - private Node createNode() { Transaction tx = graphdb().beginTx(); @@ -90,6 +90,7 @@ public void run() final Node lockNode = createNode(); final List> results = new ArrayList>(); final List threads = new ArrayList(); + final AtomicReference failure = new AtomicReference(); for ( int i = 0; i < 10; i++ ) { threads.add( new Thread() @@ -97,12 +98,20 @@ public void run() @Override public void run() { - List subresult = new ArrayList(); - for ( int j = 0; j < NUM_USERS; j++ ) + try + { + List subresult = new ArrayList(); + for ( int j = 0; j < NUM_USERS; j++ ) + { + subresult.add( impl.getOrCreateUser( getUsername( j ), graphdb(), lockNode ) ); + } + results.add( subresult ); + } + catch ( RuntimeException e ) { - subresult.add( impl.getOrCreateUser( getUsername( j ), graphdb(), lockNode ) ); + failure.compareAndSet( null, e ); + throw e; } - results.add( subresult ); } } ); } @@ -121,6 +130,10 @@ public void run() e.printStackTrace(); } } + + if ( failure.get() != null ) + throw failure.get(); + List first = results.remove( 0 ); for ( List subresult : results ) {