api和spi,oracle的jdbc驱动为什么不开源

原创 2013年09月24日 10:52:42
今天下班后在看jdbc的规范,一不小心又走神,胡思乱想起来

我想到一个规范,其实既是API,也是SPI,只是看从哪个角度来看而已

API是Application Program Interface,应用编程接口

SPI是Service Provide Interface,服务提供接口

API是针对规范使用者来说的,调用
DataSource.getConnection():

就可以建立一个连接,而不关心怎么实现的

SPI是针对规范实现者来说的,要提供一个DataSource接口的实现类,当这个实现类的getConnection()方法被调用时,要返回一个可用的连接,或者抛出异常

DataSource对我来说是API,而对Oracle、MySQL的开发者来说,是SPI

然后又突然想到,为什么Oracle提供的JDBC驱动不开源呢,MySQL的jdbc驱动都开源

Oracle本身是一个server,提供了接口让客户端来调用

3e5fff9b-0ed0-3d7a-be4d-618376bb070f.jpg

TCP端口默认是1521,这个是公开的。但是具体客户端和server通讯的协议格式是什么,这个是保密的。用户也不用关心,Oracle已经将连接的方法封装好了,提供给用户,比如针对java平台,就提供了ojdbc.jar(同时,也实现了jdbc的规范)

如果ojdbc.jar是开源的,那只要读一下源码,不就知道oracle开放接口的协议细节了吗。这是不必要的,而且也是不安全的

而MySQL当然也是类似的道理,但是MySQL自身都是开源的,所以驱动也没有道理不开源吧

从这个模式我想到,对于C/S架构的应用,其实server-api也就是这么回事:把怎么连接server、提供什么服务封装好,提供给客户端开发者

一般server-api都有2个部分:

1、公开的部分,规范一点的还配有详细的文档,让客户端开发者来调用
2、私有的部分,是用来处理底层细节的,如建立连接,处理协议等等,这部分不是提供给客户端开发者调用的,但是又必须包含在server-api里
  • 3e5fff9b-0ed0-3d7a-be4d-618376bb070f-thumb.jpg
  • 大小: 10.3 KB
版权声明:本文为博主原创文章,未经博主允许不得转载。

Oracle的JDBC驱动官方完全版

  • 2014年08月21日 14:12
  • 21.97MB
  • 下载

Java的Spi机制心得

首先说一下问题。 昨日在看JDBC源码当看到DriverManage.getConnection()这个方法,点进去DriverManage类看到getConnection()方法里核心语句确实下面...
  • a1135721184
  • a1135721184
  • 2016年03月24日 14:49
  • 4778

JDBC4.0的新特性

原文:http://hi.baidu.com/aguiro/blog/item/95c4dffe0e10a93d5c600817.html JDBC 4.0的特性 得益于Mustang中的Java...
  • fw0124
  • fw0124
  • 2011年09月19日 21:40
  • 4190

JDBC为什么使用反射加载驱动

一直不太明白在使用JDBC的时候用Class.forName("com.mysql.jdbc.Driver")去加载驱动,就谷歌了一下,得到如下答案:前言JDBC源码地址 还有 在解释具体原因之前...
  • tenlee
  • tenlee
  • 2016年08月30日 17:04
  • 1410

【Oracle】Oracle JDBC各个驱动版本

Oracle JDBC驱动版本:               (1)随Oracle8i发布的Oracle JDBC驱动                  classes111.zip 适用于JDK 1...
  • u012736409
  • u012736409
  • 2013年11月18日 16:48
  • 4263

Oracle 10g 的 jdbc 驱动

从oracle8到oracle10,JDBC目录下的驱动包都各有不同。看了一下oracle的文档说明,了解了一下它们的用途,相信大家有时候也很迷惑,写出来共享一下。这些是oracle10g下的驱动包的...
  • fengyifei11228
  • fengyifei11228
  • 2007年09月20日 10:39
  • 7528

Java开发Oracle的jdbc驱动三种主要分类:

  1、JDBC OCI: oci是oracle call interface的缩写,此驱动类似于传统的ODBC 驱动。因为它需要Oracle Call Interface and Net8,所以它需...
  • chutao
  • chutao
  • 2011年06月03日 11:39
  • 19862

jdbc连接oracle、mysql等主流数据库的驱动类和url

jdbc连接各类数据库
  • huozengguang
  • huozengguang
  • 2017年03月09日 11:12
  • 5707

Java笔记4:JDBC纯驱动方式连接Oracle

JDBC纯驱动方式连接Oracle 1 下载Oracle提供的驱动程序包 下载地址: http://www.oracle.com/technetwork/database/enterprise-edi...
  • haishu_zheng
  • haishu_zheng
  • 2015年12月10日 22:21
  • 22320

SPI和API

先描述下API(Application Programming Interface )。在java中,我们使用java提供的很多类、类的方法、数据结构来编写我们的应用程序,最终完成我们需求的程序功能,...
  • e5945
  • e5945
  • 2014年04月18日 21:19
  • 8759
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:api和spi,oracle的jdbc驱动为什么不开源
举报原因:
原因补充:

(最多只允许输入30个字)