簡體   English   中英

將@ApplicationScoped更改為@SessionScoped時,Neo4J CDI靜默失敗

[英]Neo4J CDI silent failure when changing @ApplicationScoped into @SessionScoped

我將Beans遷移到CDI,並且遇到了Neo4j的奇怪行為,該行為不會持久化節點(但正確完成了事務),沒有任何錯誤的跡象。

更令人困惑的是,在postCosntructor內部調用時,添加節點的同一調用有效,而在REST服務中調用時無效! (從另一個未顯示的RestService類中調用g())

@Named
@SessionScoped
public class MyNeo4JController implements Serializable
{
   @Inject
   private Neo4JGraph neo4jGraph;
   public MyNeo4JController()
   {
     if (neo4jGraph == null)
        {
            neo4jGraph = new Neo4JGraph();
        }
   }

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

   public void f()
   {
     getGraphStorage().addNode("F");
   }

   public void g()
   {
     getGraphStorage().addNode("G");
   }
}

@Singleton
public class Neo4JGraph
{
    private static final String FILESYSTEM_DB = "target/neo4j-db";
    private GraphDatabaseService graphDb;
    public void addNode(String name)
    {
        Transaction tx = graphDb.beginTx();
        try
        {
            Node newNode = graphDb.createNode();
            newNode.setProperty("name", name);
            tx.success();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            tx.failure();
        }
        finally
        {
            tx.finish();
        }
        return true;
    }

    public void setUp(String rootUuid)
    {
        if (graphDb == null)
        {
            graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(FILESYSTEM_DB);
            indexManager = graphDb.index();
            index = indexManager.forNodes("indexNodes");
            registerShutdownHook();
            setGraphRootUUIDString(rootUuid);
        }
    }
}

CDI和neo4J之間是否存在奧秘的不兼容性,或者我缺少什么?

編輯:好的,顯然我通過將MyNeo4JController中的@SessionScoped更改為@ApplicationScoped來縮小了錯誤范圍,現在節點得以保留。 請注意,在兩種情況下均未返回任何錯誤,但是使用SessionScoped時,未添加任何節點!

有人知道為什么嗎? 因為我不能將此類保留為ApplicationScoped!

從SessionScoped bean中刪除構造函數將解決此問題。 使用現有代碼,每次創建新會話時都在創建一個新數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM