There was a period of increased datastore latency a couple of days ago that may explain the timeout exceptions -- can you indicate whether this is working now? As an aside, creating a user service and calling getCurrentUser() is a negligible cost, and it may be worth it for you to include this in order to have a stateless application rather than relying on sessions.
- Jason On Mon, Sep 21, 2009 at 5:10 AM, doc123 <[email protected]> wrote: > > Hi > I got DatastoreTimeoutException when I using HttpSession at production > mode. This code does not create error at local development > environment. > > Purpose to use session is cashing userID(google e-mail string ) when > user login at first time. So I created Session_User class which have > SeesionID, UserID, and UserNickName propaty and store this instance to > memcashe(Key:SessionID. Value Session Instance) and use memcash to > identify user when they access server 2nd time. > > I am not using HttpSession.setAttribute method because I can use > Google userService.getCurrentUser() method when cashed data is > expired. > > It is written that when we add <sessions-enabled>true</sessions- > enabled> to appengine-web.xml then GoogleSDK automatically creates > datastore entities of the kind _ah_SESSION but I could not find > _ah_SESSION class in my source code. > > So Is this the reason for this DatastoreTimeoutException? > And if so what should I do to make GoogleSDK creates datastore > entities _ah_SESSION? > > > <<<<<<<Error List at production mode >>>>>> > A server error has occurred. > Uncaught exception from servlet > com.google.appengine.api.datastore.DatastoreTimeoutException: Unknown > at > com.google.appengine.api.datastore.DatastoreApiHelper.translateError > (DatastoreApiHelper.java:38) > at > com.google.appengine.api.datastore.DatastoreApiHelper.makeSyncCall > (DatastoreApiHelper.java:56) > at com.google.appengine.api.datastore.DatastoreServiceImpl$2.run > (DatastoreServiceImpl.java:170) > at > com.google.appengine.api.datastore.TransactionRunner.runInTransaction > (TransactionRunner.java:30) > at com.google.appengine.api.datastore.DatastoreServiceImpl.put > (DatastoreServiceImpl.java:158) > at com.google.appengine.api.datastore.DatastoreServiceImpl.put > (DatastoreServiceImpl.java:138) > at com.google.appengine.api.datastore.DatastoreServiceImpl.put > (DatastoreServiceImpl.java:130) > at com.google.apphosting.runtime.jetty.SessionManager.createSession > (SessionManager.java:333) > at com.google.apphosting.runtime.jetty.SessionManager > $AppEngineSession.<init>(SessionManager.java:135) > at com.google.apphosting.runtime.jetty.SessionManager.newSession > (SessionManager.java:265) > at com.google.apphosting.runtime.jetty.SessionManager.newSession > (SessionManager.java:50) > at org.mortbay.jetty.servlet.AbstractSessionManager.newHttpSession > (AbstractSessionManager.java:413) > at org.mortbay.jetty.Request.getSession(Request.java:1005) > at askerDB.S_GoogleLogin.doPost(S_GoogleLogin.java:57) > at askerDB.S_GoogleLogin.doGet(S_GoogleLogin.java:102) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:693) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) > at > org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java: > 487) > at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter > (ServletHandler.java:1093) > at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter > (SaveSessionFilter.java:35) > at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter > (ServletHandler.java:1084) > at > com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter > (TransactionCleanupFilter.java:43) > at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter > (ServletHandler.java:1084) > at org.mortbay.jetty.servlet.ServletHandler.handle > (ServletHandler.java:360) > at org.mortbay.jetty.security.SecurityHandler.handle > (SecurityHandler.java:216) > at org.mortbay.jetty.servlet.SessionHandler.handle > (SessionHandler.java:181) > at org.mortbay.jetty.handler.ContextHandler.handle > (ContextHandler.java:712) > at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java: > 405) > at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle > (AppVersionHandlerMap.java:237) > at org.mortbay.jetty.handler.HandlerWrapper.handle > (HandlerWrapper.java:139) > at org.mortbay.jetty.Server.handle(Server.java:313) > at > org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java: > 506) > at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete > (HttpConnection.java:830) > at > com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable > (RpcRequestParser.java:76) > at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381) > at > > com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest > (JettyServletEngineAdapter.java:139) > at com.google.apphosting.runtime.JavaRuntime.handleRequest > (JavaRuntime.java:235) > at com.google.apphosting.base.RuntimePb$EvaluationRuntime > $6.handleBlockingRequest(RuntimePb.java:4950) > at com.google.apphosting.base.RuntimePb$EvaluationRuntime > $6.handleBlockingRequest(RuntimePb.java:4948) > at com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest > (BlockingApplicationHandler.java:24) > at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java: > 359) > at com.google.net.rpc.impl.Server$2.run(Server.java:823) > at com.google.tracing.LocalTraceSpanRunnable.run > (LocalTraceSpanRunnable.java:56) > at com.google.tracing.LocalTraceSpanBuilder.internalContinueSpan > (LocalTraceSpanBuilder.java:516) > at com.google.net.rpc.impl.Server.startRpc(Server.java:778) > at com.google.net.rpc.impl.Server.processRequest(Server.java:351) > at com.google.net.rpc.impl.ServerConnection.messageReceived > (ServerConnection.java:437) > at com.google.net.rpc.impl.RpcConnection.parseMessages > (RpcConnection.java:319) > at com.google.net.rpc.impl.RpcConnection.dataReceived > (RpcConnection.java:290) > at com.google.net.async.Connection.handleReadEvent(Connection.java: > 428) > at com.google.net.async.EventDispatcher.processNetworkEvents > (EventDispatcher.java:762) > at com.google.net.async.EventDispatcher.internalLoop > (EventDispatcher.java:207) > at com.google.net.async.EventDispatcher.loop(EventDispatcher.java: > 101) > at com.google.net.rpc.RpcService.runUntilServerShutdown > (RpcService.java:251) > at com.google.apphosting.runtime.JavaRuntime$RpcRunnable.run > (JavaRuntime.java:392) > at java.lang.Thread.run(Unknown Source) > > Unexpected exception from servlet: > com.google.appengine.api.datastore.DatastoreTimeoutException: Unknown > > > <<<<<<<Login Servlet code >>>>>> > > public void doPost(HttpServletRequest req, HttpServletResponse resp) > throws IOException > { > HttpSession session; > > UserService userService = UserServiceFactory.getUserService(); > User user = userService.getCurrentUser(); > > if (user == null) > { > resp.sendRedirect(userService.createLoginURL(req.getRequestURI())); > } > else > { > req.getSession(true).invalidate(); > session = req.getSession(true); > > Session_User SessionUser=new Session_User(); > SessionUser.setSessionID(session.getId()); > SessionUser.setUserID(user.getEmail()); > SessionUser.setNick(user.getNickname()); > AppCash.SessionUser_Put(SessionUser); > > > } > } > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google App Engine for Java" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en -~----------~----~----~----~------~----~------~--~---
