Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee neo4j cdi@注入正确启动_Jakarta Ee_Neo4j_Osgi - Fatal编程技术网

Jakarta ee neo4j cdi@注入正确启动

Jakarta ee neo4j cdi@注入正确启动,jakarta-ee,neo4j,osgi,Jakarta 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.fact

我遇到了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存储区并没有像预期的那样工作,节点没有显示为已存储,但没有返回错误。

我觉得代码看起来不错,但我更愿意在@PostConstruct方法中初始化所有内容

@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报告-您能验证吗?

我可以向您保证Neo4j没有报告任何错误,并且在调试时正确执行了事务,只需将父bean的范围从会话更改为应用程序,它就神奇地工作了。没有错误或警告,也没有回馈。我最终放弃了Neo4J,因为它对我的设置来说太不稳定了,也没有人给我任何支持,所以我猜Neo4J在web应用程序中的使用不如我的多。