小编kei*_*ric的帖子

在嵌入式neo4j中处理事务的最佳方法是什么?

我刚开始使用Graph数据库,并且最好学习neo4j.我在应用程序(JSF Based)中运行了一个neo4j的嵌入式实例.该应用程序的用例主要是让我学习使用图形数据库的概念和难点,并帮助确定最佳方式(即嵌入式或独立式).但我的测试应用程序是一个非常基本的联系人应用程序,能够定义关系(即KNOWS,WORKS_WITH,WORKS_FOR等),并最终能够根据这些关系提出建议(即"你可能也知道").

到目前为止,我已经有了基本的crud操作,可以添加/删除关系.我的下一步将是实际开始遍历图表(我认为).但我目前遇到的问题是,一旦我与服务器的会话到期,我无法重新建立新会话而不会收到IllegalStateException错误,抱怨该商店当前正在使用.我认为这是因为我从未在neo4j实例上调用shutdown.因此,这让我认为我处理交易的方式都是错误的所以我希望有人可以纠正我的理解(或错误理解,视情况而定)我应该怎么做.

以下是我的助手类中的一些方法,用于处理Web客户端和neo4j之间的操作:

public class NeoNodeUtils {
private GraphDatabaseService graphDb;

public NeoNodeUtils() {
    setup();
}

public void setup() {
    GraphDatabaseFactory neoFactory = new GraphDatabaseFactory();
    setGraphDb(neoFactory.newEmbeddedDatabase("Morpheus"));
    registerShutdownHook();
}

public GraphDatabaseService getGraphDb() {
    return graphDb;
}

public void setGraphDb(GraphDatabaseService graphDb) {
    this.graphDb = graphDb;
}

public Node getNode(Long id) {
    Transaction tx = getGraphDb().beginTx();
    Node node = null;
    try {
        node = getGraphDb().getNodeById(id);
        tx.success();
    } catch (Exception e) {
        tx.failure();
        e.printStackTrace();
    } finally {
        tx.finish();
        return node;
    }
} …
Run Code Online (Sandbox Code Playgroud)

neo4j

3
推荐指数
1
解决办法
3835
查看次数

标签 统计

neo4j ×1