Java 使用InitialContext获取OracleXADataSource

Java 使用InitialContext获取OracleXADataSource,java,weblogic,jta,Java,Weblogic,Jta,我正在开发一个运行在WebLogic10上的应用程序,当然还有java 好的,问题是我正在使用oracle.jdbc.xa.client.oraclexadasource来管理事务,并且我还尝试使用InitialContext设置Oraclexadasource对象,如下所示: InitialContext ctx = new InitialContext(); OracleXADataSource oxds = new OracleXADataSource();

我正在开发一个运行在WebLogic10上的应用程序,当然还有java

好的,问题是我正在使用oracle.jdbc.xa.client.oraclexadasource来管理事务,并且我还尝试使用InitialContext设置Oraclexadasource对象,如下所示:

     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示例,代码应该可以工作,不是吗?

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


如果您使用的是XA数据源,那么您应该使用JTA来管理事务。

除了BillThor的答案

这段代码应该适用于XA数据源

将RmiDataSource强制转换为javax.sql.DataSource

InitialContext ctx = new InitialContext();
     javax.sql.DataSource oxds = (DataSource)ctx.lookup("cbs.db.CBSDataSrc");

您不需要乱搞OracleXadasource、XAConnection、XAResource或Xid。所有这些类都由Weblogic的连接池和事务管理器在内部使用


您需要的是从JNDI获取数据源,如newtoallthis所示,以及UserTransaction对象,以控制JTA事务。

我正在使用JTA,我正在手动设置OracleXADataSource,但现在需要通过InitialContext将数据库信息提供给OracleXADataSource,我做错了什么?您需要向上下文提供哪些数据库信息。它应该已经有了连接。任何连接设置都应在连接池级别进行。如果要运行查询,只需使用上下文提供的数据源,并使用JTA提交或回滚即可。我使用oracle存储数据,该连接的驱动程序类设置为oracle.jdbc.xa.client.oraclexadasource,但仍会抛出ClassCastExceptionOpen来启动对WebLogic的支持调用。我曾与Oracle和WEbLogic进行过广泛的合作,没有遇到这种问题。既然Oracle拥有WEbLogic,他们应该能够快速解决这个问题。是的,这一部分很好,但OracleXadasource对象用于获取:XAConnection xaCon=oxds.getXAConnection();它与XAResource和Xid一起使用来处理事务看看这个线程。对于我认为您正在尝试执行的操作,有一个替代代码