2. web presentation layer: struts version 2.014 
3. business layer: spring version 2.5
4. persistence layer: ibatis version 2.3.0.677
5. db: sql 2000读数据时 偶而以下错误  数据是被两套程序共用的
java.sql.SQLException: 事务(进程 ID  53)与另一个进程已被死锁在  lock | communication buffer 资源上,且该事务已被选作死锁牺牲品。请重新运行该事务。
com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:201)
com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForObject(MappedStatement.java:120)
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:518)
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:493)
com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForObject(SqlMapSessionImpl.java:106)
com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForObject(SqlMapClientImpl.java:82)
com.taopiao.order.dao.impl.OrdersDao.getCustomerOrdersInfo(OrdersDao.java:49)
com.taopiao.order.service.impl.OrdersService.getOrders(OrdersService.java:449)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
$Proxy0.getOrders(Unknown Source)

解决方案 »

  1.   

     com.taopiao.order.dao.impl.OrdersDao.getCustomerOrdersInfo(OrdersDao.java:49)既然指明的getCustomerOrdersInfo方法出的,你可以把你的代码帖出来看看
      

  2.   

    这是49行的/**订单数:   总票数:   总金额*/
    public CustomerOrderInfo getCustomerOrdersInfo(String sql)throws Exception {

    return (CustomerOrderInfo) getSqlMapClient().queryForObject("getCustomerOrdersInfo",sql);
    }
      

  3.   

    SQL是:   <select id="getCustomerOrdersInfo" resultClass="CustomerOrderInfo" parameterClass="string">
           <![CDATA[
             SELECT ISNULL(sum(priceDue),0)  as totalPrice,ISNULL(sum(NumOfTicket),0 )as totalTicket,count(*) as orderCount from orders $sql$
           ]]>
       </select>
      

  4.   

    纯select应该不存在死锁问题。是不是你的spring配置了事务,在select也用了事务了?
      

  5.   

    是有事务
     如下:<bean id="transactionInterceptor"
    class="org.springframework.transaction.interceptor.TransactionInterceptor">
    <property name="transactionManager" ref="transactionManager" />
    <property name="transactionAttributes">
    <props>
    <prop key="create*">PROPAGATION_REQUIRED</prop>
    <prop key="update*">PROPAGATION_REQUIRED</prop>
    <prop key="remove*">PROPAGATION_REQUIRED</prop>
    <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
    </props>
    </property>
    </bean> <bean
    class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">

    <property name="beanNames">
    <list>
    <value>ordersService</value>
    </list>
    </property>

    <property name="interceptorNames">
    <list>
    <value>transactionInterceptor</value>

    </list>
    </property>
    </bean>