java - Tomcat 和其他容器中的数据源和连接池与 JNDI 有什么关系?

标签 java jdbc jndi connection-pooling

我正在尝试了解连接池(JDBC 连接池)。根据我的回答 n this question每个容器都有自己的机制。我也在尝试了解 JNDI 及其实现,以及与在网络中定位对象(如目录和用户)相关的任何帖子或文章,这里有一些文章:

http://www.oracle.com/technetwork/java/jndi/index.html http://www.oracle.com/technetwork/java/overview-142035.html

阅读这篇描述如何在 Tomcat 容器中管理连接池的文章,第二段

javax.sql.DataSource interface is registered with the naming service based on JNDI API. A data source driver allows accessed to the database via DataSource interface. A DataSource object is looked up in the context based on registered through JNDI Resource

问题是 JNDI 和网络目录与实例化提供连接池的 DataSource 的实现有什么关系,可能是通过享元设计模式实现的?

我错过了什么吗?

最佳答案

它们没有直接关系。 DataSource 只是一个接口(interface),用于管理数据库连接池中的连接。任何 Java Servlet 容器或 Java EE 容器都可以为此接口(interface)提供自己的实现。

作为应用程序开发人员,您无需担心容器如何实例化此实现或实际实现类是什么。

要在实际容器实现和您的应用程序之间提供松耦合,您只需获取此实现的一个实例,这通常通过 JNDI 完成。

容器实例化 DataSource 实现并将其绑定(bind)到 JNDI 注册表中的特定地址,应用程序开发人员可以在其中检索它。在应用程序中,您只需使用 DataSource 接口(interface)来访问此实现,从而使您的应用程序可移植到不同的服务器及其各自的 DataSource 实现。

关于java - Tomcat 和其他容器中的数据源和连接池与 JNDI 有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35955558/

相关文章:

java - GWT 突然停止执行

java - 如何将字符串对象转换为日期对象?

Oracle JDBC 属性

java - 基于列标签的 CachedRowSetImpl getString 抛出 "Invalid column name"

javax.naming.NamingException : Name is not bound to a Context

java - 从静态方法解析 OSGi 服务实例

java - 尝试从另一个子类继承时出错?

java - 为什么不允许这样使用泛型和通配符?

java - 有人看到我的更新或插入查询有问题吗?我正在使用准备好的声明

tomcat - 坚持tomcat jndi设置