0

私はWebLogic10で、そしてもちろん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にキャストできない理由を誰かに教えてもらえますか?

-編集-そして、このオラクルのサンプルによると、コードは機能するはずですよね? http://www.oracle.com/technology/sample_code/tech/java/codesnippet/j2ee/jdbc/JDBC_in_J2EE.html

4

3 に答える 3

1

返されるオブジェクトは RmiDataSource です。OracleXADataSource は、RmiDataSource のサブクラスでもスーパークラスでもありません。RmiDataSource は、直接的または間接的に OracleXADataSource と通信します。OracleXADataSource への参照を保持する場合と保持しない場合があります。

XA データ ソースを使用している場合は、JTA を使用してトランザクションを管理する必要があります。

于 2010-08-10T19:55:04.087 に答える
0

OracleXADataSource、XAConnection、XAResource、Xid をいじる必要はありません。これらのクラスはすべて、Weblogic の接続プールとトランザクション マネージャによって内部的に使用されます。

必要なのは、newtoallthis が示したように JNDI からデータソースを取得し、JTA トランザクションを制御するために UserTransaction オブジェクトを取得することです。

于 2010-08-20T14:38:14.637 に答える
0

BillThorの回答に加えて、

このコードは XA データソースで機能するはずです

RmiDataSource を javax.sql.DataSource にキャストします

InitialContext ctx = new InitialContext();
     javax.sql.DataSource oxds = (DataSource)ctx.lookup("cbs.db.CBSDataSrc");
于 2010-08-11T13:22:27.773 に答える