Spring Mvc Google应用程序引擎中的会话监听器 [英] Session Listener in Spring Mvc Google app engine

查看:123
本文介绍了Spring Mvc Google应用程序引擎中的会话监听器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是Google App Engine,spring mvc和spring jpa dao。在我的应用程序中,我想在会话销毁时从数据库中删除一个条目。所以我使用会话侦听器,它实际上是想通过spring dao bean从数据库中删除一个条目。



这是我在会话监听器中的代码



'pre> @覆盖
公共无效sessionDestroyed(HttpSessionEvent SE){
//从会话条目,现在从数据库中删除$ b $入口b getMyDao(se).delete(entry);
}

私人MyDao getMyDao(HttpSessionEvent sessionEvent){

HttpSession的会议= sessionEvent.getSession();

ApplicationContext ctx =
WebApplicationContextUtils。
getWebApplicationContext(session.getServletContext());

MyDao dao =
(MyDao)ctx.getBean(myDao);

返回dao;
}

当我尝试删除时,出现以下错误



java.lang.NullPointerException:没有为此线程注册API环境。在com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppId(DatastoreApiHelper.java:108)

在com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppIdNamespace(DatastoreApiHelper.java:118)
在com.google.appengine.api.datastore.Query。(Query.java:112)
在org.datanucleus.store.appengine.query.DatastoreQuery.validate(DatastoreQuery.java:794)$在org.datanucleus.store.appengine.query.DatastoreQuery.performExecute(DatastoreQuery.java:225)b
$ b。在org.datanucleus.store.appengine.query.JPQLQuery.performExecute(JPQLQuery.java:80)



任何人都可以告诉我,为什么api环境在我从会话监听器调用时没有注册?

解决方案

Google App Engine不支持会话侦听器。会话侦听器可能会在本地调用,但没有API环境注册此线程。在生产监听器中甚至不会调用。


I am using Google App Engine, spring mvc and spring jpa dao. In my application i want to delete an entry from the database when session is destroyed. So i am using session listeners which actually wants to deletes an entry from the database through spring dao bean.

Here is my code in session listener

@Override
public void sessionDestroyed(HttpSessionEvent se) {
//get entry from session and now remove entry from database
getMyDao(se).delete(entry);
}

private MyDao getMyDao(HttpSessionEvent sessionEvent){

     HttpSession session = sessionEvent.getSession();

    ApplicationContext ctx = 
          WebApplicationContextUtils.
                getWebApplicationContext(session.getServletContext());

    MyDao dao = 
                (MyDao) ctx.getBean("myDao");

    return dao;
}

I am getting the below error when i try deleting

java.lang.NullPointerException: No API environment is registered for this thread. at com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppId(DatastoreApiHelper.java:108) at com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppIdNamespace(DatastoreApiHelper.java:118) at com.google.appengine.api.datastore.Query.(Query.java:112) at org.datanucleus.store.appengine.query.DatastoreQuery.validate(DatastoreQuery.java:794) at org.datanucleus.store.appengine.query.DatastoreQuery.performExecute(DatastoreQuery.java:225) at org.datanucleus.store.appengine.query.JPQLQuery.performExecute(JPQLQuery.java:80)

Can any one please tell me why api environment is not registered when i invoke from session listener?

解决方案

Google App Engine Doesn't support session listeners. Session listeners may get invoke in local, but No API environment is registered for this thread. In production listeners will not even invoke.

这篇关于Spring Mvc Google应用程序引擎中的会话监听器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆