Jakarta ee neo4j cdi@注入正确启动
我遇到了Neo4J无法基于注入Neo4J数据库的类的作用域保持节点的问题,因此我尝试将Neo4J数据库包装到以下类中: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
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应用程序中的使用不如我的多。