女儿3岁了还是要继续钻研技术

1个java攻城狮->1头node程序猿->1只ios小菜鸡

api和spi,oracle的jdbc驱动为什么不开源
今天下班后在看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
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kyfxbl/article/details/11966201
个人分类: 杂项
想对作者说点什么? 我来说一句

java ojdbc14.api.实现接口

2013年04月18日 1.12MB 下载

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭