spring4+hibernate4,初始化时加载一个类,这个类用getcurrentsession(),报错“No Session found for cu”

boluoy 2018-01-15 10:02:43
在controller里用getcurrentsession()可以获取到session。
加了个servlert配置成load-on-startup,就报错“No Session found for current thread”,配置如下,
<servlet>
<servlet-name>Jnotify</servlet-name>
<servlet-class>com.test.cn.controller.Jnotify</servlet-class>
<load-on-startup>5</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>Jnotify</servlet-name>
<url-pattern>/Jnotify.action</url-pattern>
</servlet-mapping>
需要做的事写在init函数里,在这个类里获取不到session,我把dao层的getcurrentsession()改成opensession()就可以,为啥呢?是不是因为我的service是从容器里拿出来的
ApplicationContext ctx = (ApplicationContext) WebApplicationContextUtils.getWebApplicationContext(getServletContext());
glmarkService = (GlmarkService)((BeanFactory) ctx).getBean("glmarkService");

网上查了些资料,用getcurrentsession,要配置了TranactionManager加上@Transactional注解,Spring会在开始事务之前通过AOP的方式为当前线程创建Session,用的时候就可以通过getcurrentsession获取。
这些我都加了所以正常的controller可以用getcurrentsession,那么servlet为什么不行,是因为这个servlet调用service的时候spring还没为当前线程创建session吗?
...全文
457 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
boluoy 2018-02-26
  • 打赏
  • 举报
回复
引用 2 楼 defonds 的回复:
新创建的线程,通过请求处理线程把 session 给它
具体怎么操作?
Defonds 2018-01-23
  • 打赏
  • 举报
回复
新创建的线程,通过请求处理线程把 session 给它
boluoy 2018-01-15
  • 打赏
  • 举报
回复
我发现在servlet和filter的init函数里用getcurrentsession()都获取不到session,但是在doget(),dofilter()函数里就可以。而且如果在doget(),dofiler()函数里再开一个线程也获取不到session。难道通过spring管理的session是和和待请求的线程绑定的,一般线程无法创建session?

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧