Postgres и JPA в macOS - PullRequest
       13

Postgres и JPA в macOS

0 голосов
/ 13 октября 2018

У меня была среда Windows с Postgres 9.6 и Wildfly 14. Я создал подключения с помощью wildfly следующим образом:

<datasource jndi-name="java:jboss/datasources/mydb" pool-name="mydb" enabled="true">
    <connection-url>jdbc:postgresql://localhost:5432/mydb</connection-url>
    <driver-class>org.postgresql.Driver</driver-class>
    <datasource-class>org.postgresql.ds.PGSimpleDataSource</datasource-class>
    <driver>postgresql-42.1.1.jar</driver>
    <security>
        <user-name>someusername</user-name>
        <password>somepassword</password>
    </security>
    <validation>
        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
        <background-validation>true</background-validation>
        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
    </validation>
</datasource>

А затем мой файл Persistence.xml выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
   xmlns="http://xmlns.jcp.org/xml/ns/persistence" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence 
   http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
        <persistence-unit name="SomePU" transaction-type="JTA">
           <jta-data-source>java:jboss/datasources/mydb</jta-data-source>
        </persistence-unit>
</persistence>

Моя сущность JPA выглядит следующим образом:

@Entity @Table(name="usr_apps")
public class SomeApp{...}

Мой класс EJB без сохранения состояния:

@PersistenceContext(unitName = "SomePU")
private EntityManager em;

public List getSometing(){
   return em.createQuery("select b from SomeApp b").getResultList(); 
}     

Те же конфиги работали в Linux Ubuntu, Linux RHEL, Mac OSX Lion.

но теперь, когда я пытаюсь запустить его на macOS mojave, я получаю эту ошибку при попытке прочитать данные через JPA.

[org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-1) ERROR: relation "usr_apps" does not exist
 Position: 150

Я почти уверен, что таблица существует.Я вижу, что тот же запрос выполняется в любой другой СУБД.Я выгрузил базу данных из другой среды и восстановил ее в новой.

PS.Я также попробовал PSQL 10. Тот же результат.Данные не считываются из базы данных.Я могу успешно пропинговать соединение с консоли управления Wildfly.

Я также убедился, что таблица находится в общедоступной схеме.

EDIT :

Iпонял, что хотя соединение установлено на mydb, но JPA только отправляет запрос в базу данных postgres по умолчанию!

EDIT 2

Хорошо, это приближается кошибка для меня.

<datasource jndi-name="java:jboss/datasources/mydb" pool-name="mydb">
                <connection-url>jdbc:postgresql://localhost:5432/mydb</connection-url>
                <driver-class>org.postgresql.Driver</driver-class>
                <datasource-class>org.postgresql.ds.PGSimpleDataSource</datasource-class>
                <driver>postgresql-42.2.5.jar</driver>
                <security>
                    <user-name>testuser</user-name>
                    <password>testpassword</password>
                </security>
                <validation>
                    <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
                    <background-validation>true</background-validation>
                    <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
                </validation>
            </datasource>

Я получаю эту ошибку:

Caused by: org.postgresql.util.PSQLException: FATAL: database "testuser" does not exist

Почему JPA рассматривает мое имя пользователя как имя базы данных?

PS.WILDFLY 14.0.1. Финал

1 Ответ

0 голосов
/ 14 октября 2018

OK !!Все, что мне нужно было сделать, это удалить класс источника данных из соединения:

<datasource-class>org.postgresql.ds.PGSimpleDataSource</datasource-class>

Наконец-то все заработало

Обратите внимание, что wildfly версии 14 и далее автоматически добавляет эту строку в файл xml, когдавы создаете источник данных через консоль администратора.

...