2013-02-20 64 views
-1

我使用的Liferay 6.1和创建我的自定义portlet和我使用自定义查询直接从数据库获取记录如下....org.apache.tomcat.dbcp.dbcp.SQLNestedException:无法获得连接,池错误超时等待空闲对象?

public List<DashBoardBean> GetPieChartDataForCampaignbyOrganization(
      ThemeDisplay pThemeDisplay) { 

     log.info("In GetPieChartDataForCampaignbyOrganization "); 
     Context CtxObj; 
     long pParentOrgId; 
     ResultSet advResultSet = null; 
     List<DashBoardBean> dashboardbeanObjList = new ArrayList<DashBoardBean>(); 
     try { 

      CtxObj = new InitialContext(); 
      DataSource DsObj = (DataSource) CtxObj 
        .lookup("java:comp/env/jdbc/Liferay"); 
      Connection ConObj = DsObj.getConnection(); 
      Statement sStmtObj = ConObj.createStatement(); 

      advResultSet = sStmtObj 
        .executeQuery("MY CUSTOM QUERY WILL BE HERE"); 
      while (advResultSet.next()) { 
       DashBoardBean dashboardbeanObj = new DashBoardBean(); 
       dashboardbeanObj 
         .setsOrganizationName(advResultSet.getString(1)); 
       dashboardbeanObj.setlOrganizationCount(advResultSet.getLong(2)); 
       dashboardbeanObjList.add(dashboardbeanObj); 
      } 
     } catch (NamingException e) { 
      // TODO Auto-generated catch block 
      dashboardbeanObjList = null; 
      e.printStackTrace(); 
     } catch (SQLException e) { 
      dashboardbeanObjList = null; 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (PortalException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (SystemException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     log.info("Leave GetPieChartDataForCampaignbyOrganization "); 
     return dashboardbeanObjList; 
    } 

以上是我的功能之一的代码片段...我有更多的5功能具有相同的结构...只是SQL查询是不同的功能...

现在问题是,我必须调用更多,然后在页面加载5这样的功能...所以当我用来频繁重新加载页面...它给我错误如下...

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object 
     at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:114) 
     at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) 
     at emenu.advertise.appbl.DashBoardCustomQuery.GetPieChartDataForCampaignStatus(DashBoardCustomQuery.java:112) 
     at emenu.advertise.appbl.DashBordBL.GetPieChartDataForCampaignStatus(DashBordBL.java:292) 
     at emenu.advertise.portlet.RestaurantPortlet.serveResource(RestaurantPortlet.java:402) 
     at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:118) 
     at com.liferay.portal.kernel.portlet.PortletFilterUtil.doFilter(PortletFilterUtil.java:71) 
     at com.liferay.portal.kernel.servlet.PortletServlet.service(PortletServlet.java:111) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:72) 
     at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:73) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684) 
     at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471) 
     at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402) 
     at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329) 
     at com.liferay.portlet.InvokerPortletImpl.invoke(InvokerPortletImpl.java:531) 
     at com.liferay.portlet.InvokerPortletImpl.invokeResource(InvokerPortletImpl.java:626) 
     at com.liferay.portlet.InvokerPortletImpl.serveResource(InvokerPortletImpl.java:436) 
     at com.liferay.portal.action.LayoutAction.processPortletRequest(LayoutAction.java:1075) 
     at com.liferay.portal.action.LayoutAction.processLayout(LayoutAction.java:719) 
     at com.liferay.portal.action.LayoutAction.execute(LayoutAction.java:249) 
     at ............................ 
.......java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
      at java.lang.Thread.run(Thread.java:619) 
     Caused by: java.util.NoSuchElementException: Timeout waiting for idle object 
      at org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1171) 
      at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106) 
      ... 131 more 
     09:24:11,163 INFO [http-bio-8080-exec-5][DashBoardCustomQuery:665] Leave GetHighestClickRestaurantName 
     09:24:11,163 INFO [http-bio-8080-exec-5][DashBoardCustomQuery:304] Leave GetLineChartDataForHighestClickedByRestaurant 
     09:24:11,164 INFO [http-bio-8080-exec-5][DashBordBL:166] Leave GetLineChartDataByRestaurant From DashBordBl 

我知道我做错了什么......但我不知道在哪里......也许这是因为它的SQL连接刚刚从服务器丢失///是因为我没有关闭连接......请帮助我......并纠正我在哪里错了......我刚刚给我的功能的一个例子,我用来从其他功能获取数据的方式...

回答

-1

我刚刚找到解决方案,因为我从来没有关闭连接对象后执行query.i做了如下工作,对我来说,try try catch后...

finally { 
      try { 
       if(CtxObj!=null) { 
        CtxObj.close(); 
        } 
        if(sStmtObj!=null){ 
         sStmtObj.close(); 
        } 
        if(ConObj!=null){ 
         ConObj.close(); 
        } 
      } catch (NamingException e) { 
       // TODO Auto-generated catch block 
       log.info(e); 
      } catch (SQLException e) { 
       // TODO Auto-generated catch block 
       log.info(e); 
      } 
     } 
相关问题