Как добавить драйвер PostgreSQL (jar) в толстую банку с микропрофилем open-liberty, созданную с помощью liberty-maven-plugin?

Я пытаюсь использовать PostgreSQL с моим приложением MicroProfile, но мне не удается загрузить драйвер. Мой server.xml содержит это:

<dataSource jndiName="jdbc/reports">
    <jdbcDriver libraryRef="PostgresLib" />
    <properties.postgresql serverName="localhost"
                           portNumber="5432"
                           databaseName="reports"
                           user="reports"
                           password="reports"/>
</dataSource>

<library id="PostgresLib">
    <fileset dir="${server.config.dir}/lib"
             includes="postgresql-42.2.9.jar"/>
</library>

Я попытался скопировать файл jar через maven-dependency-plugin, но в папке target / liberty нет файла jar. Я предполагаю, что плагин liberty-maven-plugin очищает папки раньше. Я также добавил в свой pom.xml следующую зависимость:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.9</version>
</dependency>

Что мне не хватает?


person ctwx    schedule 17.12.2019    source источник


Ответы (2)


Пример конфигурации был бы правильным, если бы jar PostgreSQL располагался по адресу ${server.config.dir}/lib/postgresql-42.2.9.jar.

Однако похоже, что вы говорите, что jar PostgreSQL действительно упакован в ваше приложение. В настоящее время единственный способ определить источник данных для драйвера JDBC, который является пакетом в приложении, - это настроить определяемый приложением источник данных (@DataSourceDefinition в веб-компоненте или компоненте ejb или <data-source> в дескрипторе развертывания), а не в конфигурации сервера ( элементы dataSource и library в вашем примере).

Например, вы можете настроить на сервлете что-то вроде следующего:

@DataSourceDefinition(name = "java:app/env/jdbc/reports",
                      className = "org.postgresql.xa.PGXADataSource",
                      databaseName = "reports",
                      serverName="localhost",
                      portNumber=5432,
                      user = "reports",
                      password = "reports")
public class MyServlet extends HttpServlet {
    @Resource(lookup = "java:app/env/jdbc/reports")
    DataSource reportsDataSource;
    ...
person njr    schedule 18.12.2019
comment
Но есть ли способ упаковать его в толстую банку? Пока мне не повезло получить ни одного водителя Open Liberty в фатжаре. Только внутри развертываемого файла войны. - person ctwx; 11.02.2020

Выглядит нормально. Все, что вам нужно сделать, это добавить зависимость Postgres-Maven в ваш pom.xml и создать приложение с помощью maven. Это указывает Maven загрузить библиотеку Postgres и добавить ее в ваш путь к классам (нет необходимости загружать и копировать библиотеку вручную).

Если вы хотите создать рабочий файл jar, вы должны использовать maven цель пакета.

person springe    schedule 17.12.2019
comment
Но как открытая свобода находит сосуд? Мое объявление library в server.xml должно использовать jar-файл драйвера внутри fatjar моего приложения, но за пределами файла war внутри дальней jar. Добавление зависимости postgresql в мой проект, добавление ее в файл войны внутри толстой банки, верно? Но как тогда открытая свобода может получить к этому доступ? - person ctwx; 17.12.2019
comment
Мой pom.xml выглядит так: pastebin.com/Q0njnvii, если это поможет - person ctwx; 17.12.2019