hibernate进行分页时,sessionFactory为null报空指针异常

从网上查了许都,都没能解决,不知道是配置文件有问题,还是方法写的有问题

dao层实现类:

/**

  • @ClassName: BaseDaoImpl
  • @Description: 基础dao实现
  • @author john
  • @date 2015年2月26日 下午3:27:15
    */
    @SuppressWarnings("unchecked")
    public abstract class BaseDaoImpl implements BaseDao{
    @Resource
    private SessionFactory sessionFactory;
    protected Class clazz;

    public BaseDaoImpl() {
    ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
    this.clazz = (Class) pt.getActualTypeArguments()[0];
    System.out.println("class = " + clazz.getName()+" init over");
    }

    public void save(T entity) {
    getSession().persist(entity);
    }

    public void update(T entity) {
    getSession().update(entity);
    }

    public void delete(ID id) {
    Object obj = getSession().get(clazz, id);
    if(obj!=null) getSession().delete(obj);
    }

    public T getById(ID id) {
    if (id == null) {
    return null;
    }
    return (T) getSession().get(clazz, id);
    }

    public T loadById(ID id) {
    if (id == null) {
    return null;
    }
    return (T) getSession().load(clazz, id);
    }

    public List getByIds(ID[] ids) {
    if (ids == null || ids.length == 0) {
    return Collections.EMPTY_LIST;
    }

    List<T> list =  getSession().createQuery(//
            "FROM " + clazz.getSimpleName() + " WHERE id IN(:ids)")//
            .setParameterList("ids", ids)//
            .list();
    if(list == null) return Collections.EMPTY_LIST;
    return list;
    

    }

    public List getAll() {
    List list = getSession().createQuery(//
    "FROM " + clazz.getSimpleName())//
    .list();
    if(list == null) return Collections.EMPTY_LIST;
    return list;
    }

    public Long getCount(){
    return (Long)getSession().createQuery(//
    "SELECT COUNT(*) FROM "+ clazz.getSimpleName())//
    .uniqueResult();//
    }

    public List getByHQL(String strHQL, Object... params) {
    Query query = getSession().createQuery(strHQL);
    if (params!=null){
    for (int i = 0; i < params.length; i++){
    query.setParameter(i, params[i]);
    }
    }
    return query.list();
    }

    public PageBean getPageBean(int pageNum,int pageSize,HqlHelper hqlHelper) {
    System.out.println("pageNum:"+pageNum);
    System.out.println("pageSize:"+pageSize);
    System.out.println("BaseDaoImpl:"+hqlHelper);
    List parameters = hqlHelper.getParameters();
    System.out.println("parameters:"+parameters);
    System.out.println("@@@@"+hqlHelper.getQueryListHql());
    // 查询本页的数据列表
    Query listQuery = getSession().createQuery(hqlHelper.getQueryListHql());
    if (parameters != null && parameters.size() > 0) { // 设置参数
    for (int i = 0; i < parameters.size(); i++) {
    listQuery.setParameter(i, parameters.get(i));
    }
    }
    listQuery.setFirstResult((pageNum - 1) * pageSize);
    listQuery.setMaxResults(pageSize);
    List list = listQuery.list(); // 执行查询

    // 查询总记录数
    Query countQuery = getSession().createQuery(hqlHelper.getQueryCountHql());
    if (parameters != null && parameters.size() > 0) { // 设置参数
        for (int i = 0; i < parameters.size(); i++) {
            countQuery.setParameter(i, parameters.get(i));
        }
    }
    Long count = (Long) countQuery.uniqueResult(); // 执行查询
    return new PageBean(pageNum, pageSize, list, count.intValue());
    

    }

    protected Session getSession() {
    // if (null==sessionFactory.getCurrentSession()){
    // System.out.println("open获取session:"+sessionFactory.openSession());
    // return sessionFactory.openSession();
    // }
    System.out.println("sessionFactory="+sessionFactory);
    System.out.println("get获取session:"+sessionFactory.getCurrentSession());
    return sessionFactory.getCurrentSession();
    }

}

spring配置文件:
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.1.xsd ">

<!-- TODO -->
<context:component-scan base-package="org.bhr.dao" />
<context:component-scan base-package="org.bhr.service" />

<!-- TODO -->
<context:property-placeholder location="classpath:local_db.properties" />

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="user" value="${jdbc.user}"></property>
    <property name="password" value="${jdbc.password}"></property>
    <property name="driverClass" value="${jdbc.driverClass}"></property>
    <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>

    <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
    <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>

    <property name="testConnectionOnCheckin" value="true"></property>
    <property name="automaticTestTable" value="C3P0TestTable"></property>
    <property name="idleConnectionTestPeriod" value="18000"></property>
    <property name="maxIdleTime" value="25000"></property>
    <property name="testConnectionOnCheckout" value="true"></property>
</bean>

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
    <!-- TODO -->
    <property name="mappingLocations" value="classpath:org/bhr/po/*.hbm.xml"></property>

</bean>

<bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <!-- TODO -->
    <tx:attributes>
        <tx:method name="get*" read-only="true" />
        <tx:method name="find*" read-only="true" />
        <tx:method name="verify*" read-only="true" />
        <tx:method name="*" />
    </tx:attributes>
</tx:advice>

<aop:config>
    <!-- TODO -->
    <aop:pointcut expression="execution(* org.bhr.service.*.*(..))"
        id="txPointcut" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut" />
</aop:config>

报错信息:
当前页:1
每页显示记录大小:5
hql语句org.bhr.util.HqlHelper@1784aed1
class = java.io.Serializable init over
pageNum:1
pageSize:5
BaseDaoImpl:org.bhr.util.HqlHelper@1784aed1
parameters:[]
@@@@FROM WarnInfo o
sessionFactory=null
十二月 10, 2015 3:50:54 下午 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [springmvc] in context with path [/bhr] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException
at org.bhr.dao.impl.BaseDaoImpl.getSession(BaseDaoImpl.java:134)
at org.bhr.dao.impl.BaseDaoImpl.getPageBean(BaseDaoImpl.java:107)
at org.bhr.util.HqlHelper.buildPageBean(HqlHelper.java:148)
at org.bhr.web.controller.AdminInfoController.home(AdminInfoController.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:781)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:721)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:71)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2442)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2431)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:722)

dao层实现类:

/**

  • @ClassName: BaseDaoImpl
  • @Description: 基础dao实现
  • @author john
  • @date 2015年2月26日 下午3:27:15
    */
    @SuppressWarnings("unchecked")
    public abstract class BaseDaoImpl implements BaseDao{
    @Resource
    private SessionFactory sessionFactory;
    protected Class clazz;

    public BaseDaoImpl() {
    ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
    this.clazz = (Class) pt.getActualTypeArguments()[0];
    System.out.println("class = " + clazz.getName()+" init over");
    }

    public void save(T entity) {
    getSession().persist(entity);
    }

    public void update(T entity) {
    getSession().update(entity);
    }

    public void delete(ID id) {
    Object obj = getSession().get(clazz, id);
    if(obj!=null) getSession().delete(obj);
    }

    public T getById(ID id) {
    if (id == null) {
    return null;
    }
    return (T) getSession().get(clazz, id);
    }

    public T loadById(ID id) {
    if (id == null) {
    return null;
    }
    return (T) getSession().load(clazz, id);
    }

    public List getByIds(ID[] ids) {
    if (ids == null || ids.length == 0) {
    return Collections.EMPTY_LIST;
    }

    List<T> list =  getSession().createQuery(//
            "FROM " + clazz.getSimpleName() + " WHERE id IN(:ids)")//
            .setParameterList("ids", ids)//
            .list();
    if(list == null) return Collections.EMPTY_LIST;
    return list;
    

    }

    public List getAll() {
    List list = getSession().createQuery(//
    "FROM " + clazz.getSimpleName())//
    .list();
    if(list == null) return Collections.EMPTY_LIST;
    return list;
    }

    public Long getCount(){
    return (Long)getSession().createQuery(//
    "SELECT COUNT(*) FROM "+ clazz.getSimpleName())//
    .uniqueResult();//
    }

    public List getByHQL(String strHQL, Object... params) {
    Query query = getSession().createQuery(strHQL);
    if (params!=null){
    for (int i = 0; i < params.length; i++){
    query.setParameter(i, params[i]);
    }
    }
    return query.list();
    }

    public PageBean getPageBean(int pageNum,int pageSize,HqlHelper hqlHelper) {
    System.out.println("pageNum:"+pageNum);
    System.out.println("pageSize:"+pageSize);
    System.out.println("BaseDaoImpl:"+hqlHelper);
    List parameters = hqlHelper.getParameters();
    System.out.println("parameters:"+parameters);
    System.out.println("@@@@"+hqlHelper.getQueryListHql());
    // 查询本页的数据列表
    Query listQuery = getSession().createQuery(hqlHelper.getQueryListHql());
    if (parameters != null && parameters.size() > 0) { // 设置参数
    for (int i = 0; i < parameters.size(); i++) {
    listQuery.setParameter(i, parameters.get(i));
    }
    }
    listQuery.setFirstResult((pageNum - 1) * pageSize);
    listQuery.setMaxResults(pageSize);
    List list = listQuery.list(); // 执行查询

    // 查询总记录数
    Query countQuery = getSession().createQuery(hqlHelper.getQueryCountHql());
    if (parameters != null && parameters.size() > 0) { // 设置参数
        for (int i = 0; i < parameters.size(); i++) {
            countQuery.setParameter(i, parameters.get(i));
        }
    }
    Long count = (Long) countQuery.uniqueResult(); // 执行查询
    return new PageBean(pageNum, pageSize, list, count.intValue());
    

    }

    protected Session getSession() {
    // if (null==sessionFactory.getCurrentSession()){
    // System.out.println("open获取session:"+sessionFactory.openSession());
    // return sessionFactory.openSession();
    // }
    System.out.println("sessionFactory="+sessionFactory);
    System.out.println("get获取session:"+sessionFactory.getCurrentSession());
    return sessionFactory.getCurrentSession();
    }

}

spring配置文件:
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.1.xsd ">

<!-- TODO -->
<context:component-scan base-package="org.bhr.dao" />
<context:component-scan base-package="org.bhr.service" />

<!-- TODO -->
<context:property-placeholder location="classpath:local_db.properties" />

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="user" value="${jdbc.user}"></property>
    <property name="password" value="${jdbc.password}"></property>
    <property name="driverClass" value="${jdbc.driverClass}"></property>
    <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>

    <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
    <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>

    <property name="testConnectionOnCheckin" value="true"></property>
    <property name="automaticTestTable" value="C3P0TestTable"></property>
    <property name="idleConnectionTestPeriod" value="18000"></property>
    <property name="maxIdleTime" value="25000"></property>
    <property name="testConnectionOnCheckout" value="true"></property>
</bean>

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
    <!-- TODO -->
    <property name="mappingLocations" value="classpath:org/bhr/po/*.hbm.xml"></property>

</bean>

<bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <!-- TODO -->
    <tx:attributes>
        <tx:method name="get*" read-only="true" />
        <tx:method name="find*" read-only="true" />
        <tx:method name="verify*" read-only="true" />
        <tx:method name="*" />
    </tx:attributes>
</tx:advice>

<aop:config>
    <!-- TODO -->
    <aop:pointcut expression="execution(* org.bhr.service.*.*(..))"
        id="txPointcut" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut" />
</aop:config>

报错信息:
当前页:1
每页显示记录大小:5
hql语句org.bhr.util.HqlHelper@1784aed1
class = java.io.Serializable init over
pageNum:1
pageSize:5
BaseDaoImpl:org.bhr.util.HqlHelper@1784aed1
parameters:[]
@@@@FROM WarnInfo o
sessionFactory=null
十二月 10, 2015 3:50:54 下午 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [springmvc] in context with path [/bhr] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException
at org.bhr.dao.impl.BaseDaoImpl.getSession(BaseDaoImpl.java:134)
at org.bhr.dao.impl.BaseDaoImpl.getPageBean(BaseDaoImpl.java:107)
at org.bhr.util.HqlHelper.buildPageBean(HqlHelper.java:148)
at org.bhr.web.controller.AdminInfoController.home(AdminInfoController.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:781)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:721)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:71)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2442)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2431)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:722)

dao层实现类:

/**

  • @ClassName: BaseDaoImpl
  • @Description: 基础dao实现
  • @author john
  • @date 2015年2月26日 下午3:27:15
    */
    @SuppressWarnings("unchecked")
    public abstract class BaseDaoImpl implements BaseDao{
    @Resource
    private SessionFactory sessionFactory;
    protected Class clazz;

    public BaseDaoImpl() {
    ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
    this.clazz = (Class) pt.getActualTypeArguments()[0];
    System.out.println("class = " + clazz.getName()+" init over");
    }

    public void save(T entity) {
    getSession().persist(entity);
    }

    public void update(T entity) {
    getSession().update(entity);
    }

    public void delete(ID id) {
    Object obj = getSession().get(clazz, id);
    if(obj!=null) getSession().delete(obj);
    }

    public T getById(ID id) {
    if (id == null) {
    return null;
    }
    return (T) getSession().get(clazz, id);
    }

    public T loadById(ID id) {
    if (id == null) {
    return null;
    }
    return (T) getSession().load(clazz, id);
    }

    public List getByIds(ID[] ids) {
    if (ids == null || ids.length == 0) {
    return Collections.EMPTY_LIST;
    }

    List<T> list =  getSession().createQuery(//
            "FROM " + clazz.getSimpleName() + " WHERE id IN(:ids)")//
            .setParameterList("ids", ids)//
            .list();
    if(list == null) return Collections.EMPTY_LIST;
    return list;
    

    }

    public List getAll() {
    List list = getSession().createQuery(//
    "FROM " + clazz.getSimpleName())//
    .list();
    if(list == null) return Collections.EMPTY_LIST;
    return list;
    }

    public Long getCount(){
    return (Long)getSession().createQuery(//
    "SELECT COUNT(*) FROM "+ clazz.getSimpleName())//
    .uniqueResult();//
    }

    public List getByHQL(String strHQL, Object... params) {
    Query query = getSession().createQuery(strHQL);
    if (params!=null){
    for (int i = 0; i < params.length; i++){
    query.setParameter(i, params[i]);
    }
    }
    return query.list();
    }

    public PageBean getPageBean(int pageNum,int pageSize,HqlHelper hqlHelper) {
    System.out.println("pageNum:"+pageNum);
    System.out.println("pageSize:"+pageSize);
    System.out.println("BaseDaoImpl:"+hqlHelper);
    List parameters = hqlHelper.getParameters();
    System.out.println("parameters:"+parameters);
    System.out.println("@@@@"+hqlHelper.getQueryListHql());
    // 查询本页的数据列表
    Query listQuery = getSession().createQuery(hqlHelper.getQueryListHql());
    if (parameters != null && parameters.size() > 0) { // 设置参数
    for (int i = 0; i < parameters.size(); i++) {
    listQuery.setParameter(i, parameters.get(i));
    }
    }
    listQuery.setFirstResult((pageNum - 1) * pageSize);
    listQuery.setMaxResults(pageSize);
    List list = listQuery.list(); // 执行查询

    // 查询总记录数
    Query countQuery = getSession().createQuery(hqlHelper.getQueryCountHql());
    if (parameters != null && parameters.size() > 0) { // 设置参数
        for (int i = 0; i < parameters.size(); i++) {
            countQuery.setParameter(i, parameters.get(i));
        }
    }
    Long count = (Long) countQuery.uniqueResult(); // 执行查询
    return new PageBean(pageNum, pageSize, list, count.intValue());
    

    }

    protected Session getSession() {
    // if (null==sessionFactory.getCurrentSession()){
    // System.out.println("open获取session:"+sessionFactory.openSession());
    // return sessionFactory.openSession();
    // }
    System.out.println("sessionFactory="+sessionFactory);
    System.out.println("get获取session:"+sessionFactory.getCurrentSession());
    return sessionFactory.getCurrentSession();
    }

}

spring配置文件:
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.1.xsd ">

<!-- TODO -->
<context:component-scan base-package="org.bhr.dao" />
<context:component-scan base-package="org.bhr.service" />

<!-- TODO -->
<context:property-placeholder location="classpath:local_db.properties" />

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="user" value="${jdbc.user}"></property>
    <property name="password" value="${jdbc.password}"></property>
    <property name="driverClass" value="${jdbc.driverClass}"></property>
    <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>

    <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
    <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>

    <property name="testConnectionOnCheckin" value="true"></property>
    <property name="automaticTestTable" value="C3P0TestTable"></property>
    <property name="idleConnectionTestPeriod" value="18000"></property>
    <property name="maxIdleTime" value="25000"></property>
    <property name="testConnectionOnCheckout" value="true"></property>
</bean>

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
    <!-- TODO -->
    <property name="mappingLocations" value="classpath:org/bhr/po/*.hbm.xml"></property>

</bean>

<bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <!-- TODO -->
    <tx:attributes>
        <tx:method name="get*" read-only="true" />
        <tx:method name="find*" read-only="true" />
        <tx:method name="verify*" read-only="true" />
        <tx:method name="*" />
    </tx:attributes>
</tx:advice>

<aop:config>
    <!-- TODO -->
    <aop:pointcut expression="execution(* org.bhr.service.*.*(..))"
        id="txPointcut" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut" />
</aop:config>

报错信息:
当前页:1
每页显示记录大小:5
hql语句org.bhr.util.HqlHelper@1784aed1
class = java.io.Serializable init over
pageNum:1
pageSize:5
BaseDaoImpl:org.bhr.util.HqlHelper@1784aed1
parameters:[]
@@@@FROM WarnInfo o
sessionFactory=null
十二月 10, 2015 3:50:54 下午 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [springmvc] in context with path [/bhr] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException
at org.bhr.dao.impl.BaseDaoImpl.getSession(BaseDaoImpl.java:134)
at org.bhr.dao.impl.BaseDaoImpl.getPageBean(BaseDaoImpl.java:107)
at org.bhr.util.HqlHelper.buildPageBean(HqlHelper.java:148)
at org.bhr.web.controller.AdminInfoController.home(AdminInfoController.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:781)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:721)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:71)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2442)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2431)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:722)

dao层实现类:

/**

  • @ClassName: BaseDaoImpl
  • @Description: 基础dao实现
  • @author john
  • @date 2015年2月26日 下午3:27:15
    */
    @SuppressWarnings("unchecked")
    public abstract class BaseDaoImpl implements BaseDao{
    @Resource
    private SessionFactory sessionFactory;
    protected Class clazz;

    public BaseDaoImpl() {
    ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
    this.clazz = (Class) pt.getActualTypeArguments()[0];
    System.out.println("class = " + clazz.getName()+" init over");
    }

    public void save(T entity) {
    getSession().persist(entity);
    }

    public void update(T entity) {
    getSession().update(entity);
    }

    public void delete(ID id) {
    Object obj = getSession().get(clazz, id);
    if(obj!=null) getSession().delete(obj);
    }

    public T getById(ID id) {
    if (id == null) {
    return null;
    }
    return (T) getSession().get(clazz, id);
    }

    public T loadById(ID id) {
    if (id == null) {
    return null;
    }
    return (T) getSession().load(clazz, id);
    }

    public List getByIds(ID[] ids) {
    if (ids == null || ids.length == 0) {
    return Collections.EMPTY_LIST;
    }

    List<T> list =  getSession().createQuery(//
            "FROM " + clazz.getSimpleName() + " WHERE id IN(:ids)")//
            .setParameterList("ids", ids)//
            .list();
    if(list == null) return Collections.EMPTY_LIST;
    return list;
    

    }

    public List getAll() {
    List list = getSession().createQuery(//
    "FROM " + clazz.getSimpleName())//
    .list();
    if(list == null) return Collections.EMPTY_LIST;
    return list;
    }

    public Long getCount(){
    return (Long)getSession().createQuery(//
    "SELECT COUNT(*) FROM "+ clazz.getSimpleName())//
    .uniqueResult();//
    }

    public List getByHQL(String strHQL, Object... params) {
    Query query = getSession().createQuery(strHQL);
    if (params!=null){
    for (int i = 0; i < params.length; i++){
    query.setParameter(i, params[i]);
    }
    }
    return query.list();
    }

    public PageBean getPageBean(int pageNum,int pageSize,HqlHelper hqlHelper) {
    System.out.println("pageNum:"+pageNum);
    System.out.println("pageSize:"+pageSize);
    System.out.println("BaseDaoImpl:"+hqlHelper);
    List parameters = hqlHelper.getParameters();
    System.out.println("parameters:"+parameters);
    System.out.println("@@@@"+hqlHelper.getQueryListHql());
    // 查询本页的数据列表
    Query listQuery = getSession().createQuery(hqlHelper.getQueryListHql());
    if (parameters != null && parameters.size() > 0) { // 设置参数
    for (int i = 0; i < parameters.size(); i++) {
    listQuery.setParameter(i, parameters.get(i));
    }
    }
    listQuery.setFirstResult((pageNum - 1) * pageSize);
    listQuery.setMaxResults(pageSize);
    List list = listQuery.list(); // 执行查询

    // 查询总记录数
    Query countQuery = getSession().createQuery(hqlHelper.getQueryCountHql());
    if (parameters != null && parameters.size() > 0) { // 设置参数
        for (int i = 0; i < parameters.size(); i++) {
            countQuery.setParameter(i, parameters.get(i));
        }
    }
    Long count = (Long) countQuery.uniqueResult(); // 执行查询
    return new PageBean(pageNum, pageSize, list, count.intValue());
    

    }

    protected Session getSession() {
    // if (null==sessionFactory.getCurrentSession()){
    // System.out.println("open获取session:"+sessionFactory.openSession());
    // return sessionFactory.openSession();
    // }
    System.out.println("sessionFactory="+sessionFactory);
    System.out.println("get获取session:"+sessionFactory.getCurrentSession());
    return sessionFactory.getCurrentSession();
    }

}

spring配置文件:
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.1.xsd ">

<!-- TODO -->
<context:component-scan base-package="org.bhr.dao" />
<context:component-scan base-package="org.bhr.service" />

<!-- TODO -->
<context:property-placeholder location="classpath:local_db.properties" />

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="user" value="${jdbc.user}"></property>
    <property name="password" value="${jdbc.password}"></property>
    <property name="driverClass" value="${jdbc.driverClass}"></property>
    <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>

    <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
    <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>

    <property name="testConnectionOnCheckin" value="true"></property>
    <property name="automaticTestTable" value="C3P0TestTable"></property>
    <property name="idleConnectionTestPeriod" value="18000"></property>
    <property name="maxIdleTime" value="25000"></property>
    <property name="testConnectionOnCheckout" value="true"></property>
</bean>

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
    <!-- TODO -->
    <property name="mappingLocations" value="classpath:org/bhr/po/*.hbm.xml"></property>

</bean>

<bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <!-- TODO -->
    <tx:attributes>
        <tx:method name="get*" read-only="true" />
        <tx:method name="find*" read-only="true" />
        <tx:method name="verify*" read-only="true" />
        <tx:method name="*" />
    </tx:attributes>
</tx:advice>

<aop:config>
    <!-- TODO -->
    <aop:pointcut expression="execution(* org.bhr.service.*.*(..))"
        id="txPointcut" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut" />
</aop:config>

报错信息:
当前页:1
每页显示记录大小:5
hql语句org.bhr.util.HqlHelper@1784aed1
class = java.io.Serializable init over
pageNum:1
pageSize:5
BaseDaoImpl:org.bhr.util.HqlHelper@1784aed1
parameters:[]
@@@@FROM WarnInfo o
sessionFactory=null
十二月 10, 2015 3:50:54 下午 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [springmvc] in context with path [/bhr] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException
at org.bhr.dao.impl.BaseDaoImpl.getSession(BaseDaoImpl.java:134)
at org.bhr.dao.impl.BaseDaoImpl.getPageBean(BaseDaoImpl.java:107)
at org.bhr.util.HqlHelper.buildPageBean(HqlHelper.java:148)
at org.bhr.web.controller.AdminInfoController.home(AdminInfoController.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:781)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:721)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:71)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2442)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2431)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:722)

dao层实现类:

/**

  • @ClassName: BaseDaoImpl
  • @Description: 基础dao实现
  • @author john
  • @date 2015年2月26日 下午3:27:15
    */
    @SuppressWarnings("unchecked")
    public abstract class BaseDaoImpl implements BaseDao{
    @Resource
    private SessionFactory sessionFactory;
    protected Class clazz;

    public BaseDaoImpl() {
    ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
    this.clazz = (Class) pt.getActualTypeArguments()[0];
    System.out.println("class = " + clazz.getName()+" init over");
    }

    public void save(T entity) {
    getSession().persist(entity);
    }

    public void update(T entity) {
    getSession().update(entity);
    }

    public void delete(ID id) {
    Object obj = getSession().get(clazz, id);
    if(obj!=null) getSession().delete(obj);
    }

    public T getById(ID id) {
    if (id == null) {
    return null;
    }
    return (T) getSession().get(clazz, id);
    }

    public T loadById(ID id) {
    if (id == null) {
    return null;
    }
    return (T) getSession().load(clazz, id);
    }

    public List getByIds(ID[] ids) {
    if (ids == null || ids.length == 0) {
    return Collections.EMPTY_LIST;
    }

    List<T> list =  getSession().createQuery(//
            "FROM " + clazz.getSimpleName() + " WHERE id IN(:ids)")//
            .setParameterList("ids", ids)//
            .list();
    if(list == null) return Collections.EMPTY_LIST;
    return list;
    

    }

    public List getAll() {
    List list = getSession().createQuery(//
    "FROM " + clazz.getSimpleName())//
    .list();
    if(list == null) return Collections.EMPTY_LIST;
    return list;
    }

    public Long getCount(){
    return (Long)getSession().createQuery(//
    "SELECT COUNT(*) FROM "+ clazz.getSimpleName())//
    .uniqueResult();//
    }

    public List getByHQL(String strHQL, Object... params) {
    Query query = getSession().createQuery(strHQL);
    if (params!=null){
    for (int i = 0; i < params.length; i++){
    query.setParameter(i, params[i]);
    }
    }
    return query.list();
    }

    public PageBean getPageBean(int pageNum,int pageSize,HqlHelper hqlHelper) {
    System.out.println("pageNum:"+pageNum);
    System.out.println("pageSize:"+pageSize);
    System.out.println("BaseDaoImpl:"+hqlHelper);
    List parameters = hqlHelper.getParameters();
    System.out.println("parameters:"+parameters);
    System.out.println("@@@@"+hqlHelper.getQueryListHql());
    // 查询本页的数据列表
    Query listQuery = getSession().createQuery(hqlHelper.getQueryListHql());
    if (parameters != null && parameters.size() > 0) { // 设置参数
    for (int i = 0; i < parameters.size(); i++) {
    listQuery.setParameter(i, parameters.get(i));
    }
    }
    listQuery.setFirstResult((pageNum - 1) * pageSize);
    listQuery.setMaxResults(pageSize);
    List list = listQuery.list(); // 执行查询

    // 查询总记录数
    Query countQuery = getSession().createQuery(hqlHelper.getQueryCountHql());
    if (parameters != null && parameters.size() > 0) { // 设置参数
        for (int i = 0; i < parameters.size(); i++) {
            countQuery.setParameter(i, parameters.get(i));
        }
    }
    Long count = (Long) countQuery.uniqueResult(); // 执行查询
    return new PageBean(pageNum, pageSize, list, count.intValue());
    

    }

    protected Session getSession() {
    // if (null==sessionFactory.getCurrentSession()){
    // System.out.println("open获取session:"+sessionFactory.openSession());
    // return sessionFactory.openSession();
    // }
    System.out.println("sessionFactory="+sessionFactory);
    System.out.println("get获取session:"+sessionFactory.getCurrentSession());
    return sessionFactory.getCurrentSession();
    }

}

spring配置文件:
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.1.xsd ">

<!-- TODO -->
<context:component-scan base-package="org.bhr.dao" />
<context:component-scan base-package="org.bhr.service" />

<!-- TODO -->
<context:property-placeholder location="classpath:local_db.properties" />

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="user" value="${jdbc.user}"></property>
    <property name="password" value="${jdbc.password}"></property>
    <property name="driverClass" value="${jdbc.driverClass}"></property>
    <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>

    <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
    <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>

    <property name="testConnectionOnCheckin" value="true"></property>
    <property name="automaticTestTable" value="C3P0TestTable"></property>
    <property name="idleConnectionTestPeriod" value="18000"></property>
    <property name="maxIdleTime" value="25000"></property>
    <property name="testConnectionOnCheckout" value="true"></property>
</bean>

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
    <!-- TODO -->
    <property name="mappingLocations" value="classpath:org/bhr/po/*.hbm.xml"></property>

</bean>

<bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <!-- TODO -->
    <tx:attributes>
        <tx:method name="get*" read-only="true" />
        <tx:method name="find*" read-only="true" />
        <tx:method name="verify*" read-only="true" />
        <tx:method name="*" />
    </tx:attributes>
</tx:advice>

<aop:config>
    <!-- TODO -->
    <aop:pointcut expression="execution(* org.bhr.service.*.*(..))"
        id="txPointcut" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut" />
</aop:config>

报错信息:
当前页:1
每页显示记录大小:5
hql语句org.bhr.util.HqlHelper@1784aed1
class = java.io.Serializable init over
pageNum:1
pageSize:5
BaseDaoImpl:org.bhr.util.HqlHelper@1784aed1
parameters:[]
@@@@FROM WarnInfo o
sessionFactory=null
十二月 10, 2015 3:50:54 下午 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [springmvc] in context with path [/bhr] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException
at org.bhr.dao.impl.BaseDaoImpl.getSession(BaseDaoImpl.java:134)
at org.bhr.dao.impl.BaseDaoImpl.getPageBean(BaseDaoImpl.java:107)
at org.bhr.util.HqlHelper.buildPageBean(HqlHelper.java:148)
at org.bhr.web.controller.AdminInfoController.home(AdminInfoController.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:781)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:721)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:71)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2442)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2431)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:722)

dao层实现类:

/**

  • @ClassName: BaseDaoImpl
  • @Description: 基础dao实现
  • @author john
  • @date 2015年2月26日 下午3:27:15
    */
    @SuppressWarnings("unchecked")
    public abstract class BaseDaoImpl implements BaseDao{
    @Resource
    private SessionFactory sessionFactory;
    protected Class clazz;

    public BaseDaoImpl() {
    ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
    this.clazz = (Class) pt.getActualTypeArguments()[0];
    System.out.println("class = " + clazz.getName()+" init over");
    }

    public void save(T entity) {
    getSession().persist(entity);
    }

    public void update(T entity) {
    getSession().update(entity);
    }

    public void delete(ID id) {
    Object obj = getSession().get(clazz, id);
    if(obj!=null) getSession().delete(obj);
    }

    public T getById(ID id) {
    if (id == null) {
    return null;
    }
    return (T) getSession().get(clazz, id);
    }

    public T loadById(ID id) {
    if (id == null) {
    return null;
    }
    return (T) getSession().load(clazz, id);
    }

    public List getByIds(ID[] ids) {
    if (ids == null || ids.length == 0) {
    return Collections.EMPTY_LIST;
    }

    List<T> list =  getSession().createQuery(//
            "FROM " + clazz.getSimpleName() + " WHERE id IN(:ids)")//
            .setParameterList("ids", ids)//
            .list();
    if(list == null) return Collections.EMPTY_LIST;
    return list;
    

    }

    public List getAll() {
    List list = getSession().createQuery(//
    "FROM " + clazz.getSimpleName())//
    .list();
    if(list == null) return Collections.EMPTY_LIST;
    return list;
    }

    public Long getCount(){
    return (Long)getSession().createQuery(//
    "SELECT COUNT(*) FROM "+ clazz.getSimpleName())//
    .uniqueResult();//
    }

    public List getByHQL(String strHQL, Object... params) {
    Query query = getSession().createQuery(strHQL);
    if (params!=null){
    for (int i = 0; i < params.length; i++){
    query.setParameter(i, params[i]);
    }
    }
    return query.list();
    }

    public PageBean getPageBean(int pageNum,int pageSize,HqlHelper hqlHelper) {
    System.out.println("pageNum:"+pageNum);
    System.out.println("pageSize:"+pageSize);
    System.out.println("BaseDaoImpl:"+hqlHelper);
    List parameters = hqlHelper.getParameters();
    System.out.println("parameters:"+parameters);
    System.out.println("@@@@"+hqlHelper.getQueryListHql());
    // 查询本页的数据列表
    Query listQuery = getSession().createQuery(hqlHelper.getQueryListHql());
    if (parameters != null && parameters.size() > 0) { // 设置参数
    for (int i = 0; i < parameters.size(); i++) {
    listQuery.setParameter(i, parameters.get(i));
    }
    }
    listQuery.setFirstResult((pageNum - 1) * pageSize);
    listQuery.setMaxResults(pageSize);
    List list = listQuery.list(); // 执行查询

    // 查询总记录数
    Query countQuery = getSession().createQuery(hqlHelper.getQueryCountHql());
    if (parameters != null && parameters.size() > 0) { // 设置参数
        for (int i = 0; i < parameters.size(); i++) {
            countQuery.setParameter(i, parameters.get(i));
        }
    }
    Long count = (Long) countQuery.uniqueResult(); // 执行查询
    return new PageBean(pageNum, pageSize, list, count.intValue());
    

    }

    protected Session getSession() {
    // if (null==sessionFactory.getCurrentSession()){
    // System.out.println("open获取session:"+sessionFactory.openSession());
    // return sessionFactory.openSession();
    // }
    System.out.println("sessionFactory="+sessionFactory);
    System.out.println("get获取session:"+sessionFactory.getCurrentSession());
    return sessionFactory.getCurrentSession();
    }

}

spring配置文件:
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.1.xsd ">

<!-- TODO -->
<context:component-scan base-package="org.bhr.dao" />
<context:component-scan base-package="org.bhr.service" />

<!-- TODO -->
<context:property-placeholder location="classpath:local_db.properties" />

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="user" value="${jdbc.user}"></property>
    <property name="password" value="${jdbc.password}"></property>
    <property name="driverClass" value="${jdbc.driverClass}"></property>
    <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>

    <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
    <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>

    <property name="testConnectionOnCheckin" value="true"></property>
    <property name="automaticTestTable" value="C3P0TestTable"></property>
    <property name="idleConnectionTestPeriod" value="18000"></property>
    <property name="maxIdleTime" value="25000"></property>
    <property name="testConnectionOnCheckout" value="true"></property>
</bean>

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
    <!-- TODO -->
    <property name="mappingLocations" value="classpath:org/bhr/po/*.hbm.xml"></property>

</bean>

<bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <!-- TODO -->
    <tx:attributes>
        <tx:method name="get*" read-only="true" />
        <tx:method name="find*" read-only="true" />
        <tx:method name="verify*" read-only="true" />
        <tx:method name="*" />
    </tx:attributes>
</tx:advice>

<aop:config>
    <!-- TODO -->
    <aop:pointcut expression="execution(* org.bhr.service.*.*(..))"
        id="txPointcut" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut" />
</aop:config>

报错信息:
当前页:1
每页显示记录大小:5
hql语句org.bhr.util.HqlHelper@1784aed1
class = java.io.Serializable init over
pageNum:1
pageSize:5
BaseDaoImpl:org.bhr.util.HqlHelper@1784aed1
parameters:[]
@@@@FROM WarnInfo o
sessionFactory=null
十二月 10, 2015 3:50:54 下午 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [springmvc] in context with path [/bhr] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException
at org.bhr.dao.impl.BaseDaoImpl.getSession(BaseDaoImpl.java:134)
at org.bhr.dao.impl.BaseDaoImpl.getPageBean(BaseDaoImpl.java:107)
at org.bhr.util.HqlHelper.buildPageBean(HqlHelper.java:148)
at org.bhr.web.controller.AdminInfoController.home(AdminInfoController.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:781)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:721)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:71)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2442)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2431)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:722)