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

Who performs the connection on a JNDI DataSource configured in the server?

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

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

--编辑--

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

谢谢

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

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

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

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

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