程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 關於JDBC的XAConnection不繼承Connection的困惑

關於JDBC的XAConnection不繼承Connection的困惑

編輯:關於JAVA

在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 呢?

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved