好的,我得到了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)
像线程一样运行并导致问题
我的问题是
为什么会这样?
怎么了?
如何解决?