我正在阅读Java 中Connection
的 s vs DataSource
s 并且我有一些问题。aDataSource
真的只是一个管理器和一个Connection
(或多个连接)的抽象吗?
4 回答
来自文档:
用于连接到此 DataSource 对象所代表的物理数据源的工厂。作为 DriverManager 工具的替代方法,DataSource 对象是获取连接的首选方法。
实际上,aDataSource
是Connection
s 的提供者,它有多种以不同方式运行的实现。如:
基本实现——产生一个标准的 Connection 对象
连接池实现——生成一个将自动参与连接池的连接对象。此实现与中间层连接池管理器一起使用。
分布式事务实现——生成一个可用于分布式事务并且几乎总是参与连接池的 Connection 对象。此实现与中间层事务管理器一起使用,并且几乎总是与连接池管理器一起使用。
Connection
是连接:)DataSource
是连接管理器(连接池)。
数据源是你的数据源,连接是驱动。
DataSource 在其现有形式中是一个错误的概念,就好像它旨在抽象交互,它不应该首先返回一些 SQL 连接来与之交互。这也是矫枉过正,XA是一个幻想概念,有些人因世界上缺乏可靠的实施而付出了沉重的代价(我的意思是所有企业商业实施者都失败并暴露业务......有人因此而在金融领域受到伤害,但我不会提及名称)。一般来说,无论 Sun 还是 Oracle 推荐它,它都会导致过度设计和代码中的一些技术污垢(处理上下文、获取数据的额外步骤、一些外部配置......最终它仍然是特定于无论如何供应商实现)。一些开发的企业解决方案处理池、连接恢复等
作为记录,我与两者都合作过,并且基于在不同地方遇到的事实。如果您对此表示怀疑,请询问为什么您可以在 Hibernate 配置中看到纯 JDBC URL 在企业的所有地方。许多人只是简单地抛弃了 J2EE 的重量级思想并转向轻量级……也使用基于 DriverManager 的普通连接。
你想让你的职业生涯上线,然后继续使用 XA 数据源和恢复失败的事务,其中糟糕的 XA 实现严重失败。