谁在服务器中配置的 JNDI 数据源上执行连接? [复制]

Posted

技术标签:

【中文标题】谁在服务器中配置的 JNDI 数据源上执行连接? [复制]【英文标题】:Who performs the connection on a JNDI DataSource configured in the server? [duplicate] 【发布时间】:2018-08-22 10:39:33 【问题描述】:

我正在将 WAR 部署到 Tomcat 中,该 Tomcat 在其 context.xml 中定义了数据源 (Oracle)。

我的应用程序通过 jndi 名称访问它。 我需要将 jar 驱动程序嵌入到战争中吗?还是我只需要将它放在 Tomcat 的类路径中?

--编辑--

我解释的有点不对。我在战争中提供它并且它正在工作。 但我认为我的最后一个疑问是连接是由服务器本身建立的,还是 jndi 只是将数据提供给应用程序以执行它。 战争中提供的驱动程序让我对这种行为感到困惑

谢谢

【问题讨论】:

是什么阻止您测试这两个选项? (我猜想把它放在 Tomcat 类路径中就足够了) 我解释的有点不对。我在战争中提供它并且它正在工作。但是我认为我的最后一个疑问是连接是由服务器本身建立的,还是 jndi 只是将数据提供给应用程序以执行它。战争中提供的驱动程序让我对这种行为感到困惑 【参考方案1】:

在这种情况下,您不应该将驱动程序添加到您的 WAR 文件中,而是将其部署到 tomcat 的 lib 目录中。原因:服务器打开并维护连接,所以服务器本身需要访问驱动程序,而不仅仅是应用程序。

如果您还将驱动程序添加到应用程序,则可能会导致两个版本都被转移,并且最终可能会在类路径上出现重复的类,这绝不是有趣的调试。在绝对需要它的位置(服务器)包含一次,然后将其从您的 WAR 文件中删除。

【讨论】:

【参考方案2】:

应用服务器并未与所有 RDBMS 系统的驱动程序 jar 文件捆绑在一起。 Tomcat 当然不附带 Oracle 的 JDBC 驱动程序文件。但是仍然需要这些类来创建连接等。

所以是的,您需要包含您的驱动程序 jar。您可能需要将它安装在服务器本身上(在<tomcat>/lib 下)

【讨论】:

【参考方案3】:

将 JDBC 驱动程序放在 /lib 中将使其可用于所有应用程序。但是,如果您希望它专门用于 webapp,那么您可以考虑将库放在 /webapps/testapp/WEB-INF/lib 下。这样,您就可以控制要使用的版本。

【讨论】:

以上是关于谁在服务器中配置的 JNDI 数据源上执行连接? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Pivotal TC 服务器中配置 Oracle 数据源 JNDI?

5. JDBC之数据库连接池——Part2

在tomcat下context.xml中配置各种数据库连接池(JNDI)

tomcat服务器连接MySQL数据库的JNDI数据源配置以及获得连接的Java代码

Tomcat,Jboss,Weblogic通过jndi连接数据库

JNDI连接数据库的详细步骤