1

neo4j Graphaware ソリューションの実装に問題があります。以前は、次のような GraphDatabaseService オブジェクトを作成していました -

public class TimetreeUtil {
    public static GraphDatabaseService db;
    public static SingleTimeTree st;
    public static TimeTreeBackedEvents ttbe;
    public static TimeTreeBusinessLogic ttbl;
    public static TimedEventsBusinessLogic tebl;    
    public static List<Event> eventsFetchedFromTimetree;

    public TimetreeUtil() {
        db =  new GraphDatabaseFactory( ).newEmbeddedDatabase(new File("..."));
        st = new SingleTimeTree(db);
        ttbl = new TimeTreeBusinessLogic(db);
        ttbe = new TimeTreeBackedEvents(st);
        tebl = new TimedEventsBusinessLogic(db, ttbe);
    }
}

これはうまくいきました。ご覧のとおり、GraphDatabaseService、SingleTimeTree、TimeTreeBackedEvents、TimeTreeBusinessLogic、および TimedEventsBusinessLogic はすべて静的であり、neo4j が要求するため、そうあるべきです。

しかし、今ではアーキテクチャが変更され、GraphDatabaseService を次のように注入しています -

@Context
public GraphDatabaseService db;

だから今、クラスは次のようになります -

public class TimetreeUtil {
        @Context
        public GraphDatabaseService db;
        public static SingleTimeTree st;
        public static TimeTreeBackedEvents ttbe;
        public static TimeTreeBusinessLogic ttbl;
        public static TimedEventsBusinessLogic tebl;    
        public static List<Event> eventsFetchedFromTimetree;

        public TimetreeUtil() {
            st = new SingleTimeTree(db);
            ttbl = new TimeTreeBusinessLogic(db);
            ttbe = new TimeTreeBackedEvents(st);
            tebl = new TimedEventsBusinessLogic(db, ttbe);
        }
    }

ヘルパー クラス Timetree は、TimetreeUtil クラスのオブジェクトを作成し、TimetreeUtil のTimetreeUtil util = new TimetreeUtil();1 つのメソッドを呼び出すだけです。

コンストラクターが呼び出されるまでに、 dbは既に初期化されていると想定していますが、そうではありません。dbは null であるためst = new SingleTimeTree(db);、NPE を提供しています。

どうすれば両端を合わせることができますか? ありがとう。

4

1 に答える 1