diff --git a/spring-data-neo4j-aspects/src/main/java/org/springframework/data/neo4j/aspects/config/Neo4jAspectConfiguration.java b/spring-data-neo4j-aspects/src/main/java/org/springframework/data/neo4j/aspects/config/Neo4jAspectConfiguration.java index 8b9ed0336..fc27a479a 100644 --- a/spring-data-neo4j-aspects/src/main/java/org/springframework/data/neo4j/aspects/config/Neo4jAspectConfiguration.java +++ b/spring-data-neo4j-aspects/src/main/java/org/springframework/data/neo4j/aspects/config/Neo4jAspectConfiguration.java @@ -47,10 +47,4 @@ public class Neo4jAspectConfiguration extends Neo4jConfiguration aspect.setNodeEntityStateFactory(entityStateFactory); return aspect; } - - @Override - @PostConstruct - public void wireEntityStateFactories() throws Exception { - super.wireEntityStateFactories(); - } } diff --git a/spring-data-neo4j-cross-store/src/main/java/org/springframework/data/neo4j/cross_store/config/CrossStoreNeo4jConfiguration.java b/spring-data-neo4j-cross-store/src/main/java/org/springframework/data/neo4j/cross_store/config/CrossStoreNeo4jConfiguration.java index 9d79b7eba..9eb672050 100644 --- a/spring-data-neo4j-cross-store/src/main/java/org/springframework/data/neo4j/cross_store/config/CrossStoreNeo4jConfiguration.java +++ b/spring-data-neo4j-cross-store/src/main/java/org/springframework/data/neo4j/cross_store/config/CrossStoreNeo4jConfiguration.java @@ -30,7 +30,6 @@ import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.jta.JtaTransactionManager; -import javax.annotation.PostConstruct; import javax.persistence.EntityManagerFactory; /** @@ -57,7 +56,7 @@ public class CrossStoreNeo4jConfiguration extends Neo4jAspectConfiguration { } @Bean - protected EntityInstantiator graphEntityInstantiator() { + protected EntityInstantiator graphEntityInstantiator() throws Exception { if (isUsingCrossStorePersistence()) { return new CrossStoreNodeEntityInstantiator(new NodeEntityInstantiator(entityStateHandler()), entityManagerFactory); } else { @@ -79,14 +78,8 @@ public class CrossStoreNeo4jConfiguration extends Neo4jAspectConfiguration { @Bean public CrossStoreNodeEntityStateFactory nodeEntityStateFactory() throws Exception { - return new CrossStoreNodeEntityStateFactory(); - } - - @PostConstruct - @Override - public void wireEntityStateFactories() throws Exception { - super.wireEntityStateFactories(); - nodeEntityStateFactory().setEntityManagerFactory(entityManagerFactory); - nodeEntityStateFactory().postConstruct(); + final CrossStoreNodeEntityStateFactory nodeEntityStateFactory = new CrossStoreNodeEntityStateFactory(); + nodeEntityStateFactory.setEntityManagerFactory(entityManagerFactory); + return nodeEntityStateFactory; } } diff --git a/spring-data-neo4j-cross-store/src/main/java/org/springframework/data/neo4j/cross_store/support/node/CrossStoreNodeEntityStateFactory.java b/spring-data-neo4j-cross-store/src/main/java/org/springframework/data/neo4j/cross_store/support/node/CrossStoreNodeEntityStateFactory.java index b733172d5..6e50dd459 100644 --- a/spring-data-neo4j-cross-store/src/main/java/org/springframework/data/neo4j/cross_store/support/node/CrossStoreNodeEntityStateFactory.java +++ b/spring-data-neo4j-cross-store/src/main/java/org/springframework/data/neo4j/cross_store/support/node/CrossStoreNodeEntityStateFactory.java @@ -21,6 +21,7 @@ import org.springframework.data.neo4j.aspects.core.NodeBacked; import org.springframework.data.neo4j.core.EntityState; import org.springframework.data.neo4j.fieldaccess.DetachedEntityState; import org.springframework.data.neo4j.mapping.Neo4jPersistentEntity; +import org.springframework.data.neo4j.support.Neo4jTemplate; import org.springframework.data.neo4j.support.node.NodeEntityStateFactory; import javax.persistence.EntityManagerFactory; @@ -68,7 +69,9 @@ public class CrossStoreNodeEntityStateFactory extends NodeEntityStateFactory { this.entityManagerFactory = entityManagerFactory; } - public void postConstruct() { + @Override + public void setTemplate(Neo4jTemplate template) { + super.setTemplate(template); this.delegatingFieldAccessorFactory = new CrossStoreNodeEntityState.CrossStoreNodeDelegatingFieldAccessorFactory(template); } diff --git a/spring-data-neo4j-cross-store/src/test/resources/org/springframework/data/neo4j/partial/Neo4jGraphRecommendationTest-context.xml b/spring-data-neo4j-cross-store/src/test/resources/org/springframework/data/neo4j/partial/Neo4jGraphRecommendationTest-context.xml index c5f2091be..df8ad1756 100644 --- a/spring-data-neo4j-cross-store/src/test/resources/org/springframework/data/neo4j/partial/Neo4jGraphRecommendationTest-context.xml +++ b/spring-data-neo4j-cross-store/src/test/resources/org/springframework/data/neo4j/partial/Neo4jGraphRecommendationTest-context.xml @@ -131,7 +131,7 @@ - + diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/config/Neo4jConfiguration.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/config/Neo4jConfiguration.java index cba688f01..80905267e 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/config/Neo4jConfiguration.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/config/Neo4jConfiguration.java @@ -36,8 +36,11 @@ import org.springframework.data.neo4j.fieldaccess.DelegatingFieldAccessorFactory import org.springframework.data.neo4j.fieldaccess.Neo4jConversionServiceFactoryBean; import org.springframework.data.neo4j.fieldaccess.NodeDelegatingFieldAccessorFactory; import org.springframework.data.neo4j.fieldaccess.RelationshipDelegatingFieldAccessorFactory; -import org.springframework.data.neo4j.mapping.*; -import org.springframework.data.neo4j.support.*; +import org.springframework.data.neo4j.mapping.EntityInstantiator; +import org.springframework.data.neo4j.support.DelegatingGraphDatabase; +import org.springframework.data.neo4j.support.MappingInfrastructure; +import org.springframework.data.neo4j.support.Neo4jExceptionTranslator; +import org.springframework.data.neo4j.support.Neo4jTemplate; import org.springframework.data.neo4j.support.mapping.*; import org.springframework.data.neo4j.support.node.NodeEntityInstantiator; import org.springframework.data.neo4j.support.node.NodeEntityStateFactory; @@ -45,12 +48,10 @@ import org.springframework.data.neo4j.support.relationship.RelationshipEntityIns import org.springframework.data.neo4j.support.relationship.RelationshipEntityStateFactory; import org.springframework.data.neo4j.support.typerepresentation.ClassValueTypeInformationMapper; import org.springframework.data.neo4j.support.typerepresentation.TypeRepresentationStrategyFactory; -import org.springframework.data.neo4j.support.Neo4jExceptionTranslator; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.jta.JtaTransactionManager; import org.springframework.transaction.jta.UserTransactionAdapter; -import javax.annotation.PostConstruct; import javax.validation.Validator; import static java.util.Arrays.asList; @@ -106,6 +107,8 @@ public abstract class Neo4jConfiguration { public Neo4jTemplate neo4jTemplate() throws Exception { final Neo4jTemplate neo4jTemplate = new Neo4jTemplate(); neo4jTemplate.setInfrastructure(mappingInfrastructure()); + nodeEntityStateFactory().setTemplate(neo4jTemplate); + relationshipEntityStateFactory().setTemplate(neo4jTemplate); return neo4jTemplate; } @@ -125,7 +128,7 @@ public abstract class Neo4jConfiguration { } @Bean - public EntityStateHandler entityStateHandler() { + public EntityStateHandler entityStateHandler() throws Exception { return new EntityStateHandler(mappingContext(),graphDatabase()); } @@ -152,6 +155,7 @@ public abstract class Neo4jConfiguration { return new SourceStateTransmitter(nodeEntityStateFactory()); } + //@Scope(BeanDefinition.SCOPE_PROTOTYPE) @Bean protected ConversionService conversionService() throws Exception { return new Neo4jConversionServiceFactoryBean().getObject(); @@ -168,8 +172,12 @@ public abstract class Neo4jConfiguration { } @Bean - public Neo4jMappingContext mappingContext() { - return new Neo4jMappingContext(); + public Neo4jMappingContext mappingContext() throws Exception { + final Neo4jMappingContext mappingContext = new Neo4jMappingContext(); + nodeEntityStateFactory().setMappingContext(mappingContext); + relationshipEntityStateFactory().setMappingContext(mappingContext); + + return mappingContext; } @Bean @@ -182,28 +190,18 @@ public abstract class Neo4jConfiguration { return new NodeEntityStateFactory(); } - @PostConstruct - public void wireEntityStateFactories() throws Exception { - final NodeEntityStateFactory nodeEntityStateFactory = nodeEntityStateFactory(); - nodeEntityStateFactory.setTemplate(neo4jTemplate()); - nodeEntityStateFactory.setMappingContext(mappingContext()); - nodeEntityStateFactory.setNodeDelegatingFieldAccessorFactory(nodeDelegatingFieldAccessorFactory()); - - final RelationshipEntityStateFactory relationshipEntityStateFactory = relationshipEntityStateFactory(); - relationshipEntityStateFactory.setTemplate(neo4jTemplate()); - relationshipEntityStateFactory.setMappingContext(mappingContext()); - relationshipEntityStateFactory.setRelationshipDelegatingFieldAccessorFactory(relationshipDelegatingFieldAccessorFactory()); - - } - @Bean public DelegatingFieldAccessorFactory nodeDelegatingFieldAccessorFactory() throws Exception { - return new NodeDelegatingFieldAccessorFactory(neo4jTemplate()); + final NodeDelegatingFieldAccessorFactory nodeDelegatingFieldAccessorFactory = new NodeDelegatingFieldAccessorFactory(neo4jTemplate()); + nodeEntityStateFactory().setNodeDelegatingFieldAccessorFactory(nodeDelegatingFieldAccessorFactory); + return nodeDelegatingFieldAccessorFactory; } @Bean public DelegatingFieldAccessorFactory relationshipDelegatingFieldAccessorFactory() throws Exception { - return new RelationshipDelegatingFieldAccessorFactory(neo4jTemplate()); + final RelationshipDelegatingFieldAccessorFactory relationshipDelegatingFieldAccessorFactory = new RelationshipDelegatingFieldAccessorFactory(neo4jTemplate()); + relationshipEntityStateFactory().setRelationshipDelegatingFieldAccessorFactory(relationshipDelegatingFieldAccessorFactory); + return relationshipDelegatingFieldAccessorFactory; } @Bean(name = {"neo4jTransactionManager","transactionManager"})