在“sessionDestroyed”

时间:2016-01-11 09:54:19

标签: java multithreading google-app-engine google-cloud-datastore

好的,我得到了SessionListener课程

public class SessionListener implements HttpSessionListener {
    private int sessionCount = 0;
    private static final Map<String, HttpSession> sessions = new HashMap<String, HttpSession>();


    @Override
    public void sessionCreated(HttpSessionEvent event) {
       ///.....

    }

    @Override
    public void sessionDestroyed(HttpSessionEvent event) {
        ///
        User.updateUser(user);
    }
}

User班级

public static boolean updateUser(User user){
        TransactionOptions txOptions=TransactionOptions.Builder.withXG(true);

        Transaction tx=datastore.beginTransaction(txOptions);
        try{
           //updateData here
        }
        catch(Exception ex){
            ///
        }

}

然而,在跑完之后,我收到了这个错误:

Jan 11, 2016 4:41:38 PM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: Problem scavenging sessions
java.lang.NullPointerException: No API environment is registered for this thread.
    at com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppId(DatastoreApiHelper.java:170)
    at com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppIdNamespace(DatastoreApiHelper.java:186)
    at com.google.appengine.api.datastore.DatastoreServiceConfig.getAppIdNamespace(DatastoreServiceConfig.java:421)
    at com.google.appengine.api.datastore.BaseAsyncDatastoreServiceImpl.createTransaction(BaseAsyncDatastoreServiceImpl.java:420)
    at com.google.appengine.api.datastore.BaseAsyncDatastoreServiceImpl.beginTransaction(BaseAsyncDatastoreServiceImpl.java:412)
    at com.google.appengine.api.datastore.DatastoreServiceImpl.beginTransaction(DatastoreServiceImpl.java:131)
    at com.fluent.User.updateUser(User.java:441)
    at com.fluent.SessionListener.sessionDestroyed(SessionListener.java:80)
    at org.mortbay.jetty.servlet.AbstractSessionManager.removeSession(AbstractSessionManager.java:669)
    at org.mortbay.jetty.servlet.AbstractSessionManager$Session.timeout(AbstractSessionManager.java:926)
    at org.mortbay.jetty.servlet.HashSessionManager.scavenge(HashSessionManager.java:285)
    at org.mortbay.jetty.servlet.HashSessionManager.access$000(HashSessionManager.java:44)
    at org.mortbay.jetty.servlet.HashSessionManager$2.run(HashSessionManager.java:219)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)

我认为sessionDestroyed(HttpSessionEvent event)像线程一样运行并导致问题

我的问题是

为什么会这样?

怎么了?

如何解决?

0 个答案:

没有答案