2016-07-25 16 views
0

Ich habe einen Web-App mit einem Servlet auf app-Enginewie innen Feuerbasis Rückruf anmelden, wenn sie von cron-Job ausgelöst

und einen cron-Job, der diese Servlet

ich, wie kann ich die Protokolle sehen ruft innerhalb der Firebase zurückrufen? "onDataChange"

ich nur sehen, meldet sich von "doPost()"

private static final Logger logger = Logger.getLogger(MatchingServlet.class.getName()); 

    @Override 
public void doPost(HttpServletRequest req, HttpServletResponse resp) 
     throws ServletException, IOException { 
    logger.info("in matching-servlet doPost"); 

    readFromDb(); 

} 

private void readFromDb() { 
    firebase.child("users").addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      StringBuilder sb = new StringBuilder(); 

      sb.append("elad inside onDataChange. time: "+ System.currentTimeMillis()); 
      firebase.child("logs").setValue(sb.toString()); 

      List<User> users = new ArrayList<User>(); 
      Iterable<DataSnapshot> children = dataSnapshot.getChildren(); 

      System.out.println("children = " + children); 
      logger.info("children = " + children); 
      for (DataSnapshot ds : children) { 

Antwort

0

Firebase Rückrufe Async werden, so dass Ihr readFromDB soll ein Listener registrieren und halten nur darauf warten, für Firebase Updates zu senden, leider ist der Thread so schnell getötet, als Die Aufgabe ist vorbei. Dies ist ein großes Problem für GAE, da Instanzen überall erstellt und zerstört werden. Daher ist es nicht trivial, eine konstante Verbindung zu Firebase-Servern herzustellen.

Um mit Firebase Rückrufe Sie arbeiten werden eine resident instance mit Dienstleistungen zu Setup haben (früher als Module bezeichnet)

+0

und wenn ich eine resident Instanz habe, wie kann ich innerhalb der Callback-Methode anmelden? immer noch erscheinen die Logs von dort nicht in der Konsole –

+0

Log sollte dort genauso funktionieren wie auf einer Standardinstanz. HEADS UP: Standard-Logger-Level ist WARN, also wird alles unterhalb dieses Levels (zB die INFO-Nachrichten, die Sie sich anmelden) nicht angezeigt – jirungaray

+0

Ich habe bereits Level zu INFO geändert, und kein Log in den Callback wird in das Logbuch geschrieben. Nur wenn ich das Protokoll in fire base "logs" untergeordnet speicher, kann es später geschrieben und gelesen werden. Woher? –