Firebase ChildEventListener долго не работает в Java Admin SDK - PullRequest
0 голосов
/ 06 июня 2019

В моем текущем проекте постоянство данных происходит так:

Android> База данных Firebase> Веб-приложение Java EE> База данных MySQL.

Запись данных в Firebase с Android завершена, и этоработает отлично.На следующем шаге, который читается из firebase, а затем записывается в MySQL, я использую Firebase Admin SDK.

Мой план состоял в том, чтобы настроить ServletContextListener для веб-приложения на tiger при развертывании на сервере Glassfish. В этом приемнике я настроил childeventListeners для некоторых ссылок на базу данных в базе данных firebase, используя следующие коды.

@Override
public void contextInitialized(ServletContextEvent arg0) {
    try {

        ClassLoader classLoader = getClass().getClassLoader();
        InputStream serviceAccount = classLoader
                .getResourceAsStream("/XXXXXX/firebase_private_key.json");

        FirebaseOptions options = new FirebaseOptions.Builder()
                .setCredentials(GoogleCredentials.fromStream(serviceAccount))
                .setDatabaseUrl("https://xxxxxxxxxxx.com").build();

        FirebaseApp.initializeApp(options);
        FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();


        // SET UP LISTENER
        DatabaseReference ref = firebaseDatabase.getReference("XXXXXXXXX");
        ref.addChildEventListener(new ChildEventListener() {

            @Override
            public void onChildRemoved(DataSnapshot arg0) {
            }

            @Override
            public void onChildMoved(DataSnapshot arg0, String arg1) {
            }

            @Override
            public void onChildChanged(DataSnapshot arg0, String arg1) {
            }

            @Override
            public void onChildAdded(DataSnapshot arg0, String arg1) {
                   storeData(arg0);
            }

            @Override
            public void onCancelled(DatabaseError arg0) {
            }
            });
}

Все работает хорошо, как я и предполагал, но только на несколько часов.ChildeventListeners отключаются автоматически.

Мне нужно работать так, чтобы слушатели всегда синхронизировали данные между базой данных firebase и базой данных MySQL.

Я что-то упустил или неправильно использую ChildEventListeners?Вместо того, чтобы использовать вышеописанный процесс, было бы целесообразно реализовать запланированный процесс синхронизации с использованием EJB Timers?

...