2014-03-31 1 views
0

neo4j java-rest-binding 프로젝트를 사용하여 순회 프레임 워크를 구현하고 있습니다. 어떤 노드와 관련된RestTraverser에서 iterator()에 액세스 할 수 없으면 java.lang.IllegalAccessError 예외가 발생합니다.

  1. 인쇄 모든 노드 ID를 : 코드에 주석으로 내가 3 개 작업을 할 필요가

    RestAPI db = new RestAPIFacade("http://localhost:7474/db/data"); 
    RestNode n21 = db.getNodeById(21); 
    Map<String,Object> traversalDesc = new HashMap<String, Object>(); 
    traversalDesc.put("order", "breadth_first"); 
    traversalDesc.put("uniqueness", "node_global"); 
    traversalDesc.put("uniqueness", "relationship_global"); 
    traversalDesc.put("returnType", "fullpath"); 
    traversalDesc.put("max_depth", 2); 
    RestTraverser traverser = db.traverse(n21, traversalDesc); 
    Iterable<Node> nodes = traverser.nodes(); 
    System.out.println("All Nodes:");  // First Task 
    for(Node n:nodes){ 
    System.out.println(n.getId()); 
    } 
    Iterable<Relationship> rels = traverser.relationships(); 
    System.out.println("All Relations:"); // Second Task 
    for(Relationship r:rels){ 
    System.out.println(r.getId()); 
    } 
    Iterator<Path> paths = traverser.iterator(); // Third Task 
    while(paths.hasNext()){ 
        System.out.println(paths.next()); 
    } 
    

    다음과 같이 코드입니다. 21

  2. 노드 번호와 관련된 모든 관계 ID를 인쇄하십시오. 21
  3. 노드 번호와 관련된 모든 경로를 탐색하십시오. 21

작업 1 & 2가 정상적으로 작동합니다. 하지만 3 작업에서 traverser.iterator()을 할 때 그것은 예외 말이 던졌습니다 :

java.lang.IllegalAccessError: tried to access class org.neo4j.helpers.collection.WrappingResourceIterator from class org.neo4j.rest.graphdb.traversal.RestTraverser 

사람이 이런 일이 아니면 내가 잘못 다음 작업을 수행 할 수있는 권리 방법이 일을하고있는 경우 원인을 확인하십시오 수 있습니다. 미리 감사드립니다.

+0

전체 스택 추적을 공유 할 수 있습니까? –

+0

클라이언트 프로젝트에 어떤 neo4j 버전이 있습니까? 그리고 java-rest-binding의 어떤 버전입니까? 일치해야합니다. –

+0

2.0.1 neo4j와 java-rest-binding (neo4j-rest-graphdb.jar)을 사용하여 동일한 java.lang.IllegalAccessError : org/neo4j/helpers/collection/WrappingResourceIterator'를 얻었습니다. [org.neo4j.helpers.collection.WrappingResourceIterator'는 [neo4j-kernel] (https://github.com/neo4j/neo4j/blame/master/community/kernel/src/)에서'package' visbile처럼 보입니다. – alphageek

답변

0

REST DB 바인딩을 통해 Neo4j Traversal Framework를 사용하는 것이 적절하게 지원되지 않는다고 생각하지 않습니다. REST를 통해 트래버스하는 경우, 트래버스가 진행됨에 따라 각 노드와 각 관계가 네트워크를 통해 검색되므로 트래버스에 대한 엄청난 오버 헤드가 발생합니다.

: 위의 내용은 사실이 아닙니다. REST 트래버서는 내가 생각한 것보다 똑똑합니다.

일반적으로 Cypher를 사용하고 JDBC를 사용하여 Neo4j 서버에 액세스하는 것이 더 빠릅니다. JDBC에 대한 자세한 내용은 여기를 참조하십시오. https://github.com/neo4j-contrib/neo4j-jdbc

실제적으로 Traversal Framework를 사용하려면 서버 확장을 사용해야합니다. Server Extensions를 사용하면 서버 자체에서 실행되도록 탐색을 디자인 한 다음 탐색 결과 만 이동할 수 있습니다 네트워크를 통해. 서버 확장에 대한 자세한 내용은 여기를 참조하십시오. http://docs.neo4j.org/chunked/stable/server-unmanaged-extensions.html

+1

실제로 나머지 가로 채기는 클라이언트에 대한 정보를 수집하고 실행 대상 서버로 탐색 설명을 보냅니다. –

관련 문제