2014-01-14 1 views
0

У меня возникли проблемы с Neo4j молча не в состоянии сохраняться узлами на основе объеме класса инъекционных базы данных Neo4j, поэтому я попытался обертыванием базы данных Neo4j в ниже классе:Neo4j КДИТЕ @Inject правильного запуск

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 не работает должным образом, если узлы не отображаются, но при этом не возвращается ошибка.

ответ

0

Код выглядит нормально для меня, но я бы предпочел сделать все в рамках метода @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 
} 

Там не должно быть никаких проблем впрыскиванием этого бобов в других бобах (запрос, сессии или любой контекстными) вашего приложения. Для диагностики проблемы, которая не сохраняется: добавьте некоторые методы ведения журнала в методы @ PostConstruct/@ PreDestroy, чтобы убедиться, что жизненный цикл этого компонента в порядке (я уверен, что это так). Мне кажется, что это больше проблема отсутствия транзакций (но об этом следует сообщить Neo4j). Можете ли вы проверить это?

+0

Я могу заверить вас, что Neo4j не сообщала об ошибке, и транзакция была выполнена правильно после отладки и просто изменила область родительского компонента от сеанса к приложению, и это заставило магию работать. Никакой ошибки или предупреждения ничего не указано. Я, наконец, отказался от Neo4J как слишком неустойчивый для моей установки, и никто не оказал мне поддержки, поэтому предположим, что Neo4J мало используется в веб-приложениях как мой. – dendini

Смежные вопросы