Класс драйвера DB2 нельзя разрешить в файле persistence.xml и получить исключение entityManager - PullRequest
0 голосов
/ 11 октября 2018

Мне дан проект, и я должен запустить его на своем локальном компьютере.

На самом деле в нем много проектов, которые компилируются в файлы JAR, и основной проект, который компилируется в ear, включая эти файлы JAR.

Приложение запускается на сервере WebSphere, и хотя оно запускается, я в конечном итоге получаю сообщение об ошибке в диспетчере сущностей.В журналах ничего не отображается, но после отладки, при вызове метода из класса из определенного jar, я получаю следующее исключение:

javax.el.ELException: javax.ejb.EJBException:Ссылка com.xxx.xxx.managers.xxxManager / entityManager типа javax.persistence.EntityManager для компонента XXXManager в модуле xxx-Manager.jar приложения XXXPortal_ear не может быть разрешена.

После проверкидалее я увидел, что IntelliJ помечает мой файл persistence.xml с некоторыми ошибками:

<!-- Hibernate -->
<!-- <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"/> -->
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.WebSphereJtaPlatform" />
<property name="hibernate.default_schema" value="XXX_TRANSACTIONS"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.DB2Dialect"/>
<property name="hibernate.connection.driver_class" value="com.ibm.db2.jcc.DB2XADataSource"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.max_fetch_depth" value="3"/>
<property name="hibernate.default_batch_fetch_size" value="100"/>
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>      
<!-- OpenJPA -->
<property name="openjpa.jdbc.Schema" value="XXX_TRANSACTIONS"/>
<property name="openjpa.ConnectionDriverName" value="com.ibm.db2.jcc.DB2XADataSource"/>
<property name="openjpa.ConnectionFactoryProperties" value="PrintParameters=True, PrettyPrint=true" />
<property name="openjpa.Log" value="DefaultLevel=DEBUG, Runtime=TRACE, Tool=INFO, Query=TRACE, JDBC=ERROR, SQL=ERROR" />

Значения XXX_TRANSACTIONS свойства hibernate.default_schema помечаются красным и отображаются при наведении:

Невозможноразрешить схему 'XXX_TRANSACTIONS'

Кроме того, в свойстве hibernate.connection.driver_class часть значения "com.ibm.db2.jcc.DB2XADataSource" помечена красным (только db2.jcc.DB2XADataSource).красный).

Отображение при наведении:

Не удается разрешить класс 'DB2XADataSource'

Я попытался импортировать db2jcc.jar, но затем я получаю

com.ibm.db2.jcc.DB2XADataSource 'не назначается на' java.sql.Driver '

в свойстве класса драйвера.

Возможно, что я что-то напутал в конфигурации WebSphere.

Я могу предоставить дополнительную информацию, если это необходимо.

Пожалуйста, помогите.Заранее спасибо.

РЕДАКТИРОВАТЬ:

Это строки из persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<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="XxxModel">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>XxxDatasource</jta-data-source>
        <mapping-file>META-INF/orm.xml</mapping-file>
        <class>...

Я также публикую общие свойстваJDBC-провайдер WebSphere:

enter image description here

@ Энди Гиберт: к сожалению, я не могу обновить версию Hibernate, это может вызвать проблемы при повторном развертывании у клиента, поэтому яне может выполнить серьезные изменения.

Я должен упомянуть, что приложение работает на другом компьютере.Он открывается в Rational Application Developer Studio (версия Eclipse для IBM).Я пытаюсь настроить на своем локальном компьютере IntelliJ IDEA Ultimate Edition.Одно отличие, которое я заметил, заключается в том, что созданный в моей среде jar не содержит файл persistence.xml и другие файлы ресурсов этого конкретного модуля.Я использовал плагин maven resources, чтобы включить его в мой jar:

    <resources>
      <resource>
          <directory>src/main/java/META-INF</directory>
      </resource>
  </resources>

Несмотря на это, проблема сохраняется, и при отладке я все еще получаю исключение, которое я написал в исходном сообщении.

1 Ответ

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

Я считаю, что свойство hibernate.connection.driver_class предназначено для класса реализации вашего драйвера JDBC класса java.sql.Driver, но вы перечислили com.ibm.db2.jcc.DB2XADataSource, что является реализацией DB2 java.sql.XADataSource, а не реализацией java.sql.Driver.

В любом случае, я бы не советовал настраивать Hibernate таким образом в WebSphere, поскольку при настройке Hibernate для непосредственного просмотра класса драйвера он будет обходить пул соединений WebSphere и будет иметь меньшую производительность.

Вместо этого я бы порекомендовал настроить DataSource в WebSphere, а затем сослаться на имя JNDI DataSource в вашем файле persistence.xml следующим образом:

<persistence ...>

  <persistence-unit name="SOME_PU" transaction-type="JTA">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <jta-data-source>jdbc/YOUR_DATASOURCE</jta-data-source>
  </persistence-unit>

</persistence>

Обратите внимание, что начиная с Hibernate 5.2.17.Final,В Hibernate появился новый класс интеграции транзакций, который способен полностью интегрироваться с менеджером транзакций WebSphere (традиционный или Liberty).Если вы используете эту версию или новее, то hibernate.transaction.jta.platform

необязательно
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...