上面的配置文件配置动态代理的地方不对个人看法:->既然你是用了动态代理,就应该指明要代理的对象 既    
<property name="target">
      <ref local="TFastenerDAO" />
</property>
上面的文件没有指定,当然会出错

解决方案 »

  1.   

    我将配置文件修改后还是报异常。
    修改的部分:
      <bean id="txProxyTemplate" abstract="true" 
            class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 
        <property name="transactionManager"><ref bean="transactionManager"/></property>
        <property name="target">
          <ref local="TFastenerDAO" />
        </property> 
        <property name="transactionAttributes"> 
            <props> 
                <prop key="save*">PROPAGATION_REQUIRED</prop> 
                <prop key="update*">PROPAGATION_REQUIRED</prop> 
                <prop key="delete*">PROPAGATION_REQUIRED</prop> 
                <prop key="remove*">PROPAGATION_REQUIRED</prop> 
                <prop key="*">PROPAGATION_REQUIRED,readOnly</prop> 
            </props> 
        </property> 
      </bean> 
    异常如下:
    2005-10-21 09:47:27,765 [ERROR] Servlet.service() for servlet jsp threw exception
    java.lang.ClassCastException: $Proxy1
    at com.paiao.bdpm.standardWork.nostruts.ST_Fastener.listT_FastenerForPage(ST_Fastener.java:105)
    at org.apache.jsp.jsp.standardWorktest.PT_005fFastenerList1_jsp._jspService(org.apache.jsp.jsp.standardWorktest.PT_005fFastenerList1_jsp:109)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    at java.lang.Thread.run(Thread.java:595)说明一下:我的配置文件和java文件是参考appfuse修改的,spring和hibernate的包是myeclipse的add spring Capabilities 和add hibernate Capabilities功能加上的。
      

  2.   

    你的TFastenerDAO是否实现了接口?如果没有 加入 <property name="proxyTargetClass">
    <value>true</value>
    </property>
      

  3.   

    to:myth822(枫红一刀) 
    我将配置文件修改后还是报异常
    修改部分:
      <bean id="txProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 
        <property name="transactionManager"><ref bean="transactionManager"/></property>
    <property name="proxyTargetClass">
       <value>true</value>
    </property>
        <property name="transactionAttributes"> 
            <props> 
                <prop key="save*">PROPAGATION_REQUIRED</prop> 
                <prop key="update*">PROPAGATION_REQUIRED</prop> 
                <prop key="delete*">PROPAGATION_REQUIRED</prop> 
                <prop key="remove*">PROPAGATION_REQUIRED</prop> 
                <prop key="*">PROPAGATION_REQUIRED,readOnly</prop> 
            </props> 
        </property> 
      </bean> 报的异常:
    java.lang.ClassCastException: com.paiao.bdpm.standardWork.service.impl.TFastenerManagerImpl$$EnhancerByCGLIB$$8dc0c7d3
    at com.paiao.bdpm.standardWork.nostruts.ST_Fastener.listT_FastenerForPage(ST_Fastener.java:105)
    at org.apache.jsp.jsp.standardWorktest.PT_005fFastenerList1_jsp._jspService(org.apache.jsp.jsp.standardWorktest.PT_005fFastenerList1_jsp:109)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    at java.lang.Thread.run(Thread.java:595)TFastenerDAO的代码:
    public interface TFastenerDAO  extends DAO {
        public TFastener getTFastener(String fastener);
        public List getTFasteners(String sql);
        public void saveTFastener(TFastener fastener);
        public void removeTFastener(String fastener);
    }
    DAO的代码:
    public interface DAO {
        public List getObjects(Class clazz);
        public Object getObject(Class clazz, Serializable id);
        public void saveObject(Object o);
        public void removeObject(Class clazz, Serializable id);
    }
      

  4.   

    TFastenerDAOHibernate的代码:
    public class TFastenerDAOHibernate extends BaseDAOHibernate implements TFastenerDAO {
        public List getTFasteners(String sql) {
            return getHibernateTemplate().find("from TFastener "+sql);
        }    public TFastener getTFastener(String fastenername) {
            return (TFastener) getHibernateTemplate().get(TFastener.class,fastenername);
        }    public void saveTFastener(TFastener tFastener) {
            getHibernateTemplate().saveOrUpdate(tFastener);
        }    public void removeTFastener(String fastenername) {
            Object fanstener = getHibernateTemplate().load(TFastener.class, fastenername);
            getHibernateTemplate().delete(fanstener);
        }
    }
    BaseDAOHibernate 的代码:
    public class BaseDAOHibernate extends HibernateDaoSupport implements DAO {
        protected final Log log = LogFactory.getLog(getClass());
        public void saveObject(Object o) {
            getHibernateTemplate().saveOrUpdate(o);
        }
        public Object getObject(Class clazz, Serializable id) {
            Object o = getHibernateTemplate().get(clazz, id);
            if (o == null) {
                throw new ObjectRetrievalFailureException(clazz, id);
            }
            return o;
        }
        public List getObjects(Class clazz) {
            return getHibernateTemplate().loadAll(clazz);
        }
        public void removeObject(Class clazz, Serializable id) {
            getHibernateTemplate().delete(getObject(clazz, id));
        }
    }
      

  5.   

    你不是接口了吗,不用加那句话   你的TFastenerManagerImpl是不是有txProxyTemplate的getter,setter方法
    public DAO getTxProxyTemplate() {
    ...
    }
    public void setTxProxyTemplate(DAO newValue) {
    ...
    }
      

  6.   

    没有啊,我这是参考appfuse修改的。
    TFastenerManagerImpl的代码:
    public class TFastenerManagerImpl extends BaseManager implements TFastenerManager {
        private TFastenerDAO dao;
        public void setTFastenerDAO(TFastenerDAO dao) {
            this.dao = dao;
        }
        public List getTFasteners(String sql) {
            return dao.getTFasteners(sql);
        }
        public TFastener getTFastener(String fastenername) {
            return dao.getTFastener(fastenername);
        }
        public void saveTFastener(TFastener fastener) {
            dao.saveTFastener(fastener);
        }
        public void removeTFastener(String fastenername) {
            dao.removeTFastener(fastenername);
        }BaseManager的代码:
    public class BaseManager implements Manager {
        protected final Log log = LogFactory.getLog(getClass());
        protected DAO dao = null;
        public void setDAO(DAO dao) {
            this.dao = dao;
        }
        public Object getObject(Class clazz, Serializable id) {
            return dao.getObject(clazz, id);
        }
        public List getObjects(Class clazz) {
            return dao.getObjects(clazz);
        }    public void removeObject(Class clazz, Serializable id) {
            dao.removeObject(clazz, id);
        }    public void saveObject(Object o) {
            dao.saveObject(o);
        }
    }
      

  7.   

    问题解决了,是我把调用的方法写错了。
    将下面的代码修改
    TFastenerDAO tFastenerDAO = (TFastenerDAO) context.getBean("TFastenerManager");
    alist=(ArrayList) tFastenerDAO.getTFasteners(whereSQL);
    修改后的代码:
    TFastenerManager tFastenerManager=(TFastenerManager) context.getBean("TFastenerManager");
    alist=(ArrayList) tFastenerManager.getTFasteners(whereSQL);
    因为我以前用的TFastenerDAO 方式调用:
    TFastenerDAO tFastenerDAO = (TFastenerDAO) context.getBean("TFastenerDAO ");
    alist=(ArrayList) tFastenerDAO.getTFasteners(whereSQL);
    粗心大意将(TFastenerDAO) context.getBean("TFastenerDAO ");修改为(TFastenerDAO) context.getBean("TFastenerManager");肯定会报类型转换错误。开始还以为是配置问题,解决了半天。