neo4j cdi @inject正确启动

时间:2014-01-14 16:02:15

标签: java-ee neo4j osgi

我遇到的问题是Neo4J默默地根据注入Neo4J数据库的类的范围而无法持久化节点,因此我尝试在下面的类中包装Neo4j数据库:

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Singleton;
import javax.inject.Named;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;
import org.neo4j.graphdb.index.Index;
import org.neo4j.graphdb.index.IndexManager;

@Named
@Singleton
public class GraphDatabaseMngr
{
    private static final String FILESYSTEM_DB = "target/dmsdb";
    private org.neo4j.graphdb.GraphDatabaseService graphDb;
    /* below is for node indexing */
    private IndexManager indexManager;
    private Index<Node> index;

    public GraphDatabaseMngr()
    {

    }

    @PostConstruct
    void postConstruct()
    {
        setUp();
    }

    @PreDestroy
    void preDestroy()
    {
        getGraphDb().shutdown();
    }

    public void setUp()
    {
        if (getGraphDb() == null)
        {
            setGraphDb(new GraphDatabaseFactory().newEmbeddedDatabase(FILESYSTEM_DB));
            setIndexManager(getGraphDb().index());
            setIndex(getIndexManager().forNodes("indexNodes"));
        }
    }
}

我想知道它是否正常以及是否在@SessionScoped类中注入它是正常的。

到目前为止,该类似乎已正确注入,但是获取和添加节点到neo4j存储不能正常工作,节点没有出现存储但是没有返回错误。

1 个答案:

答案 0 :(得分:0)

代码看起来不错,但我更喜欢在@PostConstruct方法中执行init。

@Named
@Singleton
public class GraphDatabaseMngr
{
    private static final String FILESYSTEM_DB = "target/dmsdb";
    private org.neo4j.graphdb.GraphDatabaseService graphDb;
    /* below is for node indexing */
    private IndexManager indexManager;
    private Index<Node> index;


    @PostConstruct
    void postConstruct()
    {
        graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(FILESYSTEM_DB);
        indexManager = getGraphDb().index();
        index = indexManager.forNodes("indexNodes")
    }

    @PreDestroy
    void preDestroy()
    {
        graphDb.shutdown();
    }

   // your getters
}

将此bean注入应用程序的其他bean(请求,会话或任何作用域)应该没有问题。 为了诊断节点没有存储的问题:在@ PostConstruct / @ PreDestroy方法中添加一些日志记录,看看这个bean的生命周期是否正常(我很确定)。我似乎更多的是缺少交易的问题(但这应该由Neo4j报告) - 你能验证一下吗?