`

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,提供了接口让客户端来调用



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里
  • 大小: 10.3 KB
分享到:
评论

相关推荐

    JDBC 4 ORACLE

    `jtds.jar`是一个文件名,通常代表Java类型的数据源驱动(JDBC驱动)文件,它不是Oracle的官方JDBC驱动,而是针对Microsoft SQL Server和Sybase Adaptive Server的开源驱动。这个文件出现在上下文中的原因可能是为了...

    jdbc 常用三种数据库的相关jar包

    Oracle JDBC驱动包括了 Thin Driver 和 Thin Driver,其中 Thin Driver 是轻量级的,不依赖于Oracle客户端,可以直接与Oracle服务器通信。 3. PostgreSQL数据库:PostgreSQL是一个功能强大的开源数据库系统,支持...

    各类数据库连接jar包

    7. **H2数据库驱动**:H2是一个开源的、高性能的关系型数据库,其JDBC驱动为org.h2.Driver,适用于本地测试和开发。 8. **Apache Derby/JavaDB驱动**:Apache Derby和JavaDB是同源的数据库系统,它们的JDBC驱动是...

    sharding-demo.zip

    ShardingJDBC并不直接操作数据库,而是作为数据访问层(DAL)的一层抽象,提供了一套API和SPI,使得应用程序可以像操作单一数据库一样操作分布式数据库。在读写分离场景下,ShardingJDBC会根据配置将读操作路由到...

    尚硅谷大数据技术之Presto1

    你可以认为类似 JDBC 那样,但却是 Presto 的 SPI 的实现,使用标准的 API 来与不同的数据源交互。Presto 有几个内建 Connector:JMX 的 Connector、System Connector(用于访问内建的 System table)、Hive 的 ...

    java-1.8.0_222-openjdk-amd64.tgz

    这两个目录可能包含OpenJDK源代码的各个部分,如核心类库、JDBC驱动、网络支持等。 2. **META-INF**:这是Java归档(JAR)文件的标准部分,包含元数据信息,如MANIFEST.MF文件,它列出了JAR文件的内容、版本信息和...

    Apache ShardingSphere分布式数据库中间层生态圈-其他

    它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。 适用于任何基于JDBC的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或...

    plugin-datasource:此存储库已弃用。 访问 https

    2. **Java的JDBC(Java Database Connectivity)**:JDBC是Java与数据库交互的标准API,允许Java程序通过驱动程序与各种数据库进行通信。数据源是JDBC的一部分,用来创建和管理数据库连接。 3. **连接池**:在数据...

Global site tag (gtag.js) - Google Analytics