spring4+hibernate4,初始化时加载一个类,这个类用getcurrentsession(),报错“No Session found for cu”
在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吗?