знает ли tomEE о зависимости maven?

Я пытаюсь использовать драйвер postgresql с tomcat. но когда я запускаю tomcat, я получаю исключение FileNotFound (Class.forName ("org.postgresql.Driver")). Знает ли tomEE о зависимости maven. как я могу преодолеть это


person Victor Fries985    schedule 13.01.2020    source источник
comment
Отвечает ли это на ваш вопрос? Где размещать сторонние библиотеки при использовании Maven с Кот?   -  person jhamon    schedule 13.01.2020
comment
Нет, TomEE не знает о зависимостях maven, поскольку Maven — это инструмент сборки, а TomEE интересует только jar, war, ear файл, созданный сборкой, и не имеет значения, какой инструмент использовался для выполнения сборки. Однако TomEE предоставляет подключаемый модуль Maven для помощи в сборке.   -  person Andreas    schedule 13.01.2020


Ответы (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, применимо.

Видеть:

Кстати, в современной 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.

person Basil Bourque    schedule 13.01.2020
comment
похоже, что pgpoolingdatasource устарел - person Victor Fries985; 14.01.2020
comment
@VictorFries985 Да. Здесь я показываю реализацию DataSource без пула PGSimpleDataSource. Пул соединений на удивление сложен, и его трудно сделать правильно и тщательно. Лично я рекомендую избегать пула соединений, если у вас нет серьезной проблемы, решение которой можно доказать с помощью пула. Если вам необходимо создать пул соединений, для этого есть некоторые продукты Postgres, такие как PG Bouncer и PG Pool. - person Basil Bourque; 14.01.2020