В моем текущем проекте постоянство данных происходит так:
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
?