2014-10-28 2 views
2

groovy 응용 프로그램 내에서 neo4j 데이터베이스에 몇 개의 노드를 만들었지 만 쉘 클라이언트를 사용하여 데이터베이스에 연결할 때는 나타나지 않습니다 거기에있다.생성 된 노드가 neo4j 데이터베이스에 추가되지 않은 것 같습니다

나는 것을 http://neo4j.com/docs/stable/tutorials-java-embedded-hello-world.html에 설명되어 만드는거야 데이터베이스 : I 쉘 클라이언트에서 연결할 때

def graphDb = new GraphDatabaseFactory().newEmbeddedDatabase("/tmp/foo.db"); 

Transaction tx = graphDb.beginTx() 
def firstNode = graphDb.createNode(); 
firstNode.setProperty("message", "Hello, "); 
def secondNode = graphDb.createNode(); 
secondNode.setProperty("message", "World!"); 

tx.success(); 

System.err.print(firstNode.getProperty("message")); 
System.err.print(relationship.getProperty("message")); 
System.err.print(secondNode.getProperty("message")); 

graphDb.shutdown() 

이 응용 프로그램을 실행 한 후, 나는 그러나, 데이터베이스가 파일 시스템에 생성 된 것을 볼 수 있습니다, 데이터베이스에 노드가없는 것으로 보입니다.

$ ./neo4j-community-2.1.5/bin/neo4j-shell -path /tmp/foo.db/ -v 
neo4j-sh (?)$ match (m) return m; 
+---+ 
| m | 
+---+ 
+---+ 
0 row 

무엇이 잘못 되었나요?

+0

둘 다 동일한 버전의 neo4j를 사용하고 있습니까? – Jatin

+0

예, 그렇게 생각합니다. Groovy 코드에서 이전 버전을 사용했지만 쉘 클라이언트가 이전 데이터베이스를 열지 않는다고 불평했습니다. –

+0

나는 그것이 작동하지 않아야하는 이유에 대해서는 전혀 모른다 : ( – Jatin

답변

3

트랜잭션을 종료하지 않았습니다. tx.success()은 트랜잭션을 성공으로 표시하지만 커밋하지는 않습니다. 거래를 완료하려면 tx.close()을 사용하십시오. Java를 수행 할 때 try-with-resources 블록을 사용하는 것이 가장 좋습니다. 이는 close()을 자동으로 호출하는 것에 대한 것입니다. 코드가 def을 가지고 있기 때문에

GraphDatabaseService graphDb = ...; 
try (Transaction tx = graphDb.beginTx()) { 
    // do stuff 
    tx.success(); 
} 

나는 당신이 끝내 사용하는 시도 -과 - 자원을 지원하지 않는 가정합니다. 따라서 코드는 다음과 같습니다.

def graphDb = .... 
Transaction tx = graphDb.beginTx() 
try { 
    // do stuff e.g. create nodes 
    tx.success() 
} finally { 
    tx.close() 
} 
+0

그곳에 있습니다 :) 학교 소년 오류 :) http://neo4j.com/docs/stable/tutorials-java-embedded-hello-world.html의 예제는 마침내 차단해라. –

+0

아, 그래. 자원으로 시도하면 익숙하지 않은 자바 패턴입니다. (내 java foo는 있어야 할 것보다 오래된 것입니다!) –

+2

try-with-resources가 Java 7에 추가되었습니다. –

관련 문제