CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  框架、开源

Spring+hibernate中加上AOP的事物管理怎么始终出现这样的问题?????

楼主javafansy(java fans)2004-12-02 11:55:52 在 Java / 框架、开源 提问

我的代码如下:    
  base.java    
  java代码:      
   
   
        public   class   base   extends   Action   {    
        private   testservice   test;    
        public   void   setServlet(ActionServlet   actionServlet)   {");(---------这里的问题)    
            super.setServlet(actionServlet);    
            ServletContext   servletContext   =   actionServlet.getServletContext();    
            WebApplicationContext   wac   =   WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);    
            this.test   =   (testservice)   wac.getBean("tdao");    
        }    
   
        protected   testservice   getTest()   {    
   
            return   test;    
        }    
   
  }    
   
     
   
  baseAction继承base,baseAction.java    
  java代码:      
   
   
  Prison   p=new   Prison();    
          p.setUsername("123");    
          p.setCausation("1111");    
          getTest().save(p);    
          System.out.print("success!!!!!!!!!!!!!!!!1");    
          return   actionMapping.findForward("success");    
     
     
   
  Spring-hibernate.xml    
  java代码:      
   
      <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>  
   
   
  一直出现了这个问题:    
   
  java代码:      
   
  StandardWrapperValve[action]:   Servlet.service()   for   servlet   action   threw   exception    
  java.lang.ClassCastException    
  java.lang.ClassCastException    
  at   org.struts.action.base.setServlet(base.java:15)    
   
     
   
   
  如果我把上面的spring-hibernate.xml的代码改成下面的:    
  java代码:      
   
   
  <bean   id="tdao"   class="org.spring.service.testservice">    
                                  <property   name="sessionFactory">    
                                                  <ref   local="sessionFactory"   />    
                                  </property>    
                  </bean>    
   
     
   
   
  程序运行正常,    
   
  请问到底是什么原因呢????    
  问题点数:50、回复次数:20Top

1 楼hj12(12)回复于 2004-12-02 12:38:00 得分 10

dao类要实现接口  
  Top

2 楼javafansy(java fans)回复于 2004-12-02 12:51:35 得分 0

这不是实现了吗?  
   
  bean   id="ttDAO"   class="org.spring.service.testservice"   singleton="true">  
  <property   name="sessionFactory">  
  <ref   local="sessionFactory"   />  
  </property>Top

3 楼sgdb(神天月晓)回复于 2004-12-02 14:25:48 得分 0

倒还在问这个问题  
   
  楼主把你的tdao和ttdao的代码贴出来看看Top

4 楼javafansy(java fans)回复于 2004-12-02 15:11:31 得分 0

代码如下:  
   
  teacherDAO.java:  
   
  import   com.bean.teacher;  
  public   interface   teacherDAO   {  
   
      public   abstract   void   saveTeacher(teacher   teacher);  
   
   
  }  
   
  teacherDAOhibernate.java代码:  
  import   org.springframework.orm.hibernate.support.HibernateDaoSupport;  
  import   com.dao.teacherDAO;  
  import   java.util.List;  
  import   com.bean.teacher;  
   
  public   class   teacherDAOhibernate   extends   HibernateDaoSupport   implements   teacherDAO{  
   
      public   teacherDAOhibernate()   {  
          super();  
      }  
   
      public   void   saveTeacher(teacher   teacher)   {  
          getHibernateTemplate().save(teacher);  
      }  
  }  
   
   
  请帮忙看看;到底是什么问题???Top

5 楼sgdb(神天月晓)回复于 2004-12-02 15:45:37 得分 0

倒,我最想看的是org.spring.service.testserviceTop

6 楼wjmmml(笑着悲伤)回复于 2004-12-02 16:10:29 得分 0

呵呵testservice  
  必须有接口Top

7 楼beyond_xiruo(CorruptionException)回复于 2004-12-02 16:14:59 得分 0

aopalliance.jar扩展包有不?  
  Top

8 楼javafansy(java fans)回复于 2004-12-02 16:23:03 得分 0

我写错了;org.spring.service.testservice应该是:org.spring.service.teacherDAOhibernate    
  我改过来了;还是出现一样的问题  
  import   org.springframework.orm.hibernate.support.HibernateDaoSupport;  
  import   com.dao.teacherDAO;  
  import   java.util.List;  
  import   com.bean.teacher;  
   
  public   class   teacherDAOhibernate   extends   HibernateDaoSupport   implements   teacherDAO{  
   
      public   teacherDAOhibernate()   {  
          super();  
      }  
   
      public   void   saveTeacher(teacher   teacher)   {  
          getHibernateTemplate().save(teacher);  
      }  
  }  
  Top

9 楼javafansy(java fans)回复于 2004-12-02 16:29:13 得分 0

搞错了;  
  org.spring.service.testservice如下:  
   
  package   org.spring.service;  
   
  import   org.springframework.orm.hibernate.support.HibernateDaoSupport;  
  import   org.spring.dao.testdao;  
  import   org.hibernate.bean.Prison;  
   
    public   class   testservice   extends   HibernateDaoSupport   implements   testdao{  
      public   testservice()   {  
      }  
   
      public   void   save(Prison   p)   {  
          getHibernateTemplate().save(p);  
      }  
  }  
  Top

10 楼sgdb(神天月晓)回复于 2004-12-02 16:29:40 得分 0

teacherDAO.java:  
   
  import   com.bean.teacher;  
  public   interface   teacherDAO   {  
   
      public   void   saveTeacher(teacher   teacher);  
   
   
  }  
  倒,你在接口里写抽象方法;Top

11 楼sgdb(神天月晓)回复于 2004-12-02 16:31:34 得分 0

看看你的testdao里是不是也有  
  public   abstract   void   saveTeacher(teacher   teacher);这样的写法  
   
  把abstract去掉Top

12 楼javafansy(java fans)回复于 2004-12-02 16:34:53 得分 0

我的  
  testdao.java:  
   
  package   org.spring.dao;  
  import   org.hibernate.bean.Prison;  
  public   interface   testdao   {  
      void   save(Prison   prison);  
  }  
   
  testservice.java:  
   
  import   org.springframework.orm.hibernate.support.HibernateDaoSupport;  
  import   org.spring.dao.testdao;  
  import   org.hibernate.bean.Prison;  
   
    public   class   testservice   extends   HibernateDaoSupport   implements   testdao{  
      public   testservice()   {  
      }  
   
      public   void   save(Prison   p)   {  
          getHibernateTemplate().save(p);  
      }  
  }  
   
   
  没有写抽象对象;Top

13 楼sgdb(神天月晓)回复于 2004-12-02 16:41:16 得分 10

this.test   =   (testservice)   wac.getBean("tdao");  
  ->  
  this.test   =   (testservice)   wac.getBean("ttDAO");Top

14 楼javafansy(java fans)回复于 2004-12-02 16:46:44 得分 0

我也知道:  
   
  this.test   =   (testservice)   wac.getBean("tdao");  
  ->  
  this.test   =   (testservice)   wac.getBean("ttDAO");  
   
  这样行的呀;  
   
  我想用AOP拦截器来进行事物管理呀;通过  
  <property   name="target"><ref   local="ttDAO"   /></property>  
   
  然后   this.test   =   (testservice)   wac.getBean("tdao");  
  来获得;  
  Top

15 楼sgdb(神天月晓)回复于 2004-12-02 16:54:06 得分 0

倒,你对spring的理解有问题  
   
  <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>  
  这段就是让spring来管理事务,你自己不需要做任何事情  
  spring   自行管理事务默认用的就是aop吧  
  Top

16 楼javafansy(java fans)回复于 2004-12-02 17:22:11 得分 0

让spring的AOP来管理事务,通过它来管理具体的bean  
   
  <property   name="target"><ref   local="ttDAO"   /></property>  
   
  如果照你说的的那样,他怎么来管理具体的   bean呢,而ttDAO是通过:  
   
    <bean   id="ttDAO"   class="org.spring.service.testservice"   singleton="true">  
  <property   name="sessionFactory">  
  <ref   local="sessionFactory"   />  
  </property>  
  来得到的;然后给TransactionProxyFactoryBean来进行事物管理,  
   
  从而获得:this.test   =   (testservice)   wac.getBean("tdao");  
   
  也许是我的理解有不对吧,还请高手指教!!!!!!!!!!!!1Top

17 楼sgdb(神天月晓)回复于 2004-12-02 17:31:46 得分 0

<property   name="target">  
  <ref   local="ttDAO"   />  
  </property>  
  看看这里,就是把ttDAO交给tdao去管理  
   
  再看看整个tdao的定义是不是和spring的ADVISOR很像,呵呵,其实就是一个ADVISOR;Top

18 楼sgdb(神天月晓)回复于 2004-12-02 17:33:29 得分 10

要是想深入的了解,先看看spring官方网站的文档,然后再看看spring的源代码Top

19 楼javafansy(java fans)回复于 2004-12-03 08:49:42 得分 0

那请问我应该怎么来做才能成功呢????Top

20 楼niyboy(I Love J2EE)回复于 2004-12-03 16:58:44 得分 20

我曾经也遇到过这样的问题,如果直接通过绝对路径来获得applicationcontext.xml;你上面的代码就不会出现问题的;  
   
  如果象你这样来做的话,我也没有成功!!!  
   
  到底有没有人知道呢????Top

相关问题

  • spring+struts+hibernate
  • spring+hibernate+eclipse+oracle9i
  • spring+struts+hibernate
  • spring+hibernate+struts
  • Spring是否支持事物回滚?
  • struts+spring+hibernate问题
  • Struts+Spring+Hibernate分页
  • spring+hibernate的问题
  • 初学Spring的Hibernate
  • 关于hibernate和spring!!!

关键词

  • 代码
  • 管理
  • spring
  • hibernate
  • orm
  • springframework
  • testservice
  • teacherdao
  • tdao
  • testdao

得分解答快速导航

  • 帖主:javafansy
  • hj12
  • sgdb
  • sgdb
  • niyboy

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo