使用 InitialContext 获取 OracleXADataSource

发布于 2024-09-13 22:24:17 字数 2062 浏览 4 评论 0原文

我正在开发一个在 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/技术/sample_code/tech/java/codesnippet/j2ee/jdbc/JDBC_in_J2EE.html

i'm developing an application running on WebLogic 10 and of course in java.

Ok, the thing is that i'm using oracle.jdbc.xa.client.OracleXADataSource to manage the transactions, and i'm also trying to set the OracleXADataSource object with InitialContext like this:

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

But when i´m running the application this throws me this:

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)
        ...

Can anybody tell me why i'm getting that RmiDataSource can't be cast to OracleXADataSource ?

--EDIT--
And acording to this oracle sample that code should work, isn't it?
http://www.oracle.com/technology/sample_code/tech/java/codesnippet/j2ee/jdbc/JDBC_in_J2EE.html

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

撩动你心 2024-09-20 22:24:17

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

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

The object returned is an RmiDataSource. OracleXADataSource is neither a subclass nor a superclass of RmiDataSource. The RmiDataSource talks directly or indirectly to the OracleXADataSource. It may or may not hold a a reference to the OracleXADataSource.

If you are using an XA data source, you should be using JTA to manage the transactions.

梦萦几度 2024-09-20 22:24:17

除了 BillThor 的答案之外,

此代码应该适用于 XA 数据源

将 RmiDataSource 转换为 javax.sql.DataSource

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

In addition to BillThor's answer,

this code should work for the XA datasource

cast RmiDataSource to javax.sql.DataSource

InitialContext ctx = new InitialContext();
     javax.sql.DataSource oxds = (DataSource)ctx.lookup("cbs.db.CBSDataSrc");
尝蛊 2024-09-20 22:24:17

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

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

You don't need to mess around with OracleXADataSource, XAConnection, XAResource nor Xid. All those classes are used internally by Weblogic's connection pool and transaction manager.

What you need is to get the datasource from JNDI like newtoallthis showed and the UserTransaction object as well to control the JTA transactions.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文