try{
        kddLocal = Tbhf7kddUtil.getLocalHome().findByPrimaryKey(kddPK);   //报错处
     }catch(ObjectNotFoundException e){
        debuglog("---------------------- kddLocal is null     "   );   
      } 寻找答案中......

解决方案 »

  1.   

    ejb的事务可以有3种处理方式,你可以换种方法啊
      

  2.   

    我都已经把类型设为:NotSupport了......
      

  3.   

    3种处理方式?
    我的程序中涉及到两个数据源,TWO-PHASE 是肯定的了.
      

  4.   

    可能是你使用非XA方式连接数据库,但又使用了全局事务.你的数据库连接方式是什么? 连接类型是javax.sql.XADataSource还是javax.sql.DataSource
    给出你的数据库驱动类名
      

  5.   

    连接类型: javax.sql.DataSource
     
    驱动器名: COM.ibm.db2.jdbc.net.DB2Driver
      

  6.   

    数据库:DB2
    服务器:websphere在我的程序中大多采用的是cmp,有少量的标准的jdbc(用来查询).出错处在 Tbhf7kddUtil.getLocalHome().findByPrimaryKey();  
    这个与 是否是XA有关么?请指教......
      

  7.   

    尝试用XA方式连接数据库才可以支持JTA事务:
    连接类型选为 javax.sql.XADataSource
    我不知道DB2的XA驱动类名 你找找DB2的JDBC驱动类包,象SQLServer的是:
    com.microsoft.jdbcx.sqlserver.SQLServerDataSource 里面有jdbcx关键字
      

  8.   

    先等,你的BEAN里用到了两个以上数据库连接的话我说的才有用
      

  9.   

    可能支持XA连接(两阶段提交)的DB2驱动类是这个:
    COM.ibm.db2.jdbc.DB2XADataSource
      

  10.   

    to : kinzey34(无声之舞) ;
         我的bean里用到了两个数据源,但对其中的一个是用DataSource.getConnetion()的,大部分东西都是用CMP做的.
         用XADataSource是不是得先把它数据源配成XADataSource?若是,假如我其它的bean不想让它成为一个XADataSource,而仅仅是DataSource怎么办?若不是,在(XADataSource)intialcontext.getXADataSource("jdbc/dbls");时,ClassCastException.
      

  11.   


    我搜了一下,下面的这个帖子和我有相似之处.都是混用了JDBC,CMP.都具有多个数据源http://www.huihoo.com/bbs/chinajavaworld/forum34/192.html但好像作者也没有什么好的方法.
      

  12.   

    CMP?容器管理持久性?企业Bean里还有数据源获取代码?我不懂了既然是两个数据源的事务,则需要用XA方式连接数据库,请使用COM.ibm.db2.jdbc.DB2XADataSource 驱动类连接数据库
    并将你应用服务器的数据库连接类型设置为javax.sql.XADataSource就可以了假如数据源的JNDI是: jdbc/dbls
    那么在企业Bean中这样打开数据库连接: InitialContext ic = new InitialContext(); 
     DataSource db1 = (DataSource) ic.lookup("java:comp/env/jdbc/dbls"); 注意这里是 DataSource 而不是 XADataSource
      

  13.   

    是这样的:
        在我的session bean里有调用jdbc和cmp的代码,需要从外部数据库根据条件查出数据
    并插入到内部数据库中.在jdbc中穿插调用了cmp(我原来用的都是cmp,后来总是报如上错误
    才改为cmp和jdbc混和用的,改后的东东在别人机子上能跑.我也不明白是什么原因.)如果是jdbc,则在prepareStatement()处报InvactionTargetException.若cmp,则findByPrimaryKey()
    处InvactionTargetException.
      

  14.   

    COM.ibm.db2.jdbc.DB2ConnectionPoolDataSource 
    COM.ibm.db2.jdbc.DB2XADataSourc
    我的理解是,后者在用到2PC时才会用到.但我在设置数据源的时候,
    整个应用程序要么为前者,要么为后者,鉴于在某些情况下需要用到2PC,
    所以,我的理解是,就只能用后者.不知这么理解是否正确.
      

  15.   

    很奇怪,我的另一个session bean采用COM.ibm.db2.jdbc.DB2XADataSourc总是报:[04-4-13 14:30:37:219 CST] 26b2ac41 LocalTransact E WLTC0033E: 在清除未解析 LocalTransactionContainment 时,资源 jdbc/DBLS 回滚。
    [04-4-13 14:30:37:219 CST] 26b2ac41 LocalTransact E WLTC0032E: 一个或多个资源回滚。一个未解析的 LocalTransactionContainment 有一个未解析的回滚操作换成  DB2ConnectionPoolDataSource  就没问题.
    一个应用只能配一个DataSource驱动呀..... 
      

  16.   

    整个应用程序如果只用到1种数据源,那么就没必要用XA连接了,XA连接的目的一般是为了支持分布式事务
    提示事务回滚的原因可能是: XA连接参与的是JTA事务管理,它并不支持普通JDBC连接的事务自动提交(默认方式)功能,所以如果采用了XA连接的话,需要在代码中显式界定事务边界,比如:
       
       InitialContext ic = new InitialContext(); 
       UserTransaction ut = ejbContext.getUserTransaction(); 
       ut.begin(); //事务开始   DataSource db1 = (DataSource) ic.lookup("java:comp/env/jdbc/DBLS1"); 
       DataSource db2 = (DataSource) ic.lookup("java:comp/env/jdbc/DBLS2"); 
       Connection con1 = db1.getConnection(); 
       Connection con2 = db2.getConnection(); 
       // ... 数据处理
       // ... 数据处理   ut.commit();  //事务提交    //捕获异常代码省略
      

  17.   

    非XA连接是只有一阶段能力的资源,XA连接则是支持两阶段(事务)提交的资源
      

  18.   

    请参考
    http://www.csdn.net/Develop/article/26/26478.shtmhttp://www-900.ibm.com/developerworks/cn/java/j-dao/