我正在开发一个在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?
- EDIT-- 根据这个代码应该工作的oracle示例,不是吗? http://www.oracle.com/technology/sample_code/tech/java/codesnippet/j2ee/jdbc/JDBC_in_J2EE.html
答案 0 :(得分:1)
返回的对象是RmiDataSource。 OracleXADataSource既不是RMIDataSource的子类,也不是RmiDataSource的超类。 RmiDataSource直接或间接与OracleXADataSource对话。它可能包含也可能不包含对OracleXADataSource的引用。
如果您使用的是XA数据源,则应该使用JTA来管理事务。
答案 1 :(得分:0)
除了BillThor的回答,
此代码应适用于XA数据源
将RmiDataSource转换为javax.sql.DataSource
InitialContext ctx = new InitialContext();
javax.sql.DataSource oxds = (DataSource)ctx.lookup("cbs.db.CBSDataSrc");
答案 2 :(得分:0)
您不需要乱用OracleXADataSource,XAConnection,XAResource和Xid。所有这些类都由Weblogic的连接池和事务管理器在内部使用。
你需要的是从JNDI获取数据源,如newtoallthis和UserTransaction对象以及控制JTA事务。