<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-42  評論-349  文章-4  trackbacks-0

    (原創,殘夢追月轉載請注明!)    
    原來在我的csdn上,轉帖過來。

        使用jdbc連接數據庫所有功能都沒問題,發布到tomcat中也沒問題,可是如果使用tomcat的數據源,來連接數據庫,開始很正常,但是刷新幾次就會出現這個異常……

      

             2008-04-26 22:35:40,812 WARN [org.hibernate.util.JDBCExceptionReporter] - SQL Error: 0, SQLState: null

     2008-04-26 22:35:40,812 ERROR [org.hibernate.util.JDBCExceptionReporter] - Cannot get a connection, pool error Timeout waiting for idle object

     2008-04-26 22:35:40,812 WARN [org.hibernate.util.JDBCExceptionReporter] - SQL Error: 0, SQLState: null

     2008-04-26 22:35:40,812 ERROR [org.hibernate.util.JDBCExceptionReporter] - Cannot get a connection, pool error Timeout waiting for idle object

     2008-04-26 22:35:40,812 ERROR [com.dao.MessageDAO] - find all failed

     org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Cannot open connection; uncategorized SQLException for SQL [???]; SQL state [null]; error code [0]; Cannot get a connection, pool error Timeout waiting for idle object; nested exception is org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object

    Caused by:

    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:104)

        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880) 

        at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81)

    ……………………


    開始弄了半天也不知道怎么回事,后來發現是我自己寫的分頁代碼有問題……原來的代碼如下:


     1    /**
     2      * 自定義的,用屬性模糊查詢
     3      *
     4      * */
     5     public List find(String propertyName, Object value) {
     6 
     7         log.debug("finding Message instance with property: " + propertyName
     8 
     9               + ", value: " + value);
    10 
    11         try {
    12 
    13            String queryString = "from Message as model where model."
    14 
    15                                    + propertyName + " like "+value+" order by model.time desc";          
    16 
    17            return getHibernateTemplate().find(queryString);
    18 
    19         } catch (RuntimeException re) {
    20 
    21            log.error("find by property name failed", re);
    22 
    23            throw re;
    24 
    25         }
    26 
    27       }
    28 
    29 
    30     /**
    31      *
    32      * 自定義的方法,獲取指定頁的數據
    33      *
    34      * */
    35     public List gotoPage(int page,int pageSize){
    36 
    37        
    38 
    39         int totItem = this.findAll().size();//記錄總條數
    40 
    41         int pageNum = totItem / pageSize +1;//總頁數
    42 
    43         int begin = 0;//當前起始記錄數
    44 
    45        
    46         begin=page*pageSize-pageSize+1//計算當前起始位置
    47 
    48 
    49         Session s =this.getSession();
    50 
    51         String hql = "from Message message order by message.time desc";
    52 
    53         Query q =s.createQuery(hql);
    54 
    55         q.setFirstResult(begin);
    56 
    57         q.setMaxResults(pageSize);      
    58 
    59         return q.list();
    60 
    61     }

    在這句中:
                    Session s =this.getSession();

            String hql = "from Message message order by message.time desc";

            Query q =s.createQuery(hql);

       查詢數據時,Spring并不能夠自動管理連接,也就是說,在使用中這幾句代碼重視不段的獲取數據庫的連接,每調用一次就申請一個連接……直到 tomcat連接池中的連接耗盡……所以就再也申請不到連接了……出現了這個異常,解決辦法是使用事務來管理這段代碼,讓Spring自動管理這段代碼中申請的連接。我使用了Spring AOP自動事務代理……配置文件如下……


     1     <bean id="JndiDataSource"
     2         class="org.springframework.jndi.JndiObjectFactoryBean">
     3         <property name="jndiName">
     4             <value>java:comp/env/SqlServer</value>
     5         </property>
     6         <property name="resourceRef">
     7             <value>true</value>
     8         </property>
     9     </bean>
    10 
    11     <!-- hibernate的會話工廠 -->
    12     <bean id="sessionFactory"
    13         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    14         <property name="dataSource">
    15             <ref bean="JndiDataSource"></ref>
    16         </property>
    17         <property name="hibernateProperties">
    18             <props>
    19                 <prop key="hibernate.dialect">
    20                     org.hibernate.dialect.SQLServerDialect
    21                 </prop>
    22                 <!-- 顯示SQL,為了方便測試 -->
    23                 <prop key="hibernate.show_sql">true</prop>
    24             </props>
    25         </property>
    26         <property name="mappingResources">
    27             <list><!-- 映射文件 -->
    28                 <value>./Message.hbm.xml</value>
    29                 <value>./Setting.hbm.xml</value>
    30                 <value>./Admin.hbm.xml</value>
    31             </list>
    32         </property>
    33     </bean>
    34 
    35     <!-- 事務管理器 -->
    36     <bean id="transactionManger"
    37         class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    38         <property name="sessionFactory">
    39             <ref bean="sessionFactory" />
    40         </property>
    41     </bean>
    42 
    43     <!--   配置事務攔截器-->
    44 
    45     <bean id="transactionInterceptor"
    46         class="org.springframework.transaction.interceptor.TransactionInterceptor">
    47         <property name="transactionManager">
    48             <ref bean="transactionManger" />
    49         </property>
    50         <!--   下面定義事務傳播屬性-->
    51         <property name="transactionAttributes">
    52             <props>
    53                 <prop key="find*">PROPAGATION_REQUIRED</prop>
    54                 <prop key="delete*">PROPAGATION_REQUIRED</prop>
    55                 <prop key="save*">PROPAGATION_REQUIRED</prop>
    56                 <prop key="merge*">PROPAGATION_REQUIRED</prop>
    57                 <prop key="attach*">PROPAGATION_REQUIRED</prop>           
    58                 <prop key="gotoPage">PROPAGATION_REQUIRED</prop>
    59             </props>
    60         </property>
    61     </bean>
    62 
    63     <!--  自動代理 -->
    64     <bean id="autoBeanNameProxyCreator"
    65         class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    66         <property name="beanNames">
    67             <list>
    68                 <value>*DAO</value>            
    69                 <value>gotoPage</value>
    70                 <value>find</value>
    71             </list>
    72         </property>
    73         <property name="interceptorNames">
    74             <list>
    75                 <idref local="transactionInterceptor" />
    76             </list>
    77         </property>
    78         <!--  這里的配置是必須的,否則無法完成代理的類型轉化 這是使用CGLIB來生成代理 -->
    79         <property name="proxyTargetClass" value="true"/>
    80     </bean>
    81 
    82     <bean id="MessageDAO" class="com.dao.MessageDAO">
    83         <property name="sessionFactory">
    84             <ref bean="sessionFactory"></ref>
    85         </property>
    86     </bean>
    87 
    88     <bean id="SettingDAO" class="com.dao.SettingDAO">
    89         <property name="sessionFactory">
    90             <ref bean="sessionFactory"></ref>
    91         </property>
    92     </bean>
    93 
    94     <bean id="AdminDAO" class="com.dao.AdminDAO">
    95         <property name="sessionFactory">
    96             <ref bean="sessionFactory"></ref>
    97         </property>
    98     </bean>
    OK,問題成功解決!速度好像還快些!

    By:殘夢追月
    posted on 2008-07-15 17:57 殘夢追月 閱讀(10511) 評論(9)  編輯  收藏 所屬分類: SpringhibernateTomcat

    評論:
    # re: 在Spring+hibernate中不能釋放tomcat連接池中連接的解決辦法 2008-07-15 22:12 | Robin's Java World
    沒有說到點子上。
    真正的原因應該是沒有commit,所以沒有正常釋放連接。  回復  更多評論
      
    # re: 在Spring+hibernate中不能釋放tomcat連接池中連接的解決辦法 2008-07-16 01:10 | YYX
    在hibernateDaoSupport的支持下,session不該這樣來獲得的。
    最好的方法是用execute()回調,session會作為HibernateCallBack匿名內部類的doInHibernate方法的傳入參數。

    你如果硬要用getSession(),那么請參考execute()方法源碼的寫法。  回復  更多評論
      
    # re: 在Spring+hibernate中不能釋放tomcat連接池中連接的解決辦法 2008-07-16 09:51 | 殘夢追月
    @YYX
    謝謝!請問如果用我這樣的方法的結果就是無法正常釋放連接嗎?用回調接口會自動釋放連接?  回復  更多評論
      
    # re: 在Spring+hibernate中不能釋放tomcat連接池中連接的解決辦法 2008-07-16 09:52 | 殘夢追月
    @Robin's Java World
    :-),謝謝,我說了半天也沒說出真正原因,只是把現象寫出來老!謝謝,您才是透過現象看本質啊。  回復  更多評論
      
    # re: 在Spring+hibernate中不能釋放tomcat連接池中連接的解決辦法 2008-10-08 16:37 | 阿什頓
    我也出現這錯誤
    commit 什么意思?
    沒有使用事務操作的原因不?  回復  更多評論
      
    # re: 在Spring+hibernate中不能釋放tomcat連接池中連接的解決辦法 2008-10-15 22:13 | Bulejava
    復制你的事物管理代碼 還是沒用,刷新到10就掛了。  回復  更多評論
      
    # re: 在Spring+hibernate中不能釋放tomcat連接池中連接的解決辦法 2009-07-17 11:09 | 趙小明
    用了你的代碼,還是不管用  回復  更多評論
      
    # re: 在Spring+hibernate中不能釋放tomcat連接池中連接的解決辦法 2011-09-30 15:53 | showzh
    不管用  回復  更多評論
      
    # re: 在Spring+hibernate中不能釋放tomcat連接池中連接的解決辦法 2011-11-08 10:22 | 貝殼里的海
    學習了,今天剛好遇到這樣的問題,JBoss里的配置貌似也很重要  回復  更多評論
      
    主站蜘蛛池模板: 美女网站在线观看视频免费的| 免费中文字幕一级毛片| 亚洲乱妇老熟女爽到高潮的片 | 本免费AV无码专区一区| 亚洲av网址在线观看| 无码高潮少妇毛多水多水免费| 特级一级毛片免费看| 亚洲大片在线观看| 日韩一品在线播放视频一品免费| 中文字幕无线码免费人妻| 亚洲欧洲日产国产最新| 亚洲精品国产综合久久一线| 日韩内射激情视频在线播放免费 | 91精品成人免费国产| 亚洲国产成人在线视频| 亚洲精品无码AV中文字幕电影网站 | 色偷偷亚洲女人天堂观看欧| 亚洲人成色7777在线观看不卡| 57pao一国产成永久免费| 羞羞网站免费观看| 亚洲国产成人超福利久久精品| 亚洲精品成人久久久| 99在线精品免费视频九九视| 插鸡网站在线播放免费观看| 日韩亚洲综合精品国产| 国产精品二区三区免费播放心| 怡红院免费的全部视频| 亚洲av无码无线在线观看| 日韩亚洲Av人人夜夜澡人人爽| 五月婷婷亚洲综合| 永久免费毛片在线播放| 国产精品久久久久久亚洲影视| 99久久亚洲综合精品成人网| 国产成人亚洲综合| 免费看美女被靠到爽的视频| 亚洲精品在线免费观看| 精品成人免费自拍视频| 亚洲免费无码在线| 精品亚洲av无码一区二区柚蜜| 亚洲免费观看在线视频| 内射少妇36P亚洲区|