我有一个web应用程序,在应用程序引擎上有一个servlet
以及调用servlet 的cron作业
我怎样才能看到燃烧基地内的日志回电?"onDataChange"
我只看到来自"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) {
Firebase回调是异步的,因此您的readFromDB应该注册一个侦听器,并一直等待Firebase发送更新,不幸的是,任务一结束,您的线程就被终止了。这对GAE来说是一个大问题,因为实例到处都在创建和销毁,所以获得与Firebase服务器的持续连接并非易事。
为了使用Firebase回调,您必须使用服务(以前称为模块)设置一个常驻实例