我正在开发在WebLogic 10上运行的应用程序,当然还有在Java中运行的应用程序。

好的,事实是,我正在使用oracle.jdbc.xa.client.OracleXADataSource来管理事务,并且我还试图通过InitialContext设置OracleXADataSource对象,如下所示:

     InitialContext ctx = new InitialContext();
     OracleXADataSource oxds = new OracleXADataSource();
     oxds = (OracleXADataSource)ctx.lookup("cbs.db.CBSDataSrc");


但是,当我运行该应用程序时,会抛出以下错误:

java.sql.SQLException: Error creando la conexion - weblogic.jdbc.common.internal.RmiDataSource cannot be cast to oracle.jdbc.xa.client.OracleXADataSource

 at cbs.rtc.daos.commons.DatabaseDAO.getXAPersConnection(DatabaseDAO.java:514)
 at cbs.rtc.daos.utils.UtilDAO.startTransaction(UtilDAO.java:95)
 at cbs.rtc.businessobjects.persona.PersonaJuridicaBussinessObject.crearClienteJuridico(PersonaJuridicaBussinessObject.java:366)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at cbs.rtc.businessobjects.AbstractBusinessObject.invoke(AbstractBusinessObject.java:61)
 at cbs.commons.business.BusinessInvoker.invokeTarget(BusinessInvoker.java:88)
 at cbs.services.AbstractService.invokeTarget(AbstractService.java:142)
 at cbs.services.AbstractService.invokeTarget(AbstractService.java:195)
 at cbs.services.persona.PersonaJuridicaServiceBean.crearClienteJuridico(PersonaJuridicaServiceBean.java:135)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        ...


谁能告诉我为什么我无法将RmiDataSource转换为OracleXADataSource吗?

- 编辑 -
根据这个Oracle示例,代码应该可以工作,不是吗?
http://www.oracle.com/technology/sample_code/tech/java/codesnippet/j2ee/jdbc/JDBC_in_J2EE.html

最佳答案

返回的对象是RmiDataSource。 OracleXADataSource既不是RmiDataSource的子类也不是其超类。 RmiDataSource直接或间接与OracleXADataSource对话。它可能包含也可能不包含对OracleXADataSource的引用。

如果使用XA数据源,则应使用JTA来管理事务。

09-30 14:29