Как добавить драйверы JDBC и настроить ресурсы JDBC в Payara Micro?

Какие есть варианты настройки драйверов и ресурсов JDBC при использовании Java EE Payara Micro?

6 ответов

Решение

Этот метод объединяет ответы Майка и Адама Бина через таино. Это включает в себя создание нового domain.xml, который является конфигурационным файлом Payara. Никакая модификация приложения не требуется, если она работала с полной Payara. Пример ниже для PostgreSQL JDBC.

  1. открыто payara-micro.jar с менеджером архива и распакуйте файл /microdomain.xml,
  2. открыто microdomain.xml в текстовом редакторе.
  3. Если ваше приложение уже было развернуто на полную версию Payara, вы можете скопировать и вставить нижеприведенные изменения из полной версии Payara. domain.xml,
  4. Добавьте прямо над строкой, содержащей </resources>, используя ваше имя базы данных, dbuser, dbpassword, имя хоста: порт и имя пула:

    <jdbc-connection-pool connection-validation-method="auto-commit" driver-classname="org.postgresql.Driver" res-type="java.sql.Driver" name="poolname" is-connection-validation-required="true" connection-creation-retry-attempts="3" validate-atmost-once-period-in-seconds="60">
        <property name="URL" value="jdbc:postgresql://localhost:5432/dbname"></property>
        <property name="user" value="dbuser"></property>
        <property name="password" value="dbpassword"></property>
    </jdbc-connection-pool>
    <jdbc-resource pool-name="poolname" jndi-name="jdbc/poolname"></jdbc-resource>
    
  5. Добавьте прямо над строкой, содержащей </server>:

    <resource-ref ref="jdbc/poolname"></resource-ref>
    
  6. Сохраните и закройте текстовый редактор.
  7. Запустите Payara micro из командной строки, используя ваши пути и имена файлов. Синтаксис Linux:

    java -cp "/opt/jdbc/postgresql.jar:/opt/payara/micro.jar" fish.payara.micro.PayaraMicro --deploy webapp.war --domainConfig microdomain.xml
    

Добавьте определение источника данных в ваш web.xml, а затем добавьте файл jar для JDBC jar в ваш WEB-INF/lib. Затем разверните файл войны, как обычно, в Payara Micro.

<data-source>
  <name>java:global/ExampleDataSource</name>
  <class-name>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</class-name>
  <server-name>localhost</server-name>
  <port-number>3306</port-number>
  <database-name>mysql</database-name>
  <user>root</user>
  <password>root</password>
  <!-- Example of how to use a Payara specific custom connection pool    setting -->
  <property>
     <name>fish.payara.sql-trace-listeners</name>
     <value>com.sun.gjc.util.SQLTraceLogger</value>
  </property>
</data-source>

Полный пример того, как это сделать, можно найти в репозитории примеров GitHub Payara. Смотрите пример источника данных на Payara GitHub

Поскольку принятый ответ не сработал для меня, придумал другой и немного более простой способ. Вы все еще полагаетесь на обычай domain.xml, но команда запуска может быть упрощена:

java -jar /opt/payara/payara-micro.jar --deploy webapp.war --domainConfig domain.xml --addJars /opt/mysql-connector-java-5.1.40-bin.jar

Этот звонок не требует, чтобы вы знали главный класс.

Вы можете настроить JDBC в обычном domain.xml и предоставить его Payara. Если вы не уверены, вы всегда можете взять существующий domain.xml и использовать конфигурацию JDBC из этого.

Payara Micro имеет несколько параметров командной строки, один из которых позволяет указать альтернативный domain.xml файл:

java -jar payara-micro.jar --deploy myApp.war --domainConfig mydomain.xml

Если вы загружаете Payara Micro программно, вы должны использовать:

setAlternateDomainXML(File alternateDomainXML)

Адам Бьен ответил на этот вопрос в своем 19-м видео Airhacks.

Мой вывод: при использовании с пользовательскими ресурсами лучше всего использовать в качестве встроенного сервера, в основном мы настраиваем ресурсы JDBC, а с помощью зависимостей maven мы включаем необходимые драйверы в файлы jar или war.

Один из вариантов - glassfish-resources.xml

<!-- db1 -->
<jdbc-connection-pool
        datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" name="db1"
        res-type="javax.sql.DataSource"
        steady-pool-size="1"
        is-connection-validation-required="true"
        connection-validation-method="meta-data"
        max-pool-size="10">
    <property name="password" value="icoder_pwd"/>
    <property name="user" value="icoder_user"/>
    <property name="databaseName" value="icoder_db"/>
    <property name="serverName" value="localhost"/>
    <property name="portNumber" value="3310"/>
    <property name="zeroDateTimeBehavior" value="convertToNull"/>
</jdbc-connection-pool>
<jdbc-resource pool-name="db1" jndi-name="jdbc/db1"/>


<!-- db2 -->
<jdbc-connection-pool
        datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" name="db2"
        res-type="javax.sql.DataSource"
        steady-pool-size="1"
        is-connection-validation-required="true"
        connection-validation-method="meta-data"
        max-pool-size="10">
    <property name="password" value="icoder_pwd"/>
    <property name="user" value="icoder_user"/>
    <property name="databaseName" value="icoder_db"/>
    <property name="serverName" value="localhost"/>
    <property name="portNumber" value="3311"/>
    <property name="zeroDateTimeBehavior" value="convertToNull"/>
</jdbc-connection-pool>
<jdbc-resource pool-name="db2" jndi-name="jdbc/db2"/>


</resources>

Полный пример реализации менеджера сущностей вы можете найти: https://github.com/igorzg/payara-micro-jpa-multi-tenancy

Другие вопросы по тегам