OnlyFor_love(『不给我分 就剪掉楼主小鸡几』) ( ) 信誉:131    Blog  2006-8-26 9:07:01  得分: 0     
还没涉及到这个 帮你顶一下 帮你提个公告吧
----------------------------
多谢,问题至今还没解决呢,郁闷啊

解决方案 »

  1.   

    我把问题说得更具体一点吧,本项目属于业务支撑系统。EJB中会话的某个方法(比如excute()方法)负责某个具体的业务(比如开户),在这个方法中,存储过程主要是用来计算费用(比如计算出手续费。这个计算费用的逻辑很复杂,所以才采用存储过程),实体bean主要用来更改客户的状态和其他相关信息。当EJB的excute()方法是执行到调用存储过程后才出错,抛出异常,我希望存储过程也能回滚,要不然业务逻辑就出错了,没实现客户的某个业务,却从客户帐户上扣了相应的款了,这是不允许的。
      

  2.   

    存储过程应该是数据库的事务啊,好像不能在java中控制,我们一般在要用存储过程时,就都放到一个存储过程中调用,这样比较容易控制,哈哈,关注中
      

  3.   

    EJB中事务是声明的,可以在配置文件中定义
      

  4.   

    EJB中事务是声明的,在配置文件中定义。如果可以取到当前事务下的数据库链接,直接传递给调用存储过程的方法,自己控制链接即可;如果取不到,那就只好把链接从Datasource中取出,整个业务的事务都由自己管理,不用EJB的。
      

  5.   

    wantsong(WantSong) ( ) 信誉:100    Blog  2006-9-8 16:58:29  得分: 0    
    EJB中事务是声明的,在配置文件中定义。如果可以取到当前事务下的数据库链接,直接传递给调用存储过程的方法,自己控制链接即可;如果取不到,那就只好把链接从Datasource中取出,整个业务的事务都由自己管理,不用EJB的。
    ----------------------------
    EJB的事务是由系统框架控制的,这个问题我想跟EJB没多大的关系。个人认为跟weblogic有很大的关系。
    因为EJB和JDBC的数据源都是在weblogic的容器的,如果EJB和JDBC访问DB是在weblogic的同一个会话里,那么方法回滚时,JDBC也会回滚的。
      

  6.   

    EJB只有使用WL自带的数据源以获取数据库链接,但是JDBC可以用自定义的吧。这是抬杠了。
    即使是用同一数据源,定义事务的隔离级别是需要的吧。即使是同一会话,你能保证就一定是同一事物,所以定义什么时候开始、什么时候回滚、什么时候提交也是需要的吧。
      

  7.   

    wantsong(WantSong) ( ) 信誉:100    Blog  2006-9-20 16:21:46  得分: 0     
    EJB只有使用WL自带的数据源以获取数据库链接,但是JDBC可以用自定义的吧。这是抬杠了。
    即使是用同一数据源,定义事务的隔离级别是需要的吧。即使是同一会话,你能保证就一定是同一事物,所以定义什么时候开始、什么时候回滚、什么时候提交也是需要的吧。
    ------------------
    不知所云
      
     
      

  8.   

    应该可以控制的,比如你的过程调用失败就返回一个失败的值,程序检查该值,如果为失败的值就不操作其他(比如你程序里面的其他操作),成功就执行其他操作。
    还有一个办法,一般在不得已的情况下用过程,最好少用过程,这样对数据库的依赖性就降低了,你要计算费用可以采用动态语言,比如 beanshell 等等,这样还可以在不重启的情况下修改你的计费方式。
      

  9.   

    存储过程最好不要有事务性操作,可以用它来返回结果,在java中控制事务。如果要你要用,只能用jta事务,此外procedure中不能有commit/rollback,由jta来控制commit和rollback.