Neo4j索引使用Java API不起作用

时间:2014-01-14 10:04:51

标签: java neo4j

我正在编写一个非托管扩展,我在使用JAVA API访问索引时遇到问题。

代码:

package org.neo4j.parent.parentextension;

import org.codehaus.jackson.map.ObjectMapper;
import org.neo4j.cypher.javacompat.ExecutionEngine;
import org.neo4j.cypher.javacompat.ExecutionResult;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.index.Index;
import org.neo4j.graphdb.index.IndexManager;
import org.neo4j.graphdb.Node;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

@Path("/parent")
public class ParentDistance {

@GET
@Path("/helloworld")
public String helloWorld() {
    return "Hello World!";
}

@GET
@Path("/common/{acc1}/{acc2}")
public String getCommon(@PathParam("acc1") String acc1, @PathParam("acc2") String acc2, @Context GraphDatabaseService db) throws IOException {

    return db.index().nodeIndexNames().toString();

}



}

helloworld调用确实有效,还有其他执行Cypher查询的方法。但是,只要在任何方法中调用任何IndexManager或索引,下面的任何内容都会停止工作。任何暗示要寻找什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

“停止工作”是什么意思。

日志中的任何例外情况?

使用Neo4j 2.0,您必须在事务中执行包装读取操作。

像这样:

@GET
@Path("/common/{acc1}/{acc2}")
public String getCommon(@PathParam("acc1") String acc1, @PathParam("acc2") String acc2, @Context GraphDatabaseService db) throws IOException {
    try (Transaction tx = db.beginTx()) {
       String result = db.index().nodeIndexNames().toString();
       tx.success();
    }
}