diff --git a/pom.xml b/pom.xml
index 77a175752..f5d07710e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,6 +13,7 @@
spring-data-neo4j-parent
spring-data-neo4j
spring-data-neo4j-rest
+ spring-data-neo4j-tx
spring-data-neo4j-aspects
spring-data-neo4j-cross-store
diff --git a/spring-data-neo4j-cross-store/pom.xml b/spring-data-neo4j-cross-store/pom.xml
index 016afd36e..976394abc 100644
--- a/spring-data-neo4j-cross-store/pom.xml
+++ b/spring-data-neo4j-cross-store/pom.xml
@@ -40,6 +40,10 @@
org.springframework.data
spring-data-neo4j-aspects
+
+ org.springframework.data
+ spring-data-neo4j-tx
+
org.springframework.data
spring-data-neo4j
diff --git a/spring-data-neo4j-parent/pom.xml b/spring-data-neo4j-parent/pom.xml
index 4f7caf981..8c788b733 100644
--- a/spring-data-neo4j-parent/pom.xml
+++ b/spring-data-neo4j-parent/pom.xml
@@ -293,6 +293,11 @@
spring-data-neo4j-aspects
${project.version}
+
+ org.springframework.data
+ spring-data-neo4j-tx
+ ${project.version}
+
@@ -300,12 +305,14 @@
slf4j-api
${org.slf4j.version}
compile
+ true
org.slf4j
jcl-over-slf4j
${org.slf4j.version}
runtime
+ true
org.slf4j
@@ -493,18 +500,6 @@
1.6
provided
-
-
- org.ow2.jotm
- jotm-core
- 2.1.9
-
-
- org.ow2.spec.ee
- ow2-connector-1.5-spec
- 1.0-M1
-
-
diff --git a/spring-data-neo4j-tx/pom.xml b/spring-data-neo4j-tx/pom.xml
new file mode 100644
index 000000000..2c1b4a683
--- /dev/null
+++ b/spring-data-neo4j-tx/pom.xml
@@ -0,0 +1,176 @@
+
+ 4.0.0
+
+ org.springframework.data
+ spring-data-neo4j-parent
+ 2.1.0.BUILD-SNAPSHOT
+ ../spring-data-neo4j-parent/pom.xml
+
+ spring-data-neo4j-tx
+ jar
+ Neo4j Spring XA Transaction Integration
+
+ http://neo4j.org
+
+
+
+ org.springframework
+ spring-beans
+
+
+ org.springframework
+ spring-tx
+
+
+ org.springframework
+ spring-aspects
+
+
+ org.neo4j
+ neo4j-kernel
+ ${neo4j.version}
+
+
+ org.neo4j
+ neo4j-lucene-index
+ ${neo4j.version}
+ test
+
+
+ org.neo4j
+ neo4j-kernel
+ ${neo4j.version}
+ test
+ test-jar
+
+
+
+ org.ow2.jotm
+ jotm-core
+ 2.1.9
+ true
+
+
+ org.ow2.spec.ee
+ ow2-connector-1.5-spec
+ 1.0-M1
+ true
+
+
+
+ junit
+ junit
+
+
+
+ org.aspectj
+ aspectjrt
+ ${aspectj.version}
+
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+ log4j
+ log4j
+
+
+
+ cglib
+ cglib
+ 2.2
+
+
+
+
+ org.hibernate.javax.persistence
+ hibernate-jpa-2.0-api
+ 1.0.0.Final
+ true
+ compile
+
+
+
+
+
+
+ org.codehaus.mojo
+ aspectj-maven-plugin
+ 1.2
+
+
+ org.aspectj
+ aspectjrt
+ ${aspectj.version}
+
+
+ org.aspectj
+ aspectjtools
+ ${aspectj.version}
+
+
+
+
+
+
+
+ org.springframework
+ spring-aspects
+
+
+
+ 1.6
+ 1.6
+
+
+
+ default-compile
+
+ compile
+
+
+
+ test-compile
+
+ test-compile
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-eclipse-plugin
+ 2.8
+
+
+ 1.5
+
+ org.eclipse.ajdt.ui.ajnature
+ org.eclipse.jdt.core.javanature
+ org.springframework.ide.eclipse.core.springnature
+
+
+
+
+
+
diff --git a/spring-data-neo4j-tx/src/META-INF/MANIFEST.MF b/spring-data-neo4j-tx/src/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..254272e1c
--- /dev/null
+++ b/spring-data-neo4j-tx/src/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/transaction/ChainedTransactionManager.java b/spring-data-neo4j-tx/src/main/java/org/springframework/data/neo4j/transaction/ChainedTransactionManager.java
similarity index 100%
rename from spring-data-neo4j/src/main/java/org/springframework/data/neo4j/transaction/ChainedTransactionManager.java
rename to spring-data-neo4j-tx/src/main/java/org/springframework/data/neo4j/transaction/ChainedTransactionManager.java
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/transaction/DefaultSynchronizationManager.java b/spring-data-neo4j-tx/src/main/java/org/springframework/data/neo4j/transaction/DefaultSynchronizationManager.java
similarity index 100%
rename from spring-data-neo4j/src/main/java/org/springframework/data/neo4j/transaction/DefaultSynchronizationManager.java
rename to spring-data-neo4j-tx/src/main/java/org/springframework/data/neo4j/transaction/DefaultSynchronizationManager.java
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/transaction/JotmFactoryBean.java b/spring-data-neo4j-tx/src/main/java/org/springframework/data/neo4j/transaction/JotmFactoryBean.java
similarity index 100%
rename from spring-data-neo4j/src/main/java/org/springframework/data/neo4j/transaction/JotmFactoryBean.java
rename to spring-data-neo4j-tx/src/main/java/org/springframework/data/neo4j/transaction/JotmFactoryBean.java
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/transaction/MultiTransactionStatus.java b/spring-data-neo4j-tx/src/main/java/org/springframework/data/neo4j/transaction/MultiTransactionStatus.java
similarity index 100%
rename from spring-data-neo4j/src/main/java/org/springframework/data/neo4j/transaction/MultiTransactionStatus.java
rename to spring-data-neo4j-tx/src/main/java/org/springframework/data/neo4j/transaction/MultiTransactionStatus.java
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/transaction/Neo4jTransactional.java b/spring-data-neo4j-tx/src/main/java/org/springframework/data/neo4j/transaction/Neo4jTransactional.java
similarity index 100%
rename from spring-data-neo4j/src/main/java/org/springframework/data/neo4j/transaction/Neo4jTransactional.java
rename to spring-data-neo4j-tx/src/main/java/org/springframework/data/neo4j/transaction/Neo4jTransactional.java
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/transaction/SpringProvider.java b/spring-data-neo4j-tx/src/main/java/org/springframework/data/neo4j/transaction/SpringProvider.java
similarity index 100%
rename from spring-data-neo4j/src/main/java/org/springframework/data/neo4j/transaction/SpringProvider.java
rename to spring-data-neo4j-tx/src/main/java/org/springframework/data/neo4j/transaction/SpringProvider.java
diff --git a/spring-data-neo4j/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
similarity index 78%
rename from spring-data-neo4j/src/main/java/org/springframework/data/neo4j/transaction/SpringServiceImpl.java
rename to spring-data-neo4j-tx/src/main/java/org/springframework/data/neo4j/transaction/SpringServiceImpl.java
index d7dd8a4c4..b2995d21a 100644
--- a/spring-data-neo4j/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
@@ -17,9 +17,9 @@
package org.springframework.data.neo4j.transaction;
import org.neo4j.kernel.impl.transaction.AbstractTransactionManager;
-import org.neo4j.kernel.impl.transaction.XaDataSourceManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
+import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.jta.JtaTransactionManager;
import javax.transaction.*;
@@ -30,8 +30,7 @@ import javax.transaction.*;
@Configurable
class SpringServiceImpl extends AbstractTransactionManager
{
- @Autowired
- private JtaTransactionManager jtaTransactionManager;
+ private PlatformTransactionManager transactionManager;
private TransactionManager delegate;
@@ -41,7 +40,11 @@ class SpringServiceImpl extends AbstractTransactionManager
@Override
public void init() throws Throwable {
- delegate = jtaTransactionManager.getTransactionManager();
+ if (transactionManager instanceof JtaTransactionManager) {
+ delegate = ((JtaTransactionManager) transactionManager).getTransactionManager();
+ } else {
+ throw new IllegalStateException("Injected transaction manager is not of type JtaTransactionManager but "+ transactionManager.getClass().getName());
+ }
}
@Override
@@ -108,4 +111,13 @@ class SpringServiceImpl extends AbstractTransactionManager
{
// Currently a no-op
}
+
+ public PlatformTransactionManager getTransactionManager() {
+ return transactionManager;
+ }
+
+ @Autowired
+ public void setTransactionManager(PlatformTransactionManager transactionManager) {
+ this.transactionManager = transactionManager;
+ }
}
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/transaction/SynchronizationManager.java b/spring-data-neo4j-tx/src/main/java/org/springframework/data/neo4j/transaction/SynchronizationManager.java
similarity index 100%
rename from spring-data-neo4j/src/main/java/org/springframework/data/neo4j/transaction/SynchronizationManager.java
rename to spring-data-neo4j-tx/src/main/java/org/springframework/data/neo4j/transaction/SynchronizationManager.java
diff --git a/spring-data-neo4j/src/main/resources/META-INF/services/org.neo4j.kernel.impl.transaction.TransactionManagerProvider b/spring-data-neo4j-tx/src/main/resources/META-INF/services/org.neo4j.kernel.impl.transaction.TransactionManagerProvider
similarity index 100%
rename from spring-data-neo4j/src/main/resources/META-INF/services/org.neo4j.kernel.impl.transaction.TransactionManagerProvider
rename to spring-data-neo4j-tx/src/main/resources/META-INF/services/org.neo4j.kernel.impl.transaction.TransactionManagerProvider
diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/transaction/ChainedTransactionManagerTest.java b/spring-data-neo4j-tx/src/test/java/org/springframework/data/neo4j/transaction/ChainedTransactionManagerTest.java
similarity index 100%
rename from spring-data-neo4j/src/test/java/org/springframework/data/neo4j/transaction/ChainedTransactionManagerTest.java
rename to spring-data-neo4j-tx/src/test/java/org/springframework/data/neo4j/transaction/ChainedTransactionManagerTest.java
diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/transaction/JOTMIntegrationTest.java b/spring-data-neo4j-tx/src/test/java/org/springframework/data/neo4j/transaction/JOTMIntegrationTest.java
similarity index 89%
rename from spring-data-neo4j/src/test/java/org/springframework/data/neo4j/transaction/JOTMIntegrationTest.java
rename to spring-data-neo4j-tx/src/test/java/org/springframework/data/neo4j/transaction/JOTMIntegrationTest.java
index ed293ae15..40e0f660b 100644
--- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/transaction/JOTMIntegrationTest.java
+++ b/spring-data-neo4j-tx/src/test/java/org/springframework/data/neo4j/transaction/JOTMIntegrationTest.java
@@ -17,8 +17,8 @@
package org.springframework.data.neo4j.transaction;
import org.junit.After;
+import org.junit.Assert;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
@@ -27,7 +27,6 @@ import org.neo4j.kernel.AbstractGraphDatabase;
import org.neo4j.kernel.configuration.Config;
import org.objectweb.jotm.Current;
import org.springframework.context.support.ClassPathXmlApplicationContext;
-import org.springframework.data.neo4j.support.node.Neo4jHelper;
import org.springframework.transaction.jta.JtaTransactionManager;
import org.springframework.transaction.jta.ManagedTransactionAdapter;
@@ -43,7 +42,6 @@ import static org.junit.Assert.assertNotNull;
* @since 21.02.11
*/
-@Ignore("TODO")
public class JOTMIntegrationTest {
private ClassPathXmlApplicationContext ctx;
private GraphDatabaseService gds;
@@ -52,7 +50,6 @@ public class JOTMIntegrationTest {
public void setUp() throws Exception {
ctx = new ClassPathXmlApplicationContext("classpath:spring-tx-text-context.xml");
gds = ctx.getBean(GraphDatabaseService.class);
- Neo4jHelper.cleanDb(gds);
}
@After
@@ -72,11 +69,11 @@ public class JOTMIntegrationTest {
transaction.finish();
}
Node readBackOutsideOfTx = gds.getNodeById(node.getId());
- assertEquals(node, readBackOutsideOfTx);
+ Assert.assertEquals(node, readBackOutsideOfTx);
try {
transaction = gds.beginTx();
Node readBackInsideOfTx = gds.getNodeById(node.getId());
- assertEquals(node, readBackInsideOfTx);
+ Assert.assertEquals(node, readBackInsideOfTx);
transaction.success();
} finally {
transaction.finish();
@@ -95,7 +92,7 @@ public class JOTMIntegrationTest {
transaction.finish();
}
Node retrievedNode = gds.index().forNodes("node").get("name", "value").getSingle();
- assertEquals(node,retrievedNode);
+ Assert.assertEquals(node, retrievedNode);
}
@Test(expected = NotFoundException.class)
@@ -115,12 +112,12 @@ public class JOTMIntegrationTest {
@Test
public void databaseConfiguredWithSpringJtaShouldUseJtaTransactionManager() throws SystemException, NotSupportedException {
final Config config = ((AbstractGraphDatabase) gds).getConfig();
- assertEquals("spring-jta", config.getParams().get(Config.TXMANAGER_IMPLEMENTATION));
+ Assert.assertEquals("spring-jta", config.getParams().get(Config.TXMANAGER_IMPLEMENTATION));
JtaTransactionManager tm = ctx.getBean("transactionManager", JtaTransactionManager.class);
Transaction transaction = tm.createTransaction("jotm", 1000);
- assertEquals(ManagedTransactionAdapter.class, transaction.getClass());
+ Assert.assertEquals(ManagedTransactionAdapter.class, transaction.getClass());
assertEquals(Current.class, ((ManagedTransactionAdapter) transaction).getTransactionManager().getClass());
}
}
diff --git a/spring-data-neo4j-tx/src/test/resources/spring-tx-text-context.xml b/spring-data-neo4j-tx/src/test/resources/spring-tx-text-context.xml
new file mode 100644
index 000000000..e695e597b
--- /dev/null
+++ b/spring-data-neo4j-tx/src/test/resources/spring-tx-text-context.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-data-neo4j-tx/template.mf b/spring-data-neo4j-tx/template.mf
new file mode 100644
index 000000000..2886da95b
--- /dev/null
+++ b/spring-data-neo4j-tx/template.mf
@@ -0,0 +1,26 @@
+Bundle-SymbolicName: org.springframework.data.neo4j.transaction
+Bundle-Name: Neo4j Spring XA Transaction Integration
+Bundle-Vendor: SpringSource
+Bundle-ManifestVersion: 2
+Import-Template:
+ org.springframework.beans.*;version="[3.0.0, 4.0.0)",
+ org.springframework.context.*;version="[3.0.0, 4.0.0)",
+ org.springframework.core.*;version="[3.0.0, 4.0.0)",
+ org.springframework.stereotype.*;version="[3.0.0, 4.0.0)",
+ org.springframework.transaction.*;version="[3.0.0, 4.0.0)",
+ org.springframework.util.*;version="[3.0.0, 4.0.0)",
+ org.neo4j.*;version="0",
+ org.aspectj.*;version="[1.6.5, 2.0.0)",
+ org.apache.commons.configuration.*;version="0",
+ org.objectweb.jotm.*;version="0",
+ org.apache.lucene.*;version="0",
+ org.slf4j.*;version="0",
+ javax.persistence.*;version="[1.0.0, 3.0.0)";resolution:=optional,
+ javax.transaction.*;version="[1.0.1, 2.0.0)";resolution:=optional,
+ javax.naming.*;version="[1.0.1, 2.0.0)";resolution:=optional
+Import-Package:
+ sun.reflect;version="0";resolution:=optional,
+ net.sf.cglib.proxy;version="[2.2.0,3.0.0)",
+ net.sf.cglib.core;version="[2.2.0,3.0.0)",
+ net.sf.cglib.reflect;version="[2.2.0,3.0.0)"
+DynamicImport-Package: *
\ No newline at end of file
diff --git a/spring-data-neo4j/pom.xml b/spring-data-neo4j/pom.xml
index 8d8c131ab..2468883dc 100644
--- a/spring-data-neo4j/pom.xml
+++ b/spring-data-neo4j/pom.xml
@@ -38,17 +38,6 @@
spring-data-commons-core
-
- org.ow2.jotm
- jotm-core
- provided
-
-
- org.ow2.spec.ee
- ow2-connector-1.5-spec
- provided
-
-
org.slf4j
@@ -222,6 +211,7 @@
org.hibernate.javax.persistence
hibernate-jpa-2.0-api
1.0.0.Final
+ true
diff --git a/spring-data-neo4j/src/test/resources/spring-tx-text-context.xml b/spring-data-neo4j/src/test/resources/spring-tx-text-context.xml
deleted file mode 100644
index 6ccf613dd..000000000
--- a/spring-data-neo4j/src/test/resources/spring-tx-text-context.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file