浏览 351 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-05-18 关键字: spring配置proxool连接池,并发50次出现死锁
环境:
window2000 tomcat5.0 spring1.2 基本架构: action=>services-dao services有事务管理 dao类: public class tabDAO extends HibernateDaoSupport implements ITabDAO { public void update(){ StringBuffer sql = new StringBuffer(); sql.append("UPDATE Tab "); sql.append("SET tabname = tabname + 1 "); sql.append("WHERE tabid = '1' "); this.getHibernateTemplate().bulkUpdate(sql.toString()); } } applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>org.logicalcobwebs.proxool.ProxoolDriver</value> </property> <property name="url"> <value>proxool.spring_pro_pool</value> </property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" destroy-method="close"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="mappingResources"> <list> <value>com/pojo/Tab.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.Oracle9Dialect </prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.show_sql">true</prop> <prop key="connection.provider_class"> org.hibernate.connection.ProxoolConnectionProvider </prop> </props> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> <bean id="tabDAO" class="com.dao.tabDAO"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> <bean id="services" class="com.services.Services"> <property name="tabDAO"> <ref bean="tabDAO" /> </property> </bean> <bean id="servicesTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <property name="proxyInterfaces"> <list> <value>com.services.IServices</value> </list> </property> <property name="target"> <ref bean="services" /> </property> <property name="transactionAttributes"> <props> <prop key="update"> PROPAGATION_REQUIRED,-Exception </prop> </props> </property> </bean> <bean name="/update" singleton="false" class="com.action.UpdateAction"> <property name="servicesTransactionProxy"> <ref bean="servicesTransactionProxy" /> </property> </bean> </beans> proxool.xml <?xml version="1.0" encoding="utf-8"?> <something-else-entirely> <proxool> <alias>spring_pro_pool</alias> <driver-url>jdbc:oracle:thin:@localhost:1521:chenlong</driver-url> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <driver-properties> <property name="user" value="scott"/> <property name="password" value="tiger"/> </driver-properties> <maximum-connection-count>50</maximum-connection-count> <minimum-connection-count>30</minimum-connection-count> <simultaneous-build-throttle>200</simultaneous-build-throttle> <maximumActiveTime>1000</maximumActiveTime> <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql> <statistics-log-level>INFO</statistics-log-level> </proxool> </something-else-entirely> web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>3</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>3</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- ##################### Proxool ####################### --> <servlet> <servlet-name>proxoolServletConfigurator</servlet-name> <servlet-class> org.logicalcobwebs.proxool.configuration.ServletConfigurator </servlet-class> <init-param> <param-name>xmlFile</param-name> <param-value>WEB-INF/classes/proxool.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>AdminP</servlet-name> <servlet-class> org.logicalcobwebs.proxool.admin.servlet.AdminServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>AdminP</servlet-name> <url-pattern>/AdminP</url-pattern> </servlet-mapping> </web-app> 并发测试工具Jmeter2.3.1: 参数 线程数:50 Ramp-UP Period(in scerond):0 循环次数:1 测试结果: 出现多个如下异常: org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not execute update query; uncategorized SQLException for SQL [update SCOTT.TAB set TABNAME=TABNAME+1 where TABID='1']; SQL state [62000]; error code [104]; ORA-00104: 检测到死锁;全部公用服务器已锁定等待资源 ; nested exception is java.sql.SQLException: ORA-00104: 检测到死锁;全部公用服务器已锁定等待资源 org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not execute update query; uncategorized SQLException for SQL [update SCOTT.TAB set TABNAME=TABNAME+1 where TABID='1']; SQL state [62000]; error code [104]; ORA-00104: 检测到死锁;全部公用服务器已锁定等待资源 ; nested exception is java.sql.SQLException: ORA-00104: 检测到死锁;全部公用服务器已锁定等待资源 java.sql.SQLException: ORA-00104: 检测到死锁;全部公用服务器已锁定等待资源 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134) at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289) at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573) at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891) at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1093) at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2047) at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2709) 在proxool网页控制台上 发现连接基本上都不释放 请问各位大虾,该如何解决?????????????? 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-05-18
怎么没人,遇到过这种问题啊??????????
|
|
| 返回顶楼 | |
|
最后更新时间:2008-07-02
我的配法和你差不多,连接池最大50,用jmeter模拟并发100,从proxool控制台看到偶尔50个连接能全部用完,但是比较少,一般还是有些空闲的。
|
|
| 返回顶楼 | |



