Получите OracleXADataSource, используя InitialContext - PullRequest
0 голосов
/ 10 августа 2010

Я занимаюсь разработкой приложения, работающего на WebLogic 10 и, конечно же, на Java.

Хорошо, дело в том, что я использую oracle.jdbc.xa.client.OracleXADataSource для управления транзакциями, ия также пытаюсь установить объект OracleXADataSource с InitialContext следующим образом:

     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?

- EDIT-- И в соответствии с этим примером оракула этот код должен работать, не так ли?http://www.oracle.com/technology/sample_code/tech/java/codesnippet/j2ee/jdbc/JDBC_in_J2EE.html

Ответы [ 3 ]

1 голос
/ 10 августа 2010

Возвращенный объект является RmiDataSource. OracleXADataSource не является ни подклассом, ни суперклассом RmiDataSource. RmiDataSource напрямую или косвенно взаимодействует с OracleXADataSource. Он может содержать или не содержать ссылку на OracleXADataSource.

Если вы используете источник данных XA, вы должны использовать JTA для управления транзакциями.

0 голосов
/ 20 августа 2010

Вам не нужно возиться с OracleXADataSource, XAConnection, XAResource или Xid. Все эти классы используются внутренне пулом соединений и менеджером транзакций Weblogic.

Вам нужно получить источник данных из JNDI, такой как newtoall, который был показан, и объект UserTransaction для управления транзакциями JTA.

0 голосов
/ 11 августа 2010

Помимо ответа BillThor,

этот код должен работать для источника данных XA

приведение RmiDataSource к javax.sql.DataSource

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