Я пытаюсь использовать драйвер postgresql с tomcat. но когда я запускаю tomcat, я получаю исключение FileNotFound (Class.forName ("org.postgresql.Driver")). Знает ли tomEE о зависимости maven. как я могу преодолеть это
знает ли tomEE о зависимости maven?
Ответы (1)
Нет. Maven не участвует после развертывания Tomcat/TomEE.
Нет, TomEE не знает о Maven или вашем POM.
Как прокомментировал Андреас, ваше веб-приложение, управляемое Maven проект создаст файл WAR или файл EAR. Этот файл содержит любые зависимости, которые вы, возможно, настроили в своем POM.
Для развертывания вы переместите этот файл WAR или EAR на сервер TomEE. В этот момент Maven больше не участвует.
Приведенные выше комментарии относятся к вашему возможному развертыванию для рабочей версии. Во время разработки вы можете использовать IDE, например IntelliJ/NetBeans/Eclipse, которая может вызывать во внешнем веб-контейнере, таком как Tomcat или TomEE, для запуска и отладки вашего веб-приложения. В этом особом случае могут быть задействованы настройки Maven как часть подключения вашей IDE к внешнему веб-контейнеру. Даже в этом особом случае Tomcat/TomEE не знает о возможном участии Maven в его запуске или настройке.
Драйверы JDBC особенные
Кроме того, развертывание драйвера JDBC в Tomcat, TomEE или другом контейнере сервлетов Jakarta является сложной задачей из-за проблем с загрузчиком классов и процессом регистрации драйвера JDBC. Как правило, вам не следует не связывать драйвер JDBC с вашим WAR/EAR.
Найдите Stack Overflow, чтобы узнать больше. Помните, что TomEE создан на основе Apache Tomcat, так что почти все, что вы читали о Tomcat, применимо.
Видеть:
- Где размещать сторонние библиотеки при использовании Maven с Tomcat?
- Чтобы предотвратить утечку памяти, регистрация драйвера JDBC была принудительно отменена
- Как мне подключиться к базе данных/источнику данных JDBC в приложении на основе сервлета?
Кстати, в современной Java с ее функцией регистрации драйверов JDBC (DriverManager
), вам больше не нужно вызывать Class.forName
. Этот вызов теперь унаследован.
DataSource
Совет: научитесь использовать DataSource
реализация, предоставленная вашим драйвером. Что касается Postgres, если используется драйвер JDBC из jdbc.postgresql.org
, см. этой главы.
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".
Запросите у источника данных Connection
при необходимости обращения к базе данных. Обычно лучше всего использовать синтаксис try-with-resources.
try
(
Connection conn = dataSource.getConnection() ;
)
{
… do your database work
}
Позже вы сможете научиться настраивать эту DataSource
информацию извне, за пределами вашей кодовой базы. Эта конфигурация выполняется через JNDI и сервер имен, такой как сервер в стиле LDAP, встроенный в Tomcat.
DataSource
без пула PGSimpleDataSource
. Пул соединений на удивление сложен, и его трудно сделать правильно и тщательно. Лично я рекомендую избегать пула соединений, если у вас нет серьезной проблемы, решение которой можно доказать с помощью пула. Если вам необходимо создать пул соединений, для этого есть некоторые продукты Postgres, такие как PG Bouncer и PG Pool.
- person Basil Bourque; 14.01.2020