DATAGRAPH-450 Updated HelloWorld example code
This commit is contained in:
committed by
Michael Hunger
parent
532aeb3189
commit
0136f45837
114
README.textile
114
README.textile
@@ -125,18 +125,26 @@ h2. Spring configuration
|
||||
* Configure Spring Data Neo4j for Neo4j in your application using the provided XML namespace:
|
||||
|
||||
<pre>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:context="http://www.springframework.org/schema/context"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:datagraph="http://www.springframework.org/schema/data/graph"
|
||||
xsi:schemaLocation="
|
||||
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
|
||||
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
|
||||
http://www.springframework.org/schema/data/graph http://www.springframework.org/schema/data/graph/datagraph-1.0.xsd
|
||||
">
|
||||
xmlns:context="http://www.springframework.org/schema/context"
|
||||
xmlns:neo4j="http://www.springframework.org/schema/data/neo4j"
|
||||
xmlns:tx="http://www.springframework.org/schema/tx"
|
||||
xsi:schemaLocation="
|
||||
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
|
||||
http://www.springframework.org/schema/data/neo4j http://www.springframework.org/schema/data/neo4j/spring-neo4j.xsd
|
||||
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
|
||||
|
||||
<context:spring-configured/>
|
||||
<context:annotation-config/>
|
||||
<datagraph:config storeDirectory="target/config-test"/>
|
||||
<context:component-scan base-package="org.springframework.data.neo4j.examples.hellograph" />
|
||||
|
||||
<neo4j:config storeDirectory="target/neo4j-db-plain"
|
||||
base-package="org.springframework.data.neo4j.examples.hellograph.domain"/>
|
||||
<neo4j:repositories base-package="org.springframework.data.neo4j.examples.hellograph.repositories"/>
|
||||
|
||||
<tx:annotation-driven />
|
||||
</beans>
|
||||
</pre>
|
||||
|
||||
@@ -148,10 +156,12 @@ h2. Graph entities
|
||||
@NodeEntity
|
||||
public class World {
|
||||
|
||||
// Uses default schema based index
|
||||
@Indexed
|
||||
private String name;
|
||||
|
||||
@Indexed( indexName = "moons" )
|
||||
// Uses legacy index mechanism
|
||||
@Indexed(indexType = IndexType.SIMPLE)
|
||||
private int moons;
|
||||
|
||||
@RelatedTo( type = "REACHABLE_BY_ROCKET", direction = Direction.BOTH, elementClass = World.class )
|
||||
@@ -179,57 +189,65 @@ public class World {
|
||||
|
||||
h2. Transactional services
|
||||
|
||||
* Create a repository or service to perform typical operations on your entities. The FinderFactory and Finder helper classes make searching easy for common use cases. The complete functionality is covered in the "reference manual":http://static.springsource.org/spring-data/data-neo4j/docs/current/reference/html/#programming-model.
|
||||
* Create a repository or service to perform typical operations on your entities. The complete functionality is covered in the "reference manual":http://static.springsource.org/spring-data/data-neo4j/docs/current/reference/html/#programming-model.
|
||||
|
||||
<pre>
|
||||
public interface WorldRepository extends GraphRepository<World>, NamedIndexRepository<World> {}
|
||||
public interface WorldRepository extends GraphRepository<World> {}
|
||||
|
||||
@Repository
|
||||
public class WorldRepositoryImpl implements WorldRepositoryExtension {
|
||||
@Service
|
||||
@Transactional
|
||||
public class GalaxyService {
|
||||
|
||||
@Autowired
|
||||
private WorldRepository worldRepository;
|
||||
@Autowired
|
||||
private WorldRepository worldRepository;
|
||||
|
||||
@Transactional
|
||||
public Collection<World> makeSomeWorlds() {
|
||||
World earth = world( "Earth", 1 );
|
||||
World mars = world( "Mars", 2 );
|
||||
mars.addRocketRouteTo( earth );
|
||||
public long getNumberOfWorlds() {
|
||||
return worldRepository.count();
|
||||
}
|
||||
|
||||
return Arrays.asList(
|
||||
world( "Mercury", 0 ), world( "Venus", 0 ), earth, mars,
|
||||
world( "Jupiter", 63 ), world( "Saturn", 62 ),
|
||||
world( "Uranus", 27 ), world( "Neptune", 13 ));
|
||||
}
|
||||
public World createWorld(String name, int moons) {
|
||||
return worldRepository.save(new World(name, moons));
|
||||
}
|
||||
|
||||
private World world(String name, int moons) {
|
||||
return new World(name, moons).persist();
|
||||
}
|
||||
public Iterable<World> getAllWorlds() {
|
||||
return worldRepository.findAll();
|
||||
}
|
||||
|
||||
public World findWorldIdentifiedBy( long id ) {
|
||||
return worldRepository.findById( id );
|
||||
}
|
||||
public World findWorldById(Long id) {
|
||||
return worldRepository.findOne(id);
|
||||
}
|
||||
|
||||
public Iterable<World> findAllWorlds() {
|
||||
return worldRepository.findAll();
|
||||
}
|
||||
// This is using the schema based index
|
||||
public World findWorldByName(String name) {
|
||||
return worldRepository.findBySchemaPropertyValue("name", name);
|
||||
}
|
||||
|
||||
public long countWorlds() {
|
||||
return worldRepository.count();
|
||||
}
|
||||
// This is using the legacy index
|
||||
public Iterable<World> findAllByNumberOfMoons(int numberOfMoons) {
|
||||
return worldRepository.findAllByPropertyValue("moons", numberOfMoons);
|
||||
}
|
||||
|
||||
public World findWorldNamed( String name ) {
|
||||
return worldRepository.findByPropertyValue( "name", name );
|
||||
}
|
||||
public Collection<World> makeSomeWorlds() {
|
||||
Collection<World> worlds = new ArrayList<World>();
|
||||
|
||||
public World findWorldWithMoons( long moonCount ) {
|
||||
return worldRepository.findByPropertyValue( "moons", "moons", moonCount );
|
||||
}
|
||||
// Solar worlds
|
||||
worlds.add(createWorld("Mercury", 0));
|
||||
worlds.add(createWorld("Venus", 0));
|
||||
|
||||
World earth = createWorld("Earth", 1);
|
||||
World mars = createWorld("Mars", 2);
|
||||
mars.addRocketRouteTo(earth);
|
||||
worldRepository.save(mars);
|
||||
worlds.add(earth);
|
||||
worlds.add(mars);
|
||||
|
||||
// ... Create more worlds
|
||||
|
||||
return worlds;
|
||||
}
|
||||
|
||||
public Iterable<World> findWorldsWithMoons( int moonCount ) {
|
||||
return worldRepository.findAllByPropertyValue( "moons", "moons", moonCount );
|
||||
}
|
||||
}
|
||||
|
||||
</pre>
|
||||
|
||||
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
package org.springframework.data.neo4j.examples.hellograph;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.neo4j.aspects.core.NodeBacked;
|
||||
import org.springframework.data.neo4j.examples.hellograph.domain.World;
|
||||
import org.springframework.data.neo4j.examples.hellograph.repositories.WorldRepository;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.neo4j.aspects.core.NodeBacked;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
@Transactional
|
||||
public class GalaxyService {
|
||||
|
||||
@Autowired
|
||||
@@ -18,8 +22,8 @@ public class GalaxyService {
|
||||
}
|
||||
|
||||
public World createWorld(String name, int moons) {
|
||||
// The lin below is just as valid within you code (it assumes)
|
||||
// the aspectj compilcation has occured, however the cast to
|
||||
// The line below is just as valid within you code (it assumes)
|
||||
// the aspectj compilation has occurred, however the cast to
|
||||
// the NodeBacked class is being used here as its helpful to
|
||||
// IDE's which struggle with aspectj stuff
|
||||
//
|
||||
@@ -37,7 +41,8 @@ public class GalaxyService {
|
||||
public World findWorldById(Long id) {
|
||||
return worldRepository.findOne(id);
|
||||
}
|
||||
|
||||
|
||||
// This is using the schema based index
|
||||
public World findWorldByName(String name) {
|
||||
return worldRepository.findBySchemaPropertyValue("name", name);
|
||||
}
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
package org.springframework.data.neo4j.examples.hellograph;
|
||||
|
||||
import org.springframework.data.neo4j.repository.GraphRepository;
|
||||
|
||||
public interface WorldRepository extends GraphRepository<World> {}
|
||||
@@ -1,11 +1,7 @@
|
||||
package org.springframework.data.neo4j.examples.hellograph;
|
||||
package org.springframework.data.neo4j.examples.hellograph.domain;
|
||||
|
||||
import org.neo4j.graphdb.Direction;
|
||||
import org.springframework.data.neo4j.annotation.Fetch;
|
||||
import org.springframework.data.neo4j.annotation.GraphId;
|
||||
import org.springframework.data.neo4j.annotation.Indexed;
|
||||
import org.springframework.data.neo4j.annotation.NodeEntity;
|
||||
import org.springframework.data.neo4j.annotation.RelatedTo;
|
||||
import org.springframework.data.neo4j.annotation.*;
|
||||
import org.springframework.data.neo4j.support.index.IndexType;
|
||||
|
||||
import java.util.Set;
|
||||
@@ -16,10 +12,12 @@ public class World {
|
||||
|
||||
@GraphId
|
||||
private Long id;
|
||||
|
||||
|
||||
// Uses default schema based index
|
||||
@Indexed
|
||||
private String name;
|
||||
|
||||
// Uses legacy index mechanism
|
||||
@Indexed(indexType = IndexType.SIMPLE)
|
||||
private int moons;
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
package org.springframework.data.neo4j.examples.hellograph.repositories;
|
||||
|
||||
import org.springframework.data.neo4j.examples.hellograph.domain.World;
|
||||
import org.springframework.data.neo4j.repository.GraphRepository;
|
||||
|
||||
public interface WorldRepository extends GraphRepository<World> {}
|
||||
@@ -18,8 +18,9 @@
|
||||
<context:annotation-config/>
|
||||
<context:component-scan base-package="org.springframework.data.neo4j.examples.hellograph" />
|
||||
|
||||
<neo4j:config storeDirectory="target/neo4j-db-aspect" base-package="org.springframework.data.neo4j.examples.hellograph"/>
|
||||
<neo4j:repositories base-package="org.springframework.data.neo4j.examples.hellograph"/>
|
||||
<neo4j:config storeDirectory="target/neo4j-db-aspect"
|
||||
base-package="org.springframework.data.neo4j.examples.hellograph.domain"/>
|
||||
<neo4j:repositories base-package="org.springframework.data.neo4j.examples.hellograph.repositories"/>
|
||||
|
||||
<tx:annotation-driven mode="aspectj"/>
|
||||
</beans>
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.springframework.data.neo4j.examples.hellograph;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.neo4j.examples.hellograph.domain.World;
|
||||
import org.springframework.data.neo4j.support.Neo4jTemplate;
|
||||
import org.springframework.data.neo4j.support.node.Neo4jHelper;
|
||||
import org.springframework.test.annotation.Rollback;
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
package org.springframework.data.neo4j.examples.hellograph;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.neo4j.examples.hellograph.domain.World;
|
||||
import org.springframework.data.neo4j.examples.hellograph.repositories.WorldRepository;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
@Transactional
|
||||
public class GalaxyService {
|
||||
|
||||
@Autowired
|
||||
@@ -27,7 +31,8 @@ public class GalaxyService {
|
||||
public World findWorldById(Long id) {
|
||||
return worldRepository.findOne(id);
|
||||
}
|
||||
|
||||
|
||||
// This is using the schema based index
|
||||
public World findWorldByName(String name) {
|
||||
return worldRepository.findBySchemaPropertyValue("name", name);
|
||||
}
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
package org.springframework.data.neo4j.examples.hellograph;
|
||||
|
||||
import org.springframework.data.neo4j.repository.GraphRepository;
|
||||
|
||||
public interface WorldRepository extends GraphRepository<World> {}
|
||||
@@ -1,11 +1,7 @@
|
||||
package org.springframework.data.neo4j.examples.hellograph;
|
||||
package org.springframework.data.neo4j.examples.hellograph.domain;
|
||||
|
||||
import org.neo4j.graphdb.Direction;
|
||||
import org.springframework.data.neo4j.annotation.Fetch;
|
||||
import org.springframework.data.neo4j.annotation.GraphId;
|
||||
import org.springframework.data.neo4j.annotation.Indexed;
|
||||
import org.springframework.data.neo4j.annotation.NodeEntity;
|
||||
import org.springframework.data.neo4j.annotation.RelatedTo;
|
||||
import org.springframework.data.neo4j.annotation.*;
|
||||
import org.springframework.data.neo4j.support.index.IndexType;
|
||||
|
||||
import java.util.Set;
|
||||
@@ -16,10 +12,12 @@ public class World {
|
||||
|
||||
@GraphId
|
||||
private Long id;
|
||||
|
||||
|
||||
// Uses default schema based index
|
||||
@Indexed
|
||||
private String name;
|
||||
|
||||
// Uses legacy index mechanism
|
||||
@Indexed(indexType = IndexType.SIMPLE)
|
||||
private int moons;
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
package org.springframework.data.neo4j.examples.hellograph.repositories;
|
||||
|
||||
import org.springframework.data.neo4j.examples.hellograph.domain.World;
|
||||
import org.springframework.data.neo4j.repository.GraphRepository;
|
||||
|
||||
public interface WorldRepository extends GraphRepository<World> {}
|
||||
@@ -23,8 +23,9 @@
|
||||
<constructor-arg value="SubRef"/>
|
||||
</bean>
|
||||
|
||||
<neo4j:config storeDirectory="target/neo4j-db-plain-subref" base-package="org.springframework.data.neo4j.examples.hellograph"/>
|
||||
<neo4j:repositories base-package="org.springframework.data.neo4j.examples.hellograph"/>
|
||||
<neo4j:config storeDirectory="target/neo4j-db-plain-subref"
|
||||
base-package="org.springframework.data.neo4j.examples.hellograph.domain"/>
|
||||
<neo4j:repositories base-package="org.springframework.data.neo4j.examples.hellograph.repositories"/>
|
||||
|
||||
</beans>
|
||||
|
||||
|
||||
@@ -18,8 +18,10 @@
|
||||
<context:annotation-config/>
|
||||
<context:component-scan base-package="org.springframework.data.neo4j.examples.hellograph" />
|
||||
|
||||
<neo4j:config storeDirectory="target/neo4j-db-plain" base-package="org.springframework.data.neo4j.examples.hellograph"/>
|
||||
<neo4j:repositories base-package="org.springframework.data.neo4j.examples.hellograph"/>
|
||||
<neo4j:config storeDirectory="target/neo4j-db-plain"
|
||||
base-package="org.springframework.data.neo4j.examples.hellograph.domain"/>
|
||||
<neo4j:repositories base-package="org.springframework.data.neo4j.examples.hellograph.repositories"/>
|
||||
|
||||
<tx:annotation-driven />
|
||||
</beans>
|
||||
|
||||
|
||||
@@ -3,13 +3,13 @@ package org.springframework.data.neo4j.examples.hellograph;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.neo4j.examples.hellograph.domain.World;
|
||||
import org.springframework.data.neo4j.support.Neo4jTemplate;
|
||||
import org.springframework.data.neo4j.support.node.Neo4jHelper;
|
||||
import org.springframework.test.annotation.Rollback;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
import org.springframework.test.context.transaction.BeforeTransaction;
|
||||
import org.springframework.test.context.transaction.TransactionConfiguration;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -22,9 +22,8 @@ import static org.junit.Assert.*;
|
||||
@ContextConfiguration(locations = "classpath:/spring/helloWorldContext.xml")
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@Transactional
|
||||
@TransactionConfiguration(defaultRollback = false)
|
||||
public class GalaxyServiceTest {
|
||||
|
||||
|
||||
@Autowired
|
||||
private GalaxyService galaxyService;
|
||||
|
||||
@@ -59,7 +58,7 @@ public class GalaxyServiceTest {
|
||||
galaxyService.makeSomeWorlds();
|
||||
|
||||
for(World world : galaxyService.getAllWorlds()) {
|
||||
World foundWorld = galaxyService.findWorldById(world.getId());
|
||||
World foundWorld = galaxyService.findWorldById(world.getId());
|
||||
assertNotNull(foundWorld);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.springframework.data.neo4j.examples.hellograph;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.neo4j.examples.hellograph.domain.World;
|
||||
import org.springframework.data.neo4j.support.Neo4jTemplate;
|
||||
import org.springframework.data.neo4j.support.node.Neo4jHelper;
|
||||
import org.springframework.test.annotation.Rollback;
|
||||
|
||||
Reference in New Issue
Block a user