首页 / 软件开发 / JAVA / 关于JDBC的XAConnection不继承Connection的困惑
关于JDBC的XAConnection不继承Connection的困惑2011-04-03叱咤红人在jdbc中,XAConnection和Connection是没有继承关系的,在jms中XAConnection是继 承Connection接口的。同样XADataSource和Datasource也是相应的关系。我们在使用jdbc时,如果是managed datasource,配置在配置文件中,如在oc4j data-sources.xml中,有下面这段配置:<managed-data-source name="MIFSystemLogXADataSource"
connection-pool-name="MIFSysLogXAConnectionFactory"
jndi-name="jdbc/mifXAStatusLog" tx-level="global"/> <!-- tx-level="global" -->
<connection-pool
name="MIFSysLogXAConnectionFactory">
<connection-factory
factory-class="oracle.jdbc.xa.client.OracleXADataSource" user="gavin"
password="gavin" url="jdbc:oracle:thin:@luga:1521:lugadb">
</connection-factory>
</connection-pool>但是在java代码我们使用时,是这样的:DataSource dataSource = (DataSource) context
.lookup(jdbc/mifXAStatusLog);
Connection connection = dataSource.getConnection();lookup出来的DataSource的实现类是:oracle.sql.oc4j.ManagedDataSource,它是实 现DataSource接口的,和XADataSource无关,然后get出来的是Connection和 XAConnection无关,但是拿它做操作确是和XAConnection的效果相同,说明拿出来的可能 是一个dynamic proxy,它是实现Connection接口,完成XAConnection的功能。为什么要 这样做呢,就是方便我们通过配置文件更改,修改了配置文件,从xa到非xa,从非xa到xa ,代码不需要重修修改。所以只能都拿出Connection来了。但是如果XAConnection继承 Connection接口,这样拿出来的即使是Connection,通过多态我们不更好理解吗? 为什 么当初写规范时,不让 XADataSource继承DataSource,让XAConnection继承Connection 呢?