diff --git a/pom.xml b/pom.xml
index 595b4acca..f20ecd001 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-neo4j-parent
- 2.4.0.BUILD-SNAPSHOT
+ 3.0.0.BUILD-SNAPSHOT
pom
Spring Data Neo4j - Parent
@@ -34,10 +34,10 @@
spring-data-neo4j
1.7.0.BUILD-SNAPSHOT
- 1.9.4
+ 2.0.0-M05
- 0.11-neo4j-1.9
- 0.6-neo4j-1.9
+ 0.12-neo4j-2.0.0-SNAPSHOT
+ 0.7-neo4j-2.0.0-SNAPSHOT
1.2
1.5
1.5
diff --git a/spring-data-neo4j-aspects/pom.xml b/spring-data-neo4j-aspects/pom.xml
index c81be1170..a1001fdf7 100644
--- a/spring-data-neo4j-aspects/pom.xml
+++ b/spring-data-neo4j-aspects/pom.xml
@@ -11,7 +11,7 @@
org.springframework.data
spring-data-neo4j-parent
- 2.4.0.BUILD-SNAPSHOT
+ 3.0.0.BUILD-SNAPSHOT
../pom.xml
@@ -97,12 +97,12 @@
org.springframework.data
spring-data-neo4j
- 2.4.0.BUILD-SNAPSHOT
+ 3.0.0.BUILD-SNAPSHOT
org.springframework.data
spring-data-neo4j
- 2.4.0.BUILD-SNAPSHOT
+ 3.0.0.BUILD-SNAPSHOT
test-jar
test
@@ -148,7 +148,7 @@
-
+
com.tinkerpop.blueprints
blueprints-core
@@ -174,14 +174,6 @@
true
-
- com.tinkerpop.gremlin
- gremlin-groovy
- ${gremlin.version}
- true
- test
-
-
diff --git a/spring-data-neo4j-aspects/src/test/java/org/springframework/data/neo4j/aspects/support/typerepresentation/SubReferenceNodeTypeRepresentationStrategyTests.java b/spring-data-neo4j-aspects/src/test/java/org/springframework/data/neo4j/aspects/support/typerepresentation/SubReferenceNodeTypeRepresentationStrategyTests.java
index 0e13aa8a2..1af327fd1 100644
--- a/spring-data-neo4j-aspects/src/test/java/org/springframework/data/neo4j/aspects/support/typerepresentation/SubReferenceNodeTypeRepresentationStrategyTests.java
+++ b/spring-data-neo4j-aspects/src/test/java/org/springframework/data/neo4j/aspects/support/typerepresentation/SubReferenceNodeTypeRepresentationStrategyTests.java
@@ -31,9 +31,11 @@ import org.springframework.data.neo4j.aspects.Person;
import org.springframework.data.neo4j.aspects.Toyota;
import org.springframework.data.neo4j.aspects.Volvo;
import org.springframework.data.neo4j.aspects.support.EntityTestBase;
+import org.springframework.data.neo4j.core.GraphDatabase;
import org.springframework.data.neo4j.repository.GraphRepository;
import org.springframework.data.neo4j.support.mapping.EntityStateHandler;
import org.springframework.data.neo4j.support.typerepresentation.SubReferenceNodeTypeRepresentationStrategy;
+import org.springframework.data.neo4j.template.GraphCallback;
import org.springframework.test.context.CleanContextCacheTestExecutionListener;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestExecutionListeners;
@@ -82,6 +84,7 @@ public class SubReferenceNodeTypeRepresentationStrategyTests extends EntityTestB
assertEquals("one thing has been created", 2, typeNode.getProperty(SubReferenceNodeTypeRepresentationStrategy.SUBREFERENCE_NODE_COUNTER_KEY));
}
@Test(expected = IllegalArgumentException.class)
+ @Transactional
public void gettingTypeFromNonTypeNodeShouldThrowAnDescriptiveException() throws Exception {
Node referenceNode = neo4jTemplate.getReferenceNode();
nodeTypeRepresentationStrategy.readAliasFrom(referenceNode);
@@ -219,12 +222,21 @@ public class SubReferenceNodeTypeRepresentationStrategyTests extends EntityTestB
@Test
public void testSaveTwice() throws Exception {
- Thing thing = new Thing();
- thing.setName("Foo");
- thing = neo4jTemplate.save(thing);
- thing.setName("Bar");
- thing = neo4jTemplate.save(thing);
- neo4jTemplate.findOne(thing.getNodeId(),Thing.class);
+ final Thing thing = neo4jTemplate.exec(new GraphCallback() {
+
+ public Thing doWithGraph(GraphDatabase graph) throws Exception {
+ Thing thing = new Thing();
+ thing.setName("Foo");
+ return neo4jTemplate.save(thing);
+ }
+ });
+ neo4jTemplate.exec(new GraphCallback.WithoutResult() {
+ public void doWithGraphWithoutResult(GraphDatabase graph) throws Exception {
+ thing.setName("Bar");
+ Thing found = neo4jTemplate.save(thing);
+ neo4jTemplate.findOne(found.getNodeId(),Thing.class);
+ }
+ });
}
@Test
diff --git a/spring-data-neo4j-cross-store/pom.xml b/spring-data-neo4j-cross-store/pom.xml
index 8d7a55b03..bd2ec0030 100644
--- a/spring-data-neo4j-cross-store/pom.xml
+++ b/spring-data-neo4j-cross-store/pom.xml
@@ -6,7 +6,7 @@
org.springframework.data
spring-data-neo4j-parent
- 2.4.0.BUILD-SNAPSHOT
+ 3.0.0.BUILD-SNAPSHOT
../pom.xml
@@ -52,25 +52,25 @@
org.springframework.data
spring-data-neo4j-aspects
- 2.4.0.BUILD-SNAPSHOT
+ 3.0.0.BUILD-SNAPSHOT
org.springframework.data
spring-data-neo4j-tx
- 2.4.0.BUILD-SNAPSHOT
+ 3.0.0.BUILD-SNAPSHOT
org.springframework.data
spring-data-neo4j
- 2.4.0.BUILD-SNAPSHOT
+ 3.0.0.BUILD-SNAPSHOT
org.springframework.data
spring-data-neo4j
test-jar
test
- 2.4.0.BUILD-SNAPSHOT
+ 3.0.0.BUILD-SNAPSHOT
diff --git a/spring-data-neo4j-distribution/pom.xml b/spring-data-neo4j-distribution/pom.xml
index 0c760114c..099007df3 100644
--- a/spring-data-neo4j-distribution/pom.xml
+++ b/spring-data-neo4j-distribution/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-neo4j-distribution
- 2.4.0.BUILD-SNAPSHOT
+ 3.0.0.BUILD-SNAPSHOT
pom
@@ -15,7 +15,7 @@
org.springframework.data
spring-data-neo4j-parent
- 2.4.0.BUILD-SNAPSHOT
+ 3.0.0.BUILD-SNAPSHOT
../pom.xml
diff --git a/spring-data-neo4j-rest/pom.xml b/spring-data-neo4j-rest/pom.xml
index d00f71880..dc39a0177 100644
--- a/spring-data-neo4j-rest/pom.xml
+++ b/spring-data-neo4j-rest/pom.xml
@@ -7,19 +7,19 @@
Spring Data Neo4j - Rest Binding
pring Data Neo4j Wrapper for the Neo4j REST API, provides a Graph Database proxy for the remote invocation.
- 2.4.0.BUILD-SNAPSHOT
+ 3.0.0.BUILD-SNAPSHOT
org.springframework.data
spring-data-neo4j-parent
- 2.4.0.BUILD-SNAPSHOT
+ 3.0.0.BUILD-SNAPSHOT
../pom.xml
1.0.0.GA
1.4
- 1.9
+ 2.0-SNAPSHOT
@@ -84,7 +84,7 @@
org.springframework.data
spring-data-neo4j
- 2.4.0.BUILD-SNAPSHOT
+ 3.0.0.BUILD-SNAPSHOT
org.neo4j
@@ -127,7 +127,7 @@
org.neo4j.server.plugin
neo4j-gremlin-plugin
- ${neo4j.version}
+ 1.9.2
true
test
@@ -248,14 +248,14 @@
org.springframework.data
spring-data-neo4j-aspects
- 2.4.0.BUILD-SNAPSHOT
+ 3.0.0.BUILD-SNAPSHOT
test
org.springframework.data
spring-data-neo4j
- 2.4.0.BUILD-SNAPSHOT
+ 3.0.0.BUILD-SNAPSHOT
test
test-jar
@@ -263,7 +263,7 @@
org.springframework.data
spring-data-neo4j-aspects
- 2.4.0.BUILD-SNAPSHOT
+ 3.0.0.BUILD-SNAPSHOT
test
test-jar
diff --git a/spring-data-neo4j-rest/src/test/java/org/springframework/data/neo4j/rest/support/SpringPluginInitializerTests.java b/spring-data-neo4j-rest/src/test/java/org/springframework/data/neo4j/rest/support/SpringPluginInitializerTests.java
index 7651fc285..a0d9a0cf7 100644
--- a/spring-data-neo4j-rest/src/test/java/org/springframework/data/neo4j/rest/support/SpringPluginInitializerTests.java
+++ b/spring-data-neo4j-rest/src/test/java/org/springframework/data/neo4j/rest/support/SpringPluginInitializerTests.java
@@ -70,10 +70,6 @@ public class SpringPluginInitializerTests extends SpringPluginInitializer implem
public void setUp() throws Exception {
ImpermanentGraphDatabase db = new ImpermanentGraphDatabase();
final ServerConfigurator configurator = new ServerConfigurator(db) {
- @Override
- public Set getThirdpartyJaxRsClasses() {
- return Collections.singleton(new ThirdPartyJaxRsPackage("org.springframework.data.neo4j.rest.support","/test"));
- }
@Override
public Set getThirdpartyJaxRsPackages() {
return Collections.singleton(new ThirdPartyJaxRsPackage("org.springframework.data.neo4j.rest.support","/test"));
diff --git a/spring-data-neo4j-tx/pom.xml b/spring-data-neo4j-tx/pom.xml
index 511704c7a..8a48f589c 100644
--- a/spring-data-neo4j-tx/pom.xml
+++ b/spring-data-neo4j-tx/pom.xml
@@ -7,12 +7,12 @@
Spring Data Neo4j - Transactions
External transaction manager support for Spring Data Neo4j
- 2.4.0.BUILD-SNAPSHOT
+ 3.0.0.BUILD-SNAPSHOT
org.springframework.data
spring-data-neo4j-parent
- 2.4.0.BUILD-SNAPSHOT
+ 3.0.0.BUILD-SNAPSHOT
../pom.xml
diff --git a/spring-data-neo4j-tx/src/main/java/org/springframework/data/neo4j/transaction/SpringServiceImpl.java b/spring-data-neo4j-tx/src/main/java/org/springframework/data/neo4j/transaction/SpringServiceImpl.java
index 73b388a6f..5b3bc7876 100644
--- a/spring-data-neo4j-tx/src/main/java/org/springframework/data/neo4j/transaction/SpringServiceImpl.java
+++ b/spring-data-neo4j-tx/src/main/java/org/springframework/data/neo4j/transaction/SpringServiceImpl.java
@@ -16,6 +16,8 @@
package org.springframework.data.neo4j.transaction;
+import org.neo4j.kernel.api.KernelAPI;
+import org.neo4j.kernel.api.KernelTransaction;
import org.neo4j.kernel.impl.core.TransactionState;
import org.neo4j.kernel.impl.transaction.AbstractTransactionManager;
import org.neo4j.kernel.impl.transaction.TransactionStateFactory;
@@ -25,6 +27,7 @@ import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.jta.JtaTransactionManager;
import javax.transaction.*;
+import java.util.HashMap;
import java.util.Map;
import java.util.WeakHashMap;
@@ -39,7 +42,9 @@ class SpringServiceImpl extends AbstractTransactionManager
private TransactionManager delegate;
private final Map states = new WeakHashMap();
+ private final Map kernelTransactions = new WeakHashMap();
private final TransactionStateFactory stateFactory;
+ private KernelAPI kernelAPI;
SpringServiceImpl(TransactionStateFactory stateFactory)
{
@@ -92,6 +97,7 @@ class SpringServiceImpl extends AbstractTransactionManager
delegate.begin();
Transaction tx = getTransaction();
states.put(tx, stateFactory.create(tx));
+ kernelTransactions.put( tx, kernelAPI.newTransaction() );
}
public void commit() throws RollbackException, HeuristicMixedException,
@@ -156,4 +162,24 @@ class SpringServiceImpl extends AbstractTransactionManager
public void setTransactionManager(PlatformTransactionManager transactionManager) {
this.transactionManager = transactionManager;
}
+
+ @Override
+ public void setKernel(KernelAPI kernelAPI) {
+ this.kernelAPI = kernelAPI;
+ }
+
+ @Override
+ public KernelTransaction getKernelTransaction()
+ {
+ Transaction transaction;
+ try
+ {
+ transaction = getTransaction();
+ }
+ catch ( SystemException e )
+ {
+ return null;
+ }
+ return kernelTransactions.get( transaction );
+ }
}
diff --git a/spring-data-neo4j-tx/src/test/java/org/springframework/data/neo4j/transaction/JOTMIntegrationTests.java b/spring-data-neo4j-tx/src/test/java/org/springframework/data/neo4j/transaction/JOTMIntegrationTests.java
index 5e6463695..46e9a29f5 100644
--- a/spring-data-neo4j-tx/src/test/java/org/springframework/data/neo4j/transaction/JOTMIntegrationTests.java
+++ b/spring-data-neo4j-tx/src/test/java/org/springframework/data/neo4j/transaction/JOTMIntegrationTests.java
@@ -23,6 +23,7 @@ import org.junit.Test;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.NotFoundException;
+import org.neo4j.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.kernel.AbstractGraphDatabase;
import org.neo4j.kernel.configuration.Config;
import org.objectweb.jotm.Current;
@@ -68,8 +69,15 @@ public class JOTMIntegrationTests {
} finally {
transaction.finish();
}
- Node readBackOutsideOfTx = gds.getNodeById(node.getId());
- Assert.assertEquals(node, readBackOutsideOfTx);
+
+ transaction = gds.beginTx();
+ try {
+ Node readBackOutsideOfTx = gds.getNodeById(node.getId());
+ Assert.assertEquals(node, readBackOutsideOfTx);
+ } finally {
+ transaction.success();
+ transaction.finish();
+ }
try {
transaction = gds.beginTx();
Node readBackInsideOfTx = gds.getNodeById(node.getId());
@@ -91,8 +99,14 @@ public class JOTMIntegrationTests {
} finally {
transaction.finish();
}
- Node retrievedNode = gds.index().forNodes("node").get("name", "value").getSingle();
- Assert.assertEquals(node, retrievedNode);
+ transaction = gds.beginTx();
+ try {
+ Node retrievedNode = gds.index().forNodes("node").get("name", "value").getSingle();
+ Assert.assertEquals(node, retrievedNode);
+ } finally {
+ transaction.success();
+ transaction.finish();
+ }
}
@Test(expected = NotFoundException.class)
@@ -106,13 +120,19 @@ public class JOTMIntegrationTests {
} finally {
tx.finish();
}
- gds.getNodeById(nodeId);
+ tx = gds.beginTx();
+ try {
+ gds.getNodeById(nodeId);
+ } finally {
+ tx.success();
+ tx.finish();
+ }
}
@Test
public void databaseConfiguredWithSpringJtaShouldUseJtaTransactionManager() throws SystemException, NotSupportedException {
final Config config = ((AbstractGraphDatabase) gds).getKernelData().getConfig();
- Assert.assertEquals("spring-jta", config.getParams().get(Config.TXMANAGER_IMPLEMENTATION));
+ Assert.assertEquals("spring-jta", config.getParams().get(GraphDatabaseSettings.tx_manager_impl.name()));
JtaTransactionManager tm = ctx.getBean("transactionManager", JtaTransactionManager.class);
Transaction transaction = tm.createTransaction("jotm", 1000);
diff --git a/spring-data-neo4j/pom.xml b/spring-data-neo4j/pom.xml
index a4d660f29..60565ad14 100644
--- a/spring-data-neo4j/pom.xml
+++ b/spring-data-neo4j/pom.xml
@@ -11,7 +11,7 @@
org.springframework.data
spring-data-neo4j-parent
- 2.4.0.BUILD-SNAPSHOT
+ 3.0.0.BUILD-SNAPSHOT
../pom.xml
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/config/DataGraphBeanDefinitionParser.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/config/DataGraphBeanDefinitionParser.java
index 85f3aea43..a983cc73c 100644
--- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/config/DataGraphBeanDefinitionParser.java
+++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/config/DataGraphBeanDefinitionParser.java
@@ -16,7 +16,6 @@
package org.springframework.data.neo4j.config;
-import antlr.StringUtils;
import org.neo4j.kernel.EmbeddedGraphDatabase;
import org.springframework.beans.factory.annotation.Autowire;
import org.springframework.beans.factory.config.BeanDefinition;
@@ -29,8 +28,6 @@ import org.springframework.core.type.filter.AnnotationTypeFilter;
import org.springframework.data.annotation.Persistent;
import org.springframework.data.neo4j.annotation.NodeEntity;
import org.springframework.data.neo4j.annotation.RelationshipEntity;
-import org.springframework.data.repository.config.RepositoryBeanDefinitionParser;
-import org.springframework.data.repository.config.RepositoryConfigurationExtension;
import org.springframework.util.ClassUtils;
import org.w3c.dom.Element;
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/query/GraphRepositoryQuery.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/query/GraphRepositoryQuery.java
index db40d085d..e3355893b 100644
--- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/query/GraphRepositoryQuery.java
+++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/query/GraphRepositoryQuery.java
@@ -21,8 +21,10 @@ import org.neo4j.helpers.collection.IteratorUtil;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.data.neo4j.conversion.EndResult;
+import org.springframework.data.neo4j.core.GraphDatabase;
import org.springframework.data.neo4j.support.Neo4jTemplate;
import org.springframework.data.neo4j.support.query.QueryEngine;
+import org.springframework.data.neo4j.template.GraphCallback;
import org.springframework.data.repository.query.Parameter;
import org.springframework.data.repository.query.ParameterAccessor;
import org.springframework.data.repository.query.ParametersParameterAccessor;
@@ -74,11 +76,16 @@ abstract class GraphRepositoryQuery implements RepositoryQuery, ParameterResolve
}
@Override
- public Object execute(Object[] parameters) {
- final ParameterAccessor accessor = new ParametersParameterAccessor(queryMethod.getParameters(), parameters);
- Map params = resolveParams(accessor);
- final String queryString = createQueryWithPagingAndSorting(accessor);
- return dispatchQuery(queryString, params, accessor);
+ public Object execute(final Object[] parameters) {
+ return template.exec(new GraphCallback