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 を提供しています。
どうすれば両端を合わせることができますか? ありがとう。