tomEE 知道 Maven 依赖吗?

is tomEE aware of maven dependency?

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

没有。 Tomcat/TomEE 部署后

Maven 未参与

不,TomEE 不知道 Maven or your POM

作为 commented by Andreas,您的 Maven-driven web-app 项目将生成一个 WAR 文件或 EAR 文件。该文件包含您可能已在 POM 中配置的任何依赖项。

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

以上这些评论适用于 production. While in development, you may be using an IDE such as IntelliJ/NetBeans/Eclipse that can call upon an external web container 的最终部署,例如 Tomcat 或 TomEE 到 运行 以及调试您的 Web 应用程序。 Maven 设置可能涉及这种特殊情况,作为将 IDE 连接到外部 Web 容器的一部分。即使在这种特殊情况下,Tomcat/TomEE 也不知道 Maven 可能参与了它的启动或配置。

JDBC driver很特别

此外,由于类加载器问题和 JDBC driver注册过程。通常,您应该 而不是 在 WAR/EAR 中捆绑 JDBC driver。

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

参见:

顺便说一下,现代 Java 具有 JDBC driver 注册功能(DriverManager), you no longer need to call Class.forName. That call is now legacy

DataSource

提示:学习 使用 DataSource implementation provided by your driver. Regarding Postgres, if using the JDBC driver from jdbc.postgresql.org, see 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 for a Connection object when needing to talk to the database. Usually best to use try-with-resources 语法。

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

稍后您可以学习在代码库之外从外部配置此 DataSource 信息。该配置是通过 JNDI 和命名服务器完成的,例如 Tomcat.

中内置的 LDAP-style 服务器