From f0ddeab6a79a7a5e4c64bafc52444564426a4b16 Mon Sep 17 00:00:00 2001 From: Michael Hunger Date: Tue, 15 Feb 2011 18:31:28 +0100 Subject: [PATCH] added ChainedTransactionManager, fixed config for RecommendationTest --- spring-data-neo4j/pom.xml | 5 - .../neo4j/config/Neo4jConfiguration.java | 3 + .../PropertyFieldAccessorFactory.java | 1 - .../support/ChainedTransactionManager.java | 34 +-- .../neo4j/support/GraphDatabaseContext.java | 16 +- .../neo4j/partial/RecommendationTest.java | 4 +- .../ChainedTransactionManagerTest.java | 266 ++++++++++++++++-- .../support/EntityPropertyValidationTest.java | 2 + .../data/graph/neo4j/support/FinderTest.java | 2 + .../data/graph/neo4j/support/IndexTest.java | 2 + .../ModificationOutsideOfTransactionTest.java | 2 + .../support/NodeEntityRelationshipTest.java | 2 + .../graph/neo4j/support/NodeEntityTest.java | 2 + .../graph/neo4j/support/ProjectionTest.java | 2 + .../graph/neo4j/support/PropertyTest.java | 2 + .../neo4j/support/RelationshipEntityTest.java | 2 + .../SubReferenceNodeTypeStrategyTest.java | 2 + .../graph/neo4j/support/TraversalTest.java | 2 + .../Neo4jGraphRecommendationTest-context.xml | 14 +- 19 files changed, 309 insertions(+), 56 deletions(-) diff --git a/spring-data-neo4j/pom.xml b/spring-data-neo4j/pom.xml index 0285ffeab..d1dc2be19 100644 --- a/spring-data-neo4j/pom.xml +++ b/spring-data-neo4j/pom.xml @@ -152,11 +152,6 @@ - - neo4j-public-repository - Neo4J Public Repository - http://m2.neo4j.org - jboss-repository JBoss Public Repository diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/config/Neo4jConfiguration.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/config/Neo4jConfiguration.java index 60586a8a0..a5f87776b 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/config/Neo4jConfiguration.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/config/Neo4jConfiguration.java @@ -20,6 +20,7 @@ import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.kernel.impl.transaction.SpringTransactionManager; import org.neo4j.kernel.impl.transaction.UserTransactionImpl; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.graph.neo4j.fieldaccess.Neo4jConversionServiceFactoryBean; @@ -55,6 +56,7 @@ public class Neo4jConfiguration { return graphDatabaseService; } + @Autowired public void setGraphDatabaseService(GraphDatabaseService graphDatabaseService) { this.graphDatabaseService = graphDatabaseService; @@ -66,6 +68,7 @@ public class Neo4jConfiguration { return entityManagerFactory; } + @Qualifier("&entityManagerFactory") @Autowired(required = false) public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory) { this.entityManagerFactory = entityManagerFactory; diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/PropertyFieldAccessorFactory.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/PropertyFieldAccessorFactory.java index 26681245c..e5f6ec13c 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/PropertyFieldAccessorFactory.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/PropertyFieldAccessorFactory.java @@ -73,7 +73,6 @@ public class PropertyFieldAccessorFactory implements FieldAccessorFactory graphBacked) { - System.out.println("### getValue "+field.getDeclaringClass().getSimpleName()+"."+field.getName()); return doReturn(doGetValue(graphBacked)); } diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/ChainedTransactionManager.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/ChainedTransactionManager.java index 10f30c5a6..77ae8a641 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/ChainedTransactionManager.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/ChainedTransactionManager.java @@ -9,39 +9,35 @@ import java.util.Collection; import java.util.Collections; import java.util.List; +import static java.util.Arrays.asList; + /** * @author mh * @since 14.02.11 */ public class ChainedTransactionManager implements PlatformTransactionManager { - protected Log logger = LogFactory.getLog(getClass()); + private final static Log logger = LogFactory.getLog(ChainedTransactionManager.class); - private final List transactionManagers = new ArrayList(); - private SynchronizationManager sychronizationManager ; + private final List transactionManagers; + private final SynchronizationManager synchronizationManager; - ChainedTransactionManager(SynchronizationManager sychronizationManager) { - this.sychronizationManager = sychronizationManager; + public ChainedTransactionManager(PlatformTransactionManager... transactionManagers) { + this(new DefaultSynchronizationManager(),transactionManagers); } - public ChainedTransactionManager() { - this(new DefaultSynchronizationManager()); + public ChainedTransactionManager(SynchronizationManager synchronizationManager, PlatformTransactionManager... transactionManagers) { + this.synchronizationManager = synchronizationManager; + this.transactionManagers=asList(transactionManagers); } - public void setTransactionManagers(List transactionManagers) { - this.transactionManagers.addAll(transactionManagers); - } - - - - @Override public MultiTransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException { MultiTransactionStatus mts = new MultiTransactionStatus(transactionManagers.get(0)/*First TM is main TM*/); - if (!sychronizationManager.isSynchronizationActive()) { - sychronizationManager.initSynchronization(); + if (!synchronizationManager.isSynchronizationActive()) { + synchronizationManager.initSynchronization(); mts.setNewSynchonization(); } @@ -81,7 +77,7 @@ public class ChainedTransactionManager implements PlatformTransactionManager { } if (multiTransactionStatus.isNewSynchonization()){ - sychronizationManager.clearSynchronization(); + synchronizationManager.clearSynchronization(); } if (commitException != null) { @@ -115,7 +111,7 @@ public class ChainedTransactionManager implements PlatformTransactionManager { } if (multiTransactionStatus.isNewSynchonization()){ - sychronizationManager.clearSynchronization(); + synchronizationManager.clearSynchronization(); } if (rollbackException != null) { @@ -124,7 +120,7 @@ public class ChainedTransactionManager implements PlatformTransactionManager { } } - private Iterable reverse(Collection collection) { + private Iterable reverse(Collection collection) { List list = new ArrayList(collection); Collections.reverse(list); return list; diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/GraphDatabaseContext.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/GraphDatabaseContext.java index fc44a971e..04b8b00a7 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/GraphDatabaseContext.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/GraphDatabaseContext.java @@ -174,6 +174,7 @@ public class GraphDatabaseContext { * @return an instance of the entity type */ public T createEntityFromState(final S state, final Class type) { + if (state==null) throw new IllegalArgumentException("state has to be either a Node or Relationship, not null"); if (state instanceof Node) return (T) graphEntityInstantiator.createEntityFromState((Node) state, nodeTypeStrategy.confirmType((Node)state, (Class)type)); else @@ -274,7 +275,20 @@ public class GraphDatabaseContext { * @return */ public Node getOrCreateSubReferenceNode(final RelationshipType relType) { - return new GraphDatabaseUtil(graphDatabaseService).getOrCreateSubReferenceNode(relType); + return getOrCreateSingleOtherNode(graphDatabaseService.getReferenceNode(), relType, Direction.OUTGOING); + } + + private Node getOrCreateSingleOtherNode(Node fromNode, RelationshipType type, + Direction direction) { + Relationship singleRelationship = fromNode.getSingleRelationship(type, direction); + if (singleRelationship != null) { + return singleRelationship.getOtherNode(fromNode); + } + + Node otherNode = graphDatabaseService.createNode(); + fromNode.createRelationshipTo(otherNode, type); + return otherNode; + } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/partial/RecommendationTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/partial/RecommendationTest.java index fdfe9b280..e159321b3 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/partial/RecommendationTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/partial/RecommendationTest.java @@ -10,6 +10,7 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.graph.neo4j.support.GraphDatabaseContext; import org.springframework.data.graph.neo4j.support.node.Neo4jHelper; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -22,7 +23,8 @@ import javax.sql.DataSource; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:org/springframework/data/graph/neo4j/partial/Neo4jGraphRecommendationTest-context.xml"}) -@Ignore("NaiveDoubleTM seems to break things in the graph store") +@Ignore("seems to break things in the graph store") +@DirtiesContext public class RecommendationTest { protected final Log log = LogFactory.getLog(getClass()); diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/ChainedTransactionManagerTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/ChainedTransactionManagerTest.java index 98eafe0ac..416768cc3 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/ChainedTransactionManagerTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/ChainedTransactionManagerTest.java @@ -1,15 +1,19 @@ package org.springframework.data.graph.neo4j.support; +import org.hamcrest.Description; +import org.hamcrest.Factory; import org.junit.Test; -import org.springframework.transaction.PlatformTransactionManager; -import org.springframework.transaction.TransactionDefinition; -import org.springframework.transaction.TransactionException; -import org.springframework.transaction.TransactionStatus; +import org.junit.internal.matchers.TypeSafeMatcher; +import org.springframework.transaction.*; import org.springframework.transaction.support.DefaultTransactionDefinition; -import java.util.Arrays; - -import static junit.framework.Assert.assertTrue; +import static junit.framework.Assert.*; +import static org.junit.Assert.assertThat; +import static org.springframework.data.graph.neo4j.support.ChainedTransactionManagerTest.TestPlatformTransactionManager.createFailingTransactionManager; +import static org.springframework.data.graph.neo4j.support.ChainedTransactionManagerTest.TestPlatformTransactionManager.createNonFailingTransactionManager; +import static org.springframework.data.graph.neo4j.support.ChainedTransactionManagerTest.TransactionManagerMatcher.isCommitted; +import static org.springframework.data.graph.neo4j.support.ChainedTransactionManagerTest.TransactionManagerMatcher.wasRolledback; +import static org.springframework.transaction.HeuristicCompletionException.getStateString; /** * @author mh @@ -17,55 +21,271 @@ import static junit.framework.Assert.assertTrue; */ public class ChainedTransactionManagerTest { + private ChainedTransactionManager tm; + + @Test public void shouldCompleteSuccessfully() throws Exception { - ChainedTransactionManager tm = new ChainedTransactionManager(new NullSynchronizationManager()); - TestPlatformTransactionManager transactionManager = new TestPlatformTransactionManager(); - tm.setTransactionManagers(Arrays.asList(transactionManager)); - MultiTransactionStatus transaction = tm.getTransaction(new DefaultTransactionDefinition()); - tm.commit(transaction); + PlatformTransactionManager transactionManager = createNonFailingTransactionManager("single"); + setupTransactionManagers(transactionManager); - assertTrue("TM didn't commit", transactionManager.isCommited()); + createAndCommitTransaction(); + + assertThat(transactionManager, isCommitted()); } - private static class NullSynchronizationManager implements SynchronizationManager { + @Test + public void shouldThrowRolledBackExceptionForSingleTMFailure() throws Exception { + + setupTransactionManagers(createFailingTransactionManager("single")); + try + { + createAndCommitTransaction(); + fail("Didn't throw the expected exception"); + } catch (HeuristicCompletionException e){ + assertEquals(HeuristicCompletionException.STATE_ROLLED_BACK, e.getOutcomeState()); + } + + } + + private void setupTransactionManagers(PlatformTransactionManager... transactionManagers) { + tm = new ChainedTransactionManager(new TestSynchronizationManager(), transactionManagers); + } + + @Test + public void shouldCommitAllRegisteredTM() throws Exception { + PlatformTransactionManager first = createNonFailingTransactionManager("first"); + PlatformTransactionManager second = createNonFailingTransactionManager("second"); + setupTransactionManagers(first, second); + createAndCommitTransaction(); + assertThat(first, isCommitted()); + assertThat(second, isCommitted()); + } + @Test + public void shouldCommitInReverseOrder() throws Exception { + PlatformTransactionManager first = createNonFailingTransactionManager("first"); + PlatformTransactionManager second = createNonFailingTransactionManager("second"); + setupTransactionManagers(first, second); + createAndCommitTransaction(); + assertTrue("second tm commited before first ", commitTime(first) >= commitTime(second)); + + // assertThat(second, committedBefore(first)); + } + + private Long commitTime(PlatformTransactionManager transactionManager) { + return ((TestPlatformTransactionManager)transactionManager).getCommitTime(); + } + + @Test + public void shouldThrowMixedRolledBackExceptionForNonFirstTMFailure() throws Exception { + + setupTransactionManagers( + TestPlatformTransactionManager.createFailingTransactionManager("first"), + createNonFailingTransactionManager("second")); + try + { + createAndCommitTransaction(); + fail("Didn't throw the expected exception"); + } catch (HeuristicCompletionException e){ + assertHeuristicException(HeuristicCompletionException.STATE_MIXED, e.getOutcomeState()); + } + } + + @Test + public void shouldRollbackAllTransactionManagers() throws Exception { + + PlatformTransactionManager first = createNonFailingTransactionManager("first"); + PlatformTransactionManager second = createNonFailingTransactionManager("second"); + setupTransactionManagers(first, second); + createAndRollbackTransaction(); + assertThat(first, wasRolledback()); + assertThat(second, wasRolledback()); + + } + @Test(expected = UnexpectedRollbackException.class ) + public void shouldThrowExceptionOnFailingRollback() throws Exception { + PlatformTransactionManager first = createFailingTransactionManager("first"); + setupTransactionManagers(first); + createAndRollbackTransaction(); + } + + private void createAndRollbackTransaction() { + MultiTransactionStatus transaction = tm.getTransaction(new DefaultTransactionDefinition()); + tm.rollback(transaction); + } + + private void assertHeuristicException(final int expected, final int actual) { + assertEquals(getStateString(expected), getStateString(actual)); + } + + private void createAndCommitTransaction() { + MultiTransactionStatus transaction = tm.getTransaction(new DefaultTransactionDefinition()); + tm.commit(transaction); + } + + private static class TestSynchronizationManager implements SynchronizationManager { + private boolean synchronizationActive; + @Override public void initSynchronization() { - + synchronizationActive=true; } @Override public boolean isSynchronizationActive() { - return true; + return synchronizationActive; } @Override public void clearSynchronization() { - + synchronizationActive=false; } } - private static class TestPlatformTransactionManager implements PlatformTransactionManager { + static class TestPlatformTransactionManager implements PlatformTransactionManager { - private boolean commited; + private Long commitTime; + private String name; + private Long rollbackTime; + + public TestPlatformTransactionManager(String name) { + this.name = name; + } + + @Factory + static PlatformTransactionManager createFailingTransactionManager(String name) { + return new TestPlatformTransactionManager(name+"-failing") + { + @Override + public void commit(TransactionStatus status) throws TransactionException { + throw new RuntimeException(); + } + + @Override + public void rollback(TransactionStatus status) throws TransactionException { + throw new RuntimeException(); + } + }; + } + + @Factory + static PlatformTransactionManager createNonFailingTransactionManager(String name) { + return new TestPlatformTransactionManager(name+"-non-failing"); + } + + @Override + public String toString() { + return name + (isCommitted() ? " (committed) " : " (not committed)"); + } @Override public TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException { - return null; + return new TestTransactionStatus(definition); } @Override public void commit(TransactionStatus status) throws TransactionException { - commited = true; + commitTime = System.currentTimeMillis(); } @Override public void rollback(TransactionStatus status) throws TransactionException { + rollbackTime = System.currentTimeMillis(); + } + + public boolean isCommitted() { + return commitTime!=null; + } + public boolean wasRolledBack() { + return rollbackTime!=null; + } + + public Long getCommitTime() { + return commitTime; + } + + private static class TestTransactionStatus implements TransactionStatus { + + public TestTransactionStatus(TransactionDefinition definition) { + } + + @Override + public boolean isNewTransaction() { + return false; + } + + @Override + public boolean hasSavepoint() { + return false; + } + + @Override + public void setRollbackOnly() { + + } + + @Override + public boolean isRollbackOnly() { + return false; + } + + @Override + public void flush() { + + } + + @Override + public boolean isCompleted() { + return false; + } + + @Override + public Object createSavepoint() throws TransactionException { + return null; + } + + @Override + public void rollbackToSavepoint(Object savepoint) throws TransactionException { + + } + + @Override + public void releaseSavepoint(Object savepoint) throws TransactionException { + + } + } + } + + static class TransactionManagerMatcher extends TypeSafeMatcher { + private boolean commitCheck; + + public TransactionManagerMatcher(boolean commitCheck) { + this.commitCheck = commitCheck; + } + + @Override + public boolean matchesSafely(PlatformTransactionManager platformTransactionManager) { + TestPlatformTransactionManager ptm = (TestPlatformTransactionManager) platformTransactionManager; + if (commitCheck) { + return ptm.isCommitted(); + } else { + return ptm.wasRolledBack(); + } } - public boolean isCommited() { - return commited; + @Override + public void describeTo(Description description) { + description.appendText("that a "+(commitCheck ? "committed":"rolled-back")+" TransactionManager"); + } + + @Factory + public static TransactionManagerMatcher isCommitted() { + return new TransactionManagerMatcher(true); + } + @Factory + public static TransactionManagerMatcher wasRolledback() { + return new TransactionManagerMatcher(false); } } } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/EntityPropertyValidationTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/EntityPropertyValidationTest.java index 7aefc069f..df4a183c1 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/EntityPropertyValidationTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/EntityPropertyValidationTest.java @@ -18,6 +18,7 @@ import org.springframework.data.graph.neo4j.Group; import org.springframework.data.graph.neo4j.Person; import org.springframework.data.graph.neo4j.finder.FinderFactory; import org.springframework.data.graph.neo4j.support.node.Neo4jHelper; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; @@ -29,6 +30,7 @@ import static org.junit.Assert.assertEquals; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:org/springframework/data/graph/neo4j/support/Neo4jGraphPersistenceTest-context.xml"}) +@DirtiesContext public class EntityPropertyValidationTest { protected final Log log = LogFactory.getLog(getClass()); diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/FinderTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/FinderTest.java index 0d66ebe30..6ceb688da 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/FinderTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/FinderTest.java @@ -15,6 +15,7 @@ import org.springframework.data.graph.neo4j.Person; import org.springframework.data.graph.neo4j.finder.FinderFactory; import org.springframework.data.graph.neo4j.finder.NodeFinder; import org.springframework.data.graph.neo4j.support.node.Neo4jHelper; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; @@ -27,6 +28,7 @@ import static org.junit.Assert.assertEquals; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:org/springframework/data/graph/neo4j/support/Neo4jGraphPersistenceTest-context.xml"}) +@DirtiesContext public class FinderTest { protected final Log log = LogFactory.getLog(getClass()); diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/IndexTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/IndexTest.java index 691a8974a..f330235ea 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/IndexTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/IndexTest.java @@ -18,6 +18,7 @@ import org.springframework.data.graph.neo4j.finder.FinderFactory; import org.springframework.data.graph.neo4j.finder.NodeFinder; import org.springframework.data.graph.neo4j.finder.RelationshipFinder; import org.springframework.data.graph.neo4j.support.node.Neo4jHelper; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; @@ -32,6 +33,7 @@ import static org.junit.Assert.assertNull; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:org/springframework/data/graph/neo4j/support/Neo4jGraphPersistenceTest-context.xml"}) +@DirtiesContext public class IndexTest { private static final String NAME = "name"; diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/ModificationOutsideOfTransactionTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/ModificationOutsideOfTransactionTest.java index ded46429a..36ac5d0ce 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/ModificationOutsideOfTransactionTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/ModificationOutsideOfTransactionTest.java @@ -12,6 +12,7 @@ import org.springframework.data.graph.neo4j.Person; import org.springframework.data.graph.neo4j.finder.FinderFactory; import org.springframework.data.graph.neo4j.finder.NodeFinder; import org.springframework.data.graph.neo4j.support.node.Neo4jHelper; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; @@ -21,6 +22,7 @@ import static org.springframework.data.graph.neo4j.support.HasRelationshipMatche @RunWith( SpringJUnit4ClassRunner.class ) @ContextConfiguration( locations = {"classpath:org/springframework/data/graph/neo4j/support/Neo4jGraphPersistenceTest-context.xml"} ) +@DirtiesContext public class ModificationOutsideOfTransactionTest { diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/NodeEntityRelationshipTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/NodeEntityRelationshipTest.java index d81685d22..f97fb695d 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/NodeEntityRelationshipTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/NodeEntityRelationshipTest.java @@ -16,6 +16,7 @@ import org.springframework.data.graph.neo4j.Person; import org.springframework.data.graph.neo4j.finder.FinderFactory; import org.springframework.data.graph.neo4j.finder.NodeFinder; import org.springframework.data.graph.neo4j.support.node.Neo4jHelper; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; @@ -26,6 +27,7 @@ import static org.junit.Assert.assertEquals; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:org/springframework/data/graph/neo4j/support/Neo4jGraphPersistenceTest-context.xml"}) +@DirtiesContext public class NodeEntityRelationshipTest { protected final Log log = LogFactory.getLog(getClass()); diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/NodeEntityTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/NodeEntityTest.java index 43f774059..f8bbc434d 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/NodeEntityTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/NodeEntityTest.java @@ -19,6 +19,7 @@ import org.springframework.data.graph.neo4j.finder.FinderFactory; import org.springframework.data.graph.neo4j.finder.NodeFinder; import org.springframework.data.graph.neo4j.finder.RelationshipFinder; import org.springframework.data.graph.neo4j.support.node.Neo4jHelper; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -31,6 +32,7 @@ import static org.junit.Assert.assertNull; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:org/springframework/data/graph/neo4j/support/Neo4jGraphPersistenceTest-context.xml"}) +@DirtiesContext public class NodeEntityTest { protected final Log log = LogFactory.getLog(getClass()); diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/ProjectionTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/ProjectionTest.java index 6f23da5a9..13b1b9775 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/ProjectionTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/ProjectionTest.java @@ -16,6 +16,7 @@ import org.springframework.data.graph.neo4j.Person; import org.springframework.data.graph.neo4j.finder.FinderFactory; import org.springframework.data.graph.neo4j.finder.NodeFinder; import org.springframework.data.graph.neo4j.support.node.Neo4jHelper; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -28,6 +29,7 @@ import static org.junit.Assert.assertEquals; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:org/springframework/data/graph/neo4j/support/Neo4jGraphPersistenceTest-context.xml"}) +@DirtiesContext public class ProjectionTest { protected final Log log = LogFactory.getLog(getClass()); diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/PropertyTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/PropertyTest.java index 64dcc0b44..fb9ebbfd0 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/PropertyTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/PropertyTest.java @@ -19,6 +19,7 @@ import org.springframework.data.graph.neo4j.Personality; import org.springframework.data.graph.neo4j.finder.FinderFactory; import org.springframework.data.graph.neo4j.finder.NodeFinder; import org.springframework.data.graph.neo4j.support.node.Neo4jHelper; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -32,6 +33,7 @@ import static org.junit.Assert.assertEquals; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:org/springframework/data/graph/neo4j/support/Neo4jGraphPersistenceTest-context.xml"}) +@DirtiesContext public class PropertyTest { protected final Log log = LogFactory.getLog(getClass()); diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/RelationshipEntityTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/RelationshipEntityTest.java index 0ef2247c6..96edfb3a3 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/RelationshipEntityTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/RelationshipEntityTest.java @@ -14,6 +14,7 @@ import org.springframework.data.graph.neo4j.Person; import org.springframework.data.graph.neo4j.finder.FinderFactory; import org.springframework.data.graph.neo4j.finder.NodeFinder; import org.springframework.data.graph.neo4j.support.node.Neo4jHelper; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +23,7 @@ import static org.junit.Assert.assertEquals; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:org/springframework/data/graph/neo4j/support/Neo4jGraphPersistenceTest-context.xml"}) +@DirtiesContext public class RelationshipEntityTest { protected final Log log = LogFactory.getLog(getClass()); diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/SubReferenceNodeTypeStrategyTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/SubReferenceNodeTypeStrategyTest.java index dc55ab141..d409ce625 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/SubReferenceNodeTypeStrategyTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/SubReferenceNodeTypeStrategyTest.java @@ -21,6 +21,7 @@ import org.springframework.data.graph.neo4j.Volvo; import org.springframework.data.graph.neo4j.finder.FinderFactory; import org.springframework.data.graph.neo4j.finder.NodeFinder; import org.springframework.data.graph.neo4j.support.node.Neo4jHelper; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; @@ -35,6 +36,7 @@ import static org.junit.Assert.assertEquals; */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:org/springframework/data/graph/neo4j/support/Neo4jGraphPersistenceTest-context.xml"}) +@DirtiesContext public class SubReferenceNodeTypeStrategyTest { protected final Log log = LogFactory.getLog(getClass()); diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/TraversalTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/TraversalTest.java index 2bdc14ace..89781363d 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/TraversalTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/TraversalTest.java @@ -17,6 +17,7 @@ import org.springframework.data.graph.neo4j.Person; import org.springframework.data.graph.neo4j.finder.FinderFactory; import org.springframework.data.graph.neo4j.finder.NodeFinder; import org.springframework.data.graph.neo4j.support.node.Neo4jHelper; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -31,6 +32,7 @@ import static org.junit.Assert.assertEquals; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:org/springframework/data/graph/neo4j/support/Neo4jGraphPersistenceTest-context.xml"}) +@DirtiesContext public class TraversalTest { protected final Log log = LogFactory.getLog(getClass()); diff --git a/spring-data-neo4j/src/test/resources/org/springframework/data/graph/neo4j/partial/Neo4jGraphRecommendationTest-context.xml b/spring-data-neo4j/src/test/resources/org/springframework/data/graph/neo4j/partial/Neo4jGraphRecommendationTest-context.xml index 791948877..f8bc3cfa3 100644 --- a/spring-data-neo4j/src/test/resources/org/springframework/data/graph/neo4j/partial/Neo4jGraphRecommendationTest-context.xml +++ b/spring-data-neo4j/src/test/resources/org/springframework/data/graph/neo4j/partial/Neo4jGraphRecommendationTest-context.xml @@ -99,7 +99,7 @@ - + @@ -137,21 +137,21 @@ - + + - - - + @@ -177,5 +177,7 @@ - + + +