走自己的路

路漫漫其修远兮,吾将上下而求索

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  50 随笔 :: 4 文章 :: 118 评论 :: 0 Trackbacks

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

posted on 2008-10-31 21:33 叱咤红人 阅读(641) 评论(0)  编辑  收藏 所属分类: J2SE and JVM Other Java and J2EE frameworks

只有注册用户登录后才能发表评论。


网站导航: