From 7e25cf480cb7731e34b89f11ac98868ee66fb71f Mon Sep 17 00:00:00 2001 From: Michael Hunger Date: Sat, 9 Apr 2011 06:28:59 +0200 Subject: [PATCH] removed AbstractGraphDatabase as RestDB superclass, introduced appropriate check at GDC.transactionIsRunning, added neo4j-1.3 dependencies --- spring-data-graph-parent/pom.xml | 2 +- spring-data-neo4j-rest/pom.xml | 2 +- .../java/org/neo4j/kernel/RestConfig.java | 146 ------------------ .../graph/neo4j/rest/support/RestEntity.java | 1 + .../neo4j/rest/support/RestGraphDatabase.java | 28 +--- .../neo4j/rest/support/LocalTestServer.java | 3 +- .../rest/support/Neo4jDatabaseCleaner.java | 10 +- spring-data-neo4j/pom.xml | 2 +- .../neo4j/config/Neo4jConfiguration.java | 27 +++- .../neo4j/config/NullTransactionManager.java | 108 +++++++++++++ .../support/DelegatingGraphDatabase.java | 10 +- .../neo4j/support/GraphDatabaseContext.java | 14 +- .../TestTransactionManagerFactoryBean.java | 72 +++++++++ .../neo4j/template/Neo4jTemplateApiTest.java | 9 +- .../data/graph/neo4j/template/NeoApiTest.java | 4 +- .../Neo4jGraphPersistenceTest-context.xml | 6 +- 16 files changed, 227 insertions(+), 217 deletions(-) delete mode 100644 spring-data-neo4j-rest/src/main/java/org/neo4j/kernel/RestConfig.java create mode 100644 spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/config/NullTransactionManager.java create mode 100644 spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/config/TestTransactionManagerFactoryBean.java diff --git a/spring-data-graph-parent/pom.xml b/spring-data-graph-parent/pom.xml index 9ffb0772d..728c2483f 100644 --- a/spring-data-graph-parent/pom.xml +++ b/spring-data-graph-parent/pom.xml @@ -219,7 +219,7 @@ org.neo4j - neo4j-community + neo4j ${neo4j.version} diff --git a/spring-data-neo4j-rest/pom.xml b/spring-data-neo4j-rest/pom.xml index b795d7539..457e5fe24 100644 --- a/spring-data-neo4j-rest/pom.xml +++ b/spring-data-neo4j-rest/pom.xml @@ -52,7 +52,7 @@ org.neo4j - neo4j-community + neo4j org.neo4j.app diff --git a/spring-data-neo4j-rest/src/main/java/org/neo4j/kernel/RestConfig.java b/spring-data-neo4j-rest/src/main/java/org/neo4j/kernel/RestConfig.java deleted file mode 100644 index 08b0ed784..000000000 --- a/spring-data-neo4j-rest/src/main/java/org/neo4j/kernel/RestConfig.java +++ /dev/null @@ -1,146 +0,0 @@ -/** - * Copyright 2011 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.neo4j.kernel; - -import org.neo4j.graphdb.GraphDatabaseService; -import org.neo4j.kernel.impl.core.*; -import org.neo4j.kernel.impl.nioneo.store.FileSystemAbstraction; -import org.neo4j.kernel.impl.nioneo.store.StoreId; -import org.neo4j.kernel.impl.transaction.LockManager; -import org.neo4j.kernel.impl.transaction.TxModule; -import org.neo4j.kernel.impl.transaction.xaframework.LogBufferFactory; -import org.neo4j.kernel.impl.transaction.xaframework.TxIdGenerator; - -import javax.transaction.*; -import javax.transaction.xa.XAResource; -import java.util.Collections; -import java.util.Map; - -/** -* @author mh -* @since 23.02.11 -*/ -public class RestConfig extends Config { - public RestConfig(GraphDatabaseService graphDb, String storeDir, StoreId storeId, - Map inputParams, KernelPanicEventGenerator kpe, - TxModule txModule, LockManager lockManager, LockReleaser lockReleaser, - IdGeneratorFactory idGeneratorFactory, - TxEventSyncHookFactory txSyncHookFactory, RelationshipTypeCreator relTypeCreator, - TxIdGenerator txIdGenerator, LastCommittedTxIdSetter lastCommittedTxIdSetter, - FileSystemAbstraction fileSystem, LogBufferFactory logBufferFactory) { - super(graphDb, storeDir, storeId, - inputParams, kpe, txModule, lockManager, lockReleaser, idGeneratorFactory, txSyncHookFactory, relTypeCreator, txIdGenerator, lastCommittedTxIdSetter, fileSystem); - } - - public RestConfig(AbstractGraphDatabase restGraphDatabase) { - super(restGraphDatabase, restGraphDatabase.getStoreDir(), null, - Collections.emptyMap(),null, - new TxModule(true,null){ - @Override - public TransactionManager getTxManager() { - return new NullTransactionManager(); - } - }, - null,null, - null,null,null,null,null, - null); - } - - private static class NullTransactionManager implements TransactionManager { - private static final Transaction NULL_JAVA_TRANSACTION = new Transaction() { - @Override - public void commit() throws HeuristicMixedException, HeuristicRollbackException, RollbackException, SecurityException, SystemException { - - } - - @Override - public boolean delistResource(XAResource xaResource, int i) throws IllegalStateException, SystemException { - return false; - } - - @Override - public boolean enlistResource(XAResource xaResource) throws IllegalStateException, RollbackException, SystemException { - return false; - } - - @Override - public int getStatus() throws SystemException { - return Status.STATUS_NO_TRANSACTION; - } - - @Override - public void registerSynchronization(Synchronization synchronization) throws IllegalStateException, RollbackException, SystemException { - - } - - @Override - public void rollback() throws IllegalStateException, SystemException { - - } - - @Override - public void setRollbackOnly() throws IllegalStateException, SystemException { - - } - }; - - @Override - public void begin() throws NotSupportedException, SystemException { - - } - - @Override - public void commit() throws HeuristicMixedException, HeuristicRollbackException, IllegalStateException, RollbackException, SecurityException, SystemException { - - } - - @Override - public int getStatus() throws SystemException { - return 0; - } - - @Override - public Transaction getTransaction() throws SystemException { - return NULL_JAVA_TRANSACTION; - } - - @Override - public void resume(Transaction transaction) throws IllegalStateException, InvalidTransactionException, SystemException { - - } - - @Override - public void rollback() throws IllegalStateException, SecurityException, SystemException { - - } - - @Override - public void setRollbackOnly() throws IllegalStateException, SystemException { - - } - - @Override - public void setTransactionTimeout(int i) throws SystemException { - - } - - @Override - public Transaction suspend() throws SystemException { - return NULL_JAVA_TRANSACTION; - } - } -} \ No newline at end of file diff --git a/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/RestEntity.java b/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/RestEntity.java index dcaaa4239..8f813e47c 100644 --- a/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/RestEntity.java +++ b/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/RestEntity.java @@ -168,6 +168,7 @@ public class RestEntity implements PropertyContainer { @Override public boolean equals( Object o ) { if (o == null) return false; + if (o == this) return true; return getClass().equals( o.getClass() ) && getId() == ( (RestEntity) o ).getId(); } diff --git a/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/RestGraphDatabase.java b/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/RestGraphDatabase.java index 48da58067..a9d7a69cc 100644 --- a/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/RestGraphDatabase.java +++ b/spring-data-neo4j-rest/src/main/java/org/springframework/data/graph/neo4j/rest/support/RestGraphDatabase.java @@ -22,19 +22,15 @@ import org.neo4j.graphdb.event.KernelEventHandler; import org.neo4j.graphdb.event.TransactionEventHandler; import org.neo4j.graphdb.index.Index; import org.neo4j.graphdb.traversal.TraversalDescription; -import org.neo4j.kernel.AbstractGraphDatabase; -import org.neo4j.kernel.Config; -import org.neo4j.kernel.RestConfig; -import org.springframework.data.graph.neo4j.rest.support.index.RestIndexManager; import org.springframework.data.graph.core.GraphDatabase; import org.springframework.data.graph.core.Property; +import org.springframework.data.graph.neo4j.rest.support.index.RestIndexManager; import javax.ws.rs.core.Response.Status; -import java.io.Serializable; import java.net.URI; import java.util.Map; -public class RestGraphDatabase extends AbstractGraphDatabase implements GraphDatabase { +public class RestGraphDatabase implements GraphDatabaseService, GraphDatabase { private RestRequest restRequest; private long propertyRefetchTimeInMillis = 1000; @@ -170,24 +166,4 @@ public class RestGraphDatabase extends AbstractGraphDatabase implements GraphDat public KernelEventHandler unregisterKernelEventHandler(KernelEventHandler handler) { return handler; } - - @Override - public String getStoreDir() { - return getRestRequest().getUri().toString(); - } - - @Override - public Config getConfig() { - return new RestConfig(this); - } - - @Override - public T getManagementBean(Class type) { - return null; - } - - @Override - public boolean isReadOnly() { - return false; - } } diff --git a/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/support/LocalTestServer.java b/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/support/LocalTestServer.java index 463163d87..03afe55eb 100644 --- a/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/support/LocalTestServer.java +++ b/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/support/LocalTestServer.java @@ -16,6 +16,7 @@ package org.springframework.data.graph.neo4j.rest.support; +import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.kernel.AbstractGraphDatabase; import org.neo4j.kernel.ImpermanentGraphDatabase; import org.neo4j.server.AddressResolver; @@ -114,7 +115,7 @@ public class LocalTestServer { cleaner.cleanDb(); } - public AbstractGraphDatabase getGraphDatabase() { + public GraphDatabaseService getGraphDatabase() { return getDatabase().graph; } } diff --git a/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/support/Neo4jDatabaseCleaner.java b/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/support/Neo4jDatabaseCleaner.java index 7d6dcda4d..63a05734f 100644 --- a/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/support/Neo4jDatabaseCleaner.java +++ b/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/support/Neo4jDatabaseCleaner.java @@ -16,12 +16,8 @@ package org.springframework.data.graph.neo4j.rest.support; -import org.neo4j.graphdb.Direction; -import org.neo4j.graphdb.Node; -import org.neo4j.graphdb.Relationship; -import org.neo4j.graphdb.Transaction; +import org.neo4j.graphdb.*; import org.neo4j.graphdb.index.IndexManager; -import org.neo4j.kernel.AbstractGraphDatabase; import java.util.Arrays; import java.util.HashMap; @@ -32,9 +28,9 @@ import java.util.Map; * @since 02.03.11 */ public class Neo4jDatabaseCleaner { - private AbstractGraphDatabase graph; + private GraphDatabaseService graph; - public Neo4jDatabaseCleaner(AbstractGraphDatabase graph) { + public Neo4jDatabaseCleaner(GraphDatabaseService graph) { this.graph = graph; } diff --git a/spring-data-neo4j/pom.xml b/spring-data-neo4j/pom.xml index d12b00b12..e198c19fd 100644 --- a/spring-data-neo4j/pom.xml +++ b/spring-data-neo4j/pom.xml @@ -120,7 +120,7 @@ org.neo4j - neo4j-community + neo4j 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 1d3e3d08d..612bfc62e 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 @@ -19,6 +19,7 @@ package org.springframework.data.graph.neo4j.config; import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Relationship; +import org.neo4j.kernel.AbstractGraphDatabase; import org.neo4j.kernel.impl.transaction.SpringTransactionManager; import org.neo4j.kernel.impl.transaction.UserTransactionImpl; import org.springframework.beans.factory.annotation.Autowired; @@ -31,9 +32,9 @@ import org.springframework.data.graph.core.NodeBacked; import org.springframework.data.graph.core.RelationshipBacked; import org.springframework.data.graph.neo4j.fieldaccess.Neo4jConversionServiceFactoryBean; import org.springframework.data.graph.neo4j.fieldaccess.NodeDelegatingFieldAccessorFactory; +import org.springframework.data.graph.neo4j.repository.DirectGraphRepositoryFactory; import org.springframework.data.graph.neo4j.state.NodeEntityStateFactory; import org.springframework.data.graph.neo4j.state.RelationshipEntityStateFactory; -import org.springframework.data.graph.neo4j.repository.DirectGraphRepositoryFactory; import org.springframework.data.graph.neo4j.support.GraphDatabaseContext; import org.springframework.data.graph.neo4j.support.TypeRepresentationStrategyFactory; import org.springframework.data.graph.neo4j.support.node.Neo4jNodeBacking; @@ -47,6 +48,7 @@ import org.springframework.data.persistence.EntityInstantiator; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.jta.JtaTransactionManager; +import org.springframework.transaction.jta.UserTransactionAdapter; import javax.persistence.EntityManagerFactory; import javax.validation.Validator; @@ -177,19 +179,28 @@ public class Neo4jConfiguration { public PlatformTransactionManager transactionManager() { if (isUsingCrossStorePersistence()) { JpaTransactionManager jpaTm = new JpaTransactionManager(getEntityManagerFactory()); - JtaTransactionManager jtaTm = new JtaTransactionManager(); - jtaTm.setTransactionManager(new SpringTransactionManager(getGraphDatabaseService())); - jtaTm.setUserTransaction(new UserTransactionImpl(getGraphDatabaseService())); + JtaTransactionManager jtaTm = createJtaTransactionManager(); return new ChainedTransactionManager(jpaTm, jtaTm); } else { - PlatformTransactionManager transactionManager = new JtaTransactionManager(); - ((JtaTransactionManager)transactionManager).setTransactionManager(new SpringTransactionManager(getGraphDatabaseService())); - ((JtaTransactionManager)transactionManager).setUserTransaction(new UserTransactionImpl(getGraphDatabaseService())); - return transactionManager; + return createJtaTransactionManager(); } } + private JtaTransactionManager createJtaTransactionManager() { + JtaTransactionManager jtaTm = new JtaTransactionManager(); + final GraphDatabaseService gds = getGraphDatabaseService(); + if (gds instanceof AbstractGraphDatabase) { + jtaTm.setTransactionManager(new SpringTransactionManager(gds)); + jtaTm.setUserTransaction(new UserTransactionImpl(gds)); + } else { + final NullTransactionManager tm = new NullTransactionManager(); + jtaTm.setTransactionManager(tm); + jtaTm.setUserTransaction(new UserTransactionAdapter(tm)); + } + return jtaTm; + } + @Bean public ConfigurationCheck configurationCheck() throws Exception { return new ConfigurationCheck(graphDatabaseContext(),transactionManager()); diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/config/NullTransactionManager.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/config/NullTransactionManager.java new file mode 100644 index 000000000..a96660b74 --- /dev/null +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/config/NullTransactionManager.java @@ -0,0 +1,108 @@ +/** + * Copyright 2011 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.data.graph.neo4j.config; + +import javax.transaction.*; +import javax.transaction.xa.XAResource; + +/** +* @author mh +* @since 09.04.11 +*/ +class NullTransactionManager implements TransactionManager { + private static final Transaction NULL_JAVA_TRANSACTION = new Transaction() { + @Override + public void commit() throws HeuristicMixedException, HeuristicRollbackException, RollbackException, SecurityException, SystemException { + + } + + @Override + public boolean delistResource(XAResource xaResource, int i) throws IllegalStateException, SystemException { + return false; + } + + @Override + public boolean enlistResource(XAResource xaResource) throws IllegalStateException, RollbackException, SystemException { + return false; + } + + @Override + public int getStatus() throws SystemException { + return Status.STATUS_NO_TRANSACTION; + } + + @Override + public void registerSynchronization(Synchronization synchronization) throws IllegalStateException, RollbackException, SystemException { + + } + + @Override + public void rollback() throws IllegalStateException, SystemException { + + } + + @Override + public void setRollbackOnly() throws IllegalStateException, SystemException { + + } + }; + + @Override + public void begin() throws NotSupportedException, SystemException { + + } + + @Override + public void commit() throws HeuristicMixedException, HeuristicRollbackException, IllegalStateException, RollbackException, SecurityException, SystemException { + + } + + @Override + public int getStatus() throws SystemException { + return 0; + } + + @Override + public Transaction getTransaction() throws SystemException { + return NULL_JAVA_TRANSACTION; + } + + @Override + public void resume(Transaction transaction) throws IllegalStateException, InvalidTransactionException, SystemException { + + } + + @Override + public void rollback() throws IllegalStateException, SecurityException, SystemException { + + } + + @Override + public void setRollbackOnly() throws IllegalStateException, SystemException { + + } + + @Override + public void setTransactionTimeout(int i) throws SystemException { + + } + + @Override + public Transaction suspend() throws SystemException { + return NULL_JAVA_TRANSACTION; + } +} diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/DelegatingGraphDatabase.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/DelegatingGraphDatabase.java index cf31edb37..738f10f4b 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/DelegatingGraphDatabase.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/DelegatingGraphDatabase.java @@ -16,15 +16,11 @@ package org.springframework.data.graph.neo4j.support; -import org.neo4j.graphdb.Node; -import org.neo4j.graphdb.PropertyContainer; -import org.neo4j.graphdb.Relationship; -import org.neo4j.graphdb.RelationshipType; +import org.neo4j.graphdb.*; import org.neo4j.graphdb.index.Index; import org.neo4j.graphdb.index.IndexManager; import org.neo4j.graphdb.traversal.TraversalDescription; import org.neo4j.index.impl.lucene.LuceneIndexImplementation; -import org.neo4j.kernel.AbstractGraphDatabase; import org.neo4j.kernel.Traversal; import org.springframework.data.graph.core.GraphDatabase; import org.springframework.data.graph.core.Property; @@ -37,9 +33,9 @@ import java.util.Map; */ public class DelegatingGraphDatabase implements GraphDatabase { - protected AbstractGraphDatabase delegate; + protected GraphDatabaseService delegate; - public DelegatingGraphDatabase(final AbstractGraphDatabase delegate) { + public DelegatingGraphDatabase(final GraphDatabaseService delegate) { this.delegate = delegate; } 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 cb7297ab3..22f07954c 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 @@ -80,8 +80,12 @@ public class GraphDatabaseContext { * @return true if a transaction manager is available and a transaction is currently running */ public boolean transactionIsRunning() { + if (!(graphDatabaseService instanceof AbstractGraphDatabase)) { + return true; // assume always running tx (e.g. for REST or other remotes) + } try { - return getTxManager().getStatus() != Status.STATUS_NO_TRANSACTION; + final TransactionManager txManager = ((AbstractGraphDatabase) graphDatabaseService).getConfig().getTxModule().getTxManager(); + return txManager.getStatus() != Status.STATUS_NO_TRANSACTION; } catch (SystemException e) { log.error("Error accessing TransactionManager", e); return false; @@ -194,14 +198,6 @@ public class GraphDatabaseContext { } - - /** - * @return Neo4j Transaction manager - */ - public TransactionManager getTxManager() { - return ((AbstractGraphDatabase) graphDatabaseService).getConfig().getTxModule().getTxManager(); - } - /** * Delegates to {@link GraphDatabaseService} */ diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/config/TestTransactionManagerFactoryBean.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/config/TestTransactionManagerFactoryBean.java new file mode 100644 index 000000000..08e050416 --- /dev/null +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/config/TestTransactionManagerFactoryBean.java @@ -0,0 +1,72 @@ +/** + * Copyright 2011 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.data.graph.neo4j.config; + +import org.neo4j.graphdb.GraphDatabaseService; +import org.neo4j.kernel.AbstractGraphDatabase; +import org.neo4j.kernel.impl.transaction.SpringTransactionManager; +import org.neo4j.kernel.impl.transaction.UserTransactionImpl; +import org.springframework.beans.factory.FactoryBean; +import org.springframework.transaction.jta.JtaTransactionManager; +import org.springframework.transaction.jta.UserTransactionAdapter; + +/** + * @author mh + * @since 09.04.11 + */ +public class TestTransactionManagerFactoryBean implements FactoryBean { + private GraphDatabaseService graphDatabaseService; + private JtaTransactionManager transactionManager; + + @Override + public JtaTransactionManager getObject() throws Exception { + return transactionManager; + } + + @Override + public Class getObjectType() { + return JtaTransactionManager.class; + } + + @Override + public boolean isSingleton() { + return true; + } + + private JtaTransactionManager createJtaTransactionManager(GraphDatabaseService gds) { + JtaTransactionManager jtaTm = new JtaTransactionManager(); + if (gds instanceof AbstractGraphDatabase) { + jtaTm.setTransactionManager(new SpringTransactionManager(gds)); + jtaTm.setUserTransaction(new UserTransactionImpl(gds)); + } else { + final NullTransactionManager tm = new NullTransactionManager(); + jtaTm.setTransactionManager(tm); + jtaTm.setUserTransaction(new UserTransactionAdapter(tm)); + } + return jtaTm; + } + + public GraphDatabaseService getGraphDatabaseService() { + return graphDatabaseService; + } + + public void setGraphDatabaseService(GraphDatabaseService graphDatabaseService) { + this.graphDatabaseService = graphDatabaseService; + transactionManager = createJtaTransactionManager(graphDatabaseService); + } + +} diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/template/Neo4jTemplateApiTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/template/Neo4jTemplateApiTest.java index aa3169e53..c9d65a3ae 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/template/Neo4jTemplateApiTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/template/Neo4jTemplateApiTest.java @@ -22,13 +22,8 @@ import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import org.neo4j.graphdb.Direction; -import org.neo4j.graphdb.DynamicRelationshipType; -import org.neo4j.graphdb.Node; -import org.neo4j.graphdb.Path; -import org.neo4j.graphdb.Relationship; +import org.neo4j.graphdb.*; import org.neo4j.graphdb.index.Index; -import org.neo4j.kernel.AbstractGraphDatabase; import org.neo4j.kernel.ImpermanentGraphDatabase; import org.neo4j.kernel.Traversal; import org.neo4j.kernel.impl.transaction.SpringTransactionManager; @@ -59,7 +54,7 @@ public class Neo4jTemplateApiTest { private Relationship relationship1; private Node node1; private static PlatformTransactionManager transactionManager; - private static AbstractGraphDatabase graphDatabaseService; + private static GraphDatabaseService graphDatabaseService; diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/template/NeoApiTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/template/NeoApiTest.java index ebed53532..b59f6f6b3 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/template/NeoApiTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/template/NeoApiTest.java @@ -18,7 +18,7 @@ package org.springframework.data.graph.neo4j.template; import org.junit.After; import org.junit.Before; -import org.neo4j.kernel.AbstractGraphDatabase; +import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.kernel.ImpermanentGraphDatabase; import org.neo4j.kernel.impl.transaction.SpringTransactionManager; import org.springframework.data.graph.core.GraphDatabase; @@ -30,7 +30,7 @@ public abstract class NeoApiTest { protected GraphDatabase graph; protected Neo4jTemplate template; protected PlatformTransactionManager transactionManager; - private AbstractGraphDatabase graphDatabaseService; + private GraphDatabaseService graphDatabaseService; @Before diff --git a/spring-data-neo4j/src/test/resources/org/springframework/data/graph/neo4j/support/Neo4jGraphPersistenceTest-context.xml b/spring-data-neo4j/src/test/resources/org/springframework/data/graph/neo4j/support/Neo4jGraphPersistenceTest-context.xml index b107a15e5..23f864422 100644 --- a/spring-data-neo4j/src/test/resources/org/springframework/data/graph/neo4j/support/Neo4jGraphPersistenceTest-context.xml +++ b/spring-data-neo4j/src/test/resources/org/springframework/data/graph/neo4j/support/Neo4jGraphPersistenceTest-context.xml @@ -129,7 +129,7 @@ - + + + +