<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里的配置貌似也很重要  回復  更多評論
      
    主站蜘蛛池模板: 6080午夜一级毛片免费看6080夜福利| 一本久久A久久免费精品不卡| 四虎在线播放免费永久视频| 91亚洲精品麻豆| 亚洲AV日韩AV永久无码色欲 | 久久亚洲中文字幕精品一区| 亚洲精品成人片在线观看精品字幕| 亚洲欧洲久久精品| 国产免费福利体检区久久| 不卡精品国产_亚洲人成在线 | 亚洲免费视频网站| 1000部啪啪毛片免费看| 亚洲免费福利视频| 日本免费电影一区| 一级毛片在播放免费| 久久精品国产亚洲av成人| 99在线视频免费| 亚洲乱色熟女一区二区三区丝袜| 99久久免费国产特黄| 久久久久亚洲AV片无码下载蜜桃| 国产精品免费久久久久影院 | 两个人看的www高清免费观看| 久久亚洲综合色一区二区三区 | 丁香五月亚洲综合深深爱| 最近免费mv在线观看动漫| 亚洲神级电影国语版| 操美女视频免费网站| 阿v免费在线观看| 国产精品视频免费一区二区| 久久亚洲日韩看片无码| 成人性生活免费视频| 黄页免费视频播放在线播放| 国产成人亚洲综合无码精品| 成人免费午夜无码视频| 黄页网站在线视频免费| 亚洲欧洲日韩国产综合在线二区| 成年女人男人免费视频播放| 精品国产污污免费网站入口| 亚洲欧洲国产视频| 亚洲一级片免费看| 日本一区二区三区免费高清|