【问题标题】:is tomEE aware of maven dependency? [duplicate]tomEE 是否知道 Maven 依赖关系? [复制]
【发布时间】:2020-01-13 16:37:27
【问题描述】:

我正在尝试将 postgresql 驱动程序与 tomcat 一起使用。 但是当我运行 tomcat 时,我得到了 FileNotFound 异常(Class.forName(“org.postgresql.Driver”))。 tomEE 是否知道 Maven 依赖关系。 我该如何克服它

【问题讨论】:

  • No TomEE不知道maven依赖,因为Maven是一个构建工具,而TomEE只对构建创建的jar、war、ear文件感兴趣,并且不关心用于执行构建的工具。然而,TomEE 确实提供了 Maven 插件来帮助构建。

标签: java maven jdbc apache-tomee


【解决方案1】:

没有。 Tomcat/TomEE 部署后不涉及 Maven

不,TomEE 不知道Maven 或您的POM

作为commented by Andreas,您的 Maven 驱动的 Web 应用程序项目将生成一个 WAR 文件或 EAR 文件。该文件包含您可能在 POM 中配置的所有依赖项。

对于部署,您将把 WAR 或 EAR 文件移动到 TomEE 服务器。那时,不再有 Maven 参与。

以上这些 cmets 适用于 production 的最终部署。在开发过程中,您可能正在使用 IDE(例如 IntelliJ/NetBeans/Eclipse),它可以调用外部 web container(例如 Tomcat 或 TomEE)来运行和调试您的 Web 应用程序。作为将 IDE 连接到外部 Web 容器的一部分,在这种特殊情况下可能会涉及 Maven 设置。即使在这种特殊情况下,Tomcat/TomEE 也不知道 Maven 可能参与了它的启动或配置。

JDBC 驱动很特殊

此外,由于类加载器问题和 JDBC 驱动程序注册过程,将 JDBC 驱动程序部署到 Tomcat、TomEE 或其他 Jakarta Servlet 容器是一件复杂的事情。通常,您应该在 WAR/EAR 中捆绑 JDBC 驱动程序。

搜索 Stack Overflow 以了解更多信息。请记住,TomEE 是基于 Apache Tomcat 构建的,因此您阅读的有关 Tomcat 的大部分内容都适用。

见:

顺便说一句,在具有 JDBC 驱动程序注册功能 (DriverManager) 的现代 Java 中,您是 no longer need to call Class.forName。那call is now legacy

DataSource

提示:学习使用驱动程序提供的DataSource 实现。关于Postgres,如果使用来自jdbc.postgresql.org的JDBC驱动,请参见this chapter

PGSimpleDataSource pgDataSource = new PGSimpleDataSource();
pgDataSource.setDataSourceName("Acme Corp invoicing database");
pgDataSource.setServerName("localhost");
pgDataSource.setDatabaseName("test");
pgDataSource.setUser("testuser");
pgDataSource.setPassword("testpassword");

DataSource dataSource = pgDataSource ;  // Perhaps save as an "attribute" on your web app's "context". 

Ask the data source 用于需要与数据库通信时的 Connection 对象。通常最好使用try-with-resources 语法。

try 
(
    Connection conn = dataSource.getConnection() ;
) 
{
    … do your database work
}

稍后您可以学习在您的代码库之外在外部配置此 DataSource 信息。该配置是通过 JNDI 和命名服务器(例如 Tomcat 中内置的 LDAP 样式服务器)完成的。

【讨论】:

  • 似乎 pgpoolingdatasource 已被弃用
  • @VictorFries985 是的。这里我展示了非池化DataSource 实现PGSimpleDataSource。连接池非常复杂,而且很难正确彻底地完成。就个人而言,我建议避免使用连接池,除非您有一个可以证明可以通过池解决的重大问题。如果你必须做连接池,有一些 Postgres 产品可以做到这一点,例如 PG BouncerPG Pool
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-23
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
  • 2017-07-31
  • 2020-08-27
  • 1970-01-01
相关资源
最近更新 更多