说明testservice不是baseTransactionProxy的子类

解决方案 »

  1.   

    应该是哟;我是通过baseTransactionProxy来进行事物管理的,
      

  2.   

    原因在于Spring的AOP实现机制,Spring中的事务管理实际上是基于
    动态AOP机制实现,为了实现动态AOP,Spring在默认情况下会使用Java Dynamic
    Proxy,但是,Dynamic Proxy要求其代理的对象必须实现一个接口,该接口定义了准备
    进行代理的方法。而对于没有实现任何接口的Java Class,需要采用其他方式,Spring通
    过CGLib10实现这一功能。
    当UserDAO没有实现任何接口时(如JdbcTemplate示例中)。Spring通过CGLib对
    UserDAO进行代理,此时getBean返回的是一个继承自UserDAO类的子类实例,可以通
    过UserDAO对其强制转型。而当UserDAO实现了IUserDAO接口之后,Spring将通过Java
    Dynamic Proxy机制实现代理功能,此时返回的Bean,是通过
    java.lang.reflect.Proxy.newProxyInstance方法创建的IUserDAO接口的一个代理实
    现,这个实例实现了IUserDAO接口,但与UserDAO类已经没有继承关系,因此无法通过
    UserDAO强制转型。
      

  3.   

    另外你得xml配置怎么这么奇怪啊?
      

  4.   

    我仔细看了你得配置,你当前能运行,但是并没有使用道事务管理。对于你得tdao。下面是我得一个配置文件,你看看:希望对你有帮助。
    <bean id="companyDAO" class="cn.com.surekam.dao.CompanyDAO" singleton="true">
    <property name="sessionFactory">
    <ref local="mySessionFactory" />
    </property>
    <property name="strsql">
    <value>from Company  c where c.companyid=:id</value>
    </property>
    <property name="getCommpanyListsqlc">
    <value>select count(*) from Company  c where c.pccode=:pccode</value>
    </property>
    <property name="getCommpanyListsql">
    <value>from Company  c where c.pccode=:pccode</value>
    </property>

    </bean>
    <bean id="companyDAOProxy"
    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
    <ref local="myTransactionManager" />
    </property>
    <property name="target">
    <ref local="companyDAO" />
    </property>
    <property name="transactionAttributes">
    <props>
    <prop key="insert*">PROPAGATION_REQUIRED</prop>
    <prop key="delete*">PROPAGATION_REQUIRED</prop>
    <prop key="update*">PROPAGATION_REQUIRED</prop>
    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
    </props>
    </property>
    </bean>
      

  5.   

    好像就是你得dao没有定义接口。
      

  6.   

    我直接这样:<bean id="tdao" parent="baseTransactionProxy"> 
               <property name="target"> 
                    <bean class="org.spring.service.testservice"> 
                       <property name="sessionFactory"> 
                                 <ref local="sessionFactory"/> 
                       </property> 
                  </bean> 
            </property> 
          </bean>
     
    怎么不行???
      

  7.   

    现在我把程序改成这样:<bean id="ttDAO" class="org.spring.service.testservice" singleton="true">
    <property name="sessionFactory">
    <ref local="sessionFactory" />
    </property>
    </bean>
    <bean id="tdao" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
    <ref local="transactionManager" />
    </property>
    <property name="target">
    <ref local="ttDAO" />
    </property>
    <property name="transactionAttributes">
        <props>
    <prop key="insert*">PROPAGATION_REQUIRED</prop>
    <prop key="delete*">PROPAGATION_REQUIRED</prop>
    <prop key="update*">PROPAGATION_REQUIRED</prop>
    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
        </props>
    </property>
    </bean>一样出现:
    StandardWrapperValve[action]: Servlet.service() for servlet action threw exception 
    java.lang.ClassCastException 
    java.lang.ClassCastException 
    at org.struts.action.base.setServlet(base.java:15) 到底是什么原因呢???