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
-~----------~----~----~----~------~----~------~--~---

Reply via email to