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

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

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

--编辑--

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

谢谢

【问题讨论】:

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

标签: java 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 下。这样,您就可以控制要使用的版本。

      【讨论】:

        猜你喜欢
        • 2016-08-17
        • 2016-09-23
        • 2011-07-15
        • 1970-01-01
        • 1970-01-01
        • 2012-07-13
        • 1970-01-01
        • 2012-12-19
        • 2023-03-06
        相关资源
        最近更新 更多