Почему источник данных не соответствует миграции с TomEE 1.7.4 на 8.0.0-M2? - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь перейти с Apache TomEE Plume с 1.7.4 на 8.0.0-M2, и есть некоторые вещи, которые работали в предыдущей версии и не работают с новой версией.

У меня естьресурс в context.xml

<Resource 
    auth="Container" 
    driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
    maxTotal="10000" 
    maxIdle="1000" 
    maxPoolSize="10000" 
    maxWaitMillis="-1" 
    name="jdbc/datasource" 
    password="password" 
    type="javax.sql.DataSource" 
    url="jdbc:sqlserver://127.0.0.1:1433;databaseName=database;applicationName=app" 
    username="usr" 
    validationQuery="select @@version"/>

Используется в качестве источника данных в файле persistence.xml

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="gispte" transaction-type="RESOURCE_LOCAL">
        <non-jta-data-source>jdbc/datasource</non-jta-data-source>
        <class>model.UserContactType</class>
    </persistence-unit>
</persistence>

Такая конфигурация прекрасно работает в 1.7.4 и выдает ошибки при доступе к данным в 8.0.0

EntityManager em = factory.createEntityManager();
TypedQuery<UserContactType> q = em.createQuery("select uct from UserContactType uct order by uct.name", UserContactType.class);
return q.getResultList();

консольный вывод

[EL Warning]: 2019-05-01 18:35:52.725--UnitOfWork(1787752065)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.4.v20160829-44060b6): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERCONTACTTYPE
Error Code: -5501
Call: SELECT id, name FROM usercontacttype ORDER BY name
Query: ReadAllQuery(referenceClass=UserContactType sql="SELECT id, name FROM usercontacttype ORDER BY name")
мая 01, 2019 6:35:52 PM org.apache.openejb.core.transaction.EjbTransactionUtil handleSystemException
SEVERE: EjbTransactionUtil.handleSystemException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.4.v20160829-44060b6): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERCONTACTTYPE
Error Code: -5501
Call: SELECT id, name FROM usercontacttype ORDER BY name
Query: ReadAllQuery(referenceClass=UserContactType sql="SELECT id, name FROM usercontacttype ORDER BY name")
javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.4.v20160829-44060b6): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERCONTACTTYPE
Error Code: -5501
Call: SELECT id, name FROM usercontacttype ORDER BY name
Query: ReadAllQuery(referenceClass=UserContactType sql="SELECT id, name FROM usercontacttype ORDER BY name")
    at org.eclipse.persistence.internal.jpa.QueryImpl.getDetailedException(QueryImpl.java:382)
    at org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:260)
.....
Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.4.v20160829-44060b6): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERCONTACTTYPE
Error Code: -5501
Call: SELECT id, name FROM usercontacttype ORDER BY name
Query: ReadAllQuery(referenceClass=UserContactType sql="SELECT id, name FROM usercontacttype ORDER BY name")
    at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:340)
.....
Caused by: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERCONTACTTYPE
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
.....

В этом журнале хорошо видно, что JPA пытается подключиться к базе данных HSQL, хотя в конфиге указан MS SQL.Я попытался увидеть строку подключения в диспетчере сущностей и ее значение.

EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
try {
    Connection con = em.unwrap(java.sql.Connection.class);
    if ( con == null ) {
        System.out.println("failed get connection from entity manager");
    } else {
        System.out.println("connection url from entity manager\n"+con.getMetaData().getURL());
    }
} catch (Exception e) {
    e.printStackTrace();
} finally {
    em.getTransaction().commit();
}

консольный вывод 8.0.0

connection url from entity manager
jdbc:hsqldb:file:D:\src\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\data\hsqldb\hsqldb

Но в томе 1.7.4

* это правильно1023 *

Какие новые настройки в 8.0.0 необходимо изменить для корректной работы?Почему правильное соединение изменилось на соединение hsql?Возможно, это соединение по умолчанию в этой среде выполнения, и tomee 8.0.0 просто не смог прочитать старые настройки, не так ли?

Также предупреждения о запуске сервера

may 01, 2019 7:38:58 PM sun.reflect.NativeMethodAccessorImpl invoke
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:app' did not find a matching property.
.....
may 01, 2019 7:32:20 PM org.apache.openejb.config.AutoConfig deploy
WARNING: Found matching datasource: app/jdbc/datasource but this one is a JTA datasource
may 01, 2019 7:32:20 PM org.apache.openejb.config.AutoConfig deploy
WARNING: Found matching datasource: ROOT/jdbc/datasource but this one is a JTA datasource
may 01, 2019 7:32:20 PM org.apache.openejb.config.AutoConfig deploy
WARNING: Found matching datasource: ROOT/jdbc/datasource but this one is a JTA datasource
...