Spring配置proxool连接池,并发50次出现死锁
悬赏:10 发布时间:2008-05-16 提问人:brian_wangshuaijie (初级程序员)
环境:
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网页控制台上
发现连接基本上都不释放
请问各位大虾,该如何解决??????????????
问题补充:
怎么没人补充罗
问题补充:
怎么没人给个答案落,
看来,遇到这个问题的人不多哦,
该问题已经关闭: 结贴
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网页控制台上
发现连接基本上都不释放
请问各位大虾,该如何解决??????????????
问题补充:
怎么没人补充罗
问题补充:
怎么没人给个答案落,
看来,遇到这个问题的人不多哦,
该问题已经关闭: 结贴
已解决问题数: 546
待解决问题数: 287
已关闭问题数: 1067
待解决问题数: 287
已关闭问题数: 1067
问答分类
答题高手
- lggege 资深程序员 ( 51 - 641 )
- ham 资深程序员 ( 50 - 685 )
- congjl2002 资深程序员 ( 44 - 627 )
- llade 高级程序员 ( 34 - 594 )
- hjgundam 高级程序员 ( 30 - 442 )
- wangxin0072000 高级程序员 ( 28 - 436 )
- jasongreen 高级程序员 ( 26 - 528 )
- 温柔一刀 高级程序员 ( 23 - 336 )
- kyo100900 中级程序员 ( 11 - 209 )
- mewleo 中级程序员 ( 11 - 242 )




