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 的大部分内容都适用。
参见:
- Where to put 3rd party libs when using Maven with Tomcat?
- To prevent a memory leak, the JDBC Driver has been forcibly unregistered
- How should I connect to JDBC database / datasource in a servlet based application?
顺便说一下,现代 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 服务器
我正在尝试将 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 的大部分内容都适用。
参见:
- Where to put 3rd party libs when using Maven with Tomcat?
- To prevent a memory leak, the JDBC Driver has been forcibly unregistered
- How should I connect to JDBC database / datasource in a servlet based application?
顺便说一下,现代 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.