使用proxool的異常


proxool配置如下:

proxool.xml
<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
    <proxool>
        <alias>dbname</alias> <!--數據源的別名-->  
        <driver-url>jdbc:mysql://localhost:3306/mysqltest?useUnicode=true&amp;characterEncoding=utf8</driver-url><!--url連接-->
        <driver-class>com.mysql.jdbc.Driver</driver-class> <!--驅動類-->
        <driver-properties>
            <property name="user" value="root" /> <!--用戶名-->
            <property name="password" value="root" /><!--密碼-->
        </driver-properties> 
    <!--最大連接數(默認5個),超過了這個連接數,再有請求時,就排在隊列中等候,最大的等待請求數由maximum-new-connections決定 -->  
        <maximum-connection-count>100</maximum-connection-count> 
       <!--最小連接數(默認2個)--> 
        <minimum-connection-count>10</minimum-connection-count> 
       <!--proxool自動偵察各個連接狀態的時間間隔(毫秒),偵察到空閑的連接就馬上回收,超時的銷毀 默認30秒-->  
        <house-keeping-sleep-time>90000</house-keeping-sleep-time>
    <!--沒有空閑連接可以分配而在隊列中等候的最大請求數,超過這個請求數的用戶連接就不會被接受--> 
        <maximum-new-connections>10</maximum-new-connections> 
      <!--最少保持的空閑連接數(默認2個)-->  
        <prototype-count>5</prototype-count> 
    </proxool>
</something-else-entirely> 
hibernate-context.xml
<beans>
....添加
<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource" >
        <property name="alias">
            <value>dbname</value>
        </property>
        <property name="driver">
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <property name="driverUrl">
            <value>jdbc:mysql://localhost:3306/mysqltest?useUnicode=true&amp;characterEncoding=utf8</value>
        </property>
        <property name="user">
            <value>root</value>
        </property>
        <property name="password">
            <value>root</value>
        </property>
        <property name="minimumConnectionCount">
            <value>10</value>
        </property>
        <property name="maximumConnectionCount">
            <value>100</value>
        </property>
        <property name="prototypeCount">
            <value>5</value>
        </property>
    </bean>   
....
</beans>
web.xml
<web-app>
....添加
<servlet>
        <servlet-name>ServletConfigurator</servlet-name>
        <servlet-class>
            org.logicalcobwebs.proxool.configuration.ServletConfigurator
        </servlet-class>
        <init-param>
            <param-name>xmlFile</param-name>
            <param-value>WEB-INF/proxool.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>Admin</servlet-name>
        <servlet-class>
            org.logicalcobwebs.proxool.admin.servlet.AdminServlet
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Admin</servlet-name>
        <url-pattern>/admin</url-pattern>
    </servlet-mapping>
    <!-- 配置受保護域,只有Tomcat管理員才能察看連接池的信息 -->
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>proxool</web-resource-name>
            <url-pattern>/admin</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>manager</role-name>
        </auth-constraint>
    </security-constraint>
    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>proxool manager Application</realm-name>
    </login-config>
    <security-role>
        <description>
            The role that is required to log in to the Manager Application
        </description>
        <role-name>manager</role-name>
    </security-role>
....
</web-app>

添加jar包
proxool-0.9.1.jar
proxool-cglib.jar

出現異常,異常信息如下所示:

exception1
2012-10-12 15:23:58 ERROR interceptor.TransactionInterceptor (TransactionAspectSupport.java:287) - Application exception overridden by rollback exception
org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not execute query; uncategorized SQLException for SQL [select contentflo0_.id as id17_, contentflo0_.contentid as contentid17_, contentflo0_.flowtaskid as flowtaskid17_ from contentflowtask contentflo0_, content content1_ where contentflo0_.contentid=content1_.id and contentflo0_.contentid=1830 and content1_.isdelete=0 order by contentflo0_.id desc]; SQL state [08003]; error code [0]; No operations allowed after connection closed.

Connection was closed explicitly by the application at the following location:

** BEGIN NESTED EXCEPTION ** 

java.lang.Throwable

STACKTRACE:

java.lang.Throwable
    at com.mysql.jdbc.Connection.close(Connection.java:1123)
    at org.logicalcobwebs.proxool.AbstractProxyConnection.reallyClose(AbstractProxyConnection.java:173)
    at org.logicalcobwebs.proxool.ConnectionPool.removeProxyConnection(ConnectionPool.java:413)
    at org.logicalcobwebs.proxool.HouseKeeper.sweep(HouseKeeper.java:139)
    at org.logicalcobwebs.proxool.HouseKeeperThread.run(HouseKeeperThread.java:39)


** END NESTED EXCEPTION **

; nested exception is java.sql.SQLException: No operations allowed after connection closed.

Connection was closed explicitly by the application at the following location:

** BEGIN NESTED EXCEPTION ** 

java.lang.Throwable

STACKTRACE:

java.lang.Throwable
    at com.mysql.jdbc.Connection.close(Connection.java:1123)
    at org.logicalcobwebs.proxool.AbstractProxyConnection.reallyClose(AbstractProxyConnection.java:173)
    at org.logicalcobwebs.proxool.ConnectionPool.removeProxyConnection(ConnectionPool.java:413)
    at org.logicalcobwebs.proxool.HouseKeeper.sweep(HouseKeeper.java:139)
    at org.logicalcobwebs.proxool.HouseKeeperThread.run(HouseKeeperThread.java:39)


** END NESTED EXCEPTION **


java.sql.SQLException: No operations allowed after connection closed.

Connection was closed explicitly by the application at the following location:

** BEGIN NESTED EXCEPTION ** 

java.lang.Throwable

STACKTRACE:

java.lang.Throwable
    at com.mysql.jdbc.Connection.close(Connection.java:1123)
    at org.logicalcobwebs.proxool.AbstractProxyConnection.reallyClose(AbstractProxyConnection.java:173)
    at org.logicalcobwebs.proxool.ConnectionPool.removeProxyConnection(ConnectionPool.java:413)
    at org.logicalcobwebs.proxool.HouseKeeper.sweep(HouseKeeper.java:139)
    at org.logicalcobwebs.proxool.HouseKeeperThread.run(HouseKeeperThread.java:39)


** END NESTED EXCEPTION **


    at com.mysql.jdbc.Connection.checkClosed(Connection.java:2474)
    at com.mysql.jdbc.Connection.prepareStatement(Connection.java:1370)
    at com.mysql.jdbc.Connection.prepareStatement(Connection.java:1350)
    at sun.reflect.GeneratedMethodAccessor67.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.logicalcobwebs.proxool.ProxyConnection.invoke(ProxyConnection.java:68)
    at org.logicalcobwebs.cglib.proxy.Proxy$ProxyImpl$$EnhancerByCGLIB$$edd30696.prepareStatement(<generated>)
    at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:497)
    at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:415)
    at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1561)
    at org.hibernate.loader.Loader.doQuery(Loader.java:661)
    at or.....
exception2
2012-10-12 16:16:19 ERROR transaction.JDBCTransaction (JDBCTransaction.java:67) - JDBC begin failed
java.sql.SQLException: Couldn't perform the operation getAutoCommit: You can't perform any operations on this connection. 
It has been automatically closed by Proxool for some reason (see logs).
    at org.logicalcobwebs.proxool.WrappedConnection.invoke(WrappedConnection.java:207)
    at org.logicalcobwebs.proxool.WrappedConnection.intercept(WrappedConnection.java:87)
    at $java.sql.Connection$$EnhancerByProxool$$3f2ab9d8.getAutoCommit(<generated>)
    at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57)
    at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1319)
    ......

出現異常結果都表明使用proxool連接時出現連接超時,具體原因如下:
<maximum-active-time>一個活動連接最大活動時間默認5分鍾,如果超過這個時間則proxool連接會自動斷開。

即在proxool.xml中修改:

proxool.xml
<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
    <proxool>
        <alias>dbname</alias> 
        <driver-url>jdbc:mysql://localhost:3306/mysqltest?useUnicode=true&amp;characterEncoding=utf8</driver-url>
        <driver-class>com.mysql.jdbc.Driver</driver-class> 
        <driver-properties>
            <property name="user" value="root" /> 
            <property name="password" value="root" />
        </driver-properties> 
    <!--最大連接數(默認5個),超過了這個連接數,再有請求時,就排在隊列中等候,最大的等待請求數由maximum-new-connections決定 -->  
        <maximum-connection-count>100</maximum-connection-count> 
       <!--最小連接數(默認2個)--> 
        <minimum-connection-count>10</minimum-connection-count> 
    <!--沒有空閑連接可以分配而在隊列中等候的最大請求數,超過這個請求數的用戶連接就不會被接受--> 
        <maximum-new-connections>10</maximum-new-connections> 
      <!--最少保持的空閑連接數(默認2個)-->  
        <prototype-count>5</prototype-count>
    <!--一個活動連接最大活動時間默認5分鍾-->
        <maximum-active-time>3600000</maximum-active-time>
    <!--自動偵察各個連接狀態的時間間隔(毫秒),偵察到空閑的連接就馬上回收,超時的銷毀-->
            <house-keeping-sleep-time>60000</house-keeping-sleep-time>  
    <!--Test SQL(SELECT getDate()) -->
            <house-keeping-test-sql>select sysdate() </house-keeping-test-sql>
    </proxool>
</something-else-entirely> 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM