Go дайте обновление об этом. Мой пост - не ответ с рабочим решением, но с дополнительными объяснениями, которые происходят (насколько я понимаю) и почему это не удается. И сказать это, прежде чем это будет краткая версия моего анализа, я написал для работы (более 4 страниц), так как я не хотел переводить полностью с немецкого (мой engli sh довольно плохой), и они основаны на нескольких файлах журнала Я не могу опубликовать sh здесь.
td; др
IBM должна изменить WAS 9.
Длинная история
После очередного разговора с нашими администраторами я провел дополнительное исследование:
Ошибка Unsupported use of GenericConnection
выдается IBM и даже была выдана на WAS 8.5 / Hibernate 4.2.x, но Комбинация WAS / Hiberante работала по-другому, как в 9.0 / 5.2.x
Ошибка Unable to use JDBC Connection to create Statement
выдается (в 5.2) IdTableHelper
при попытке создать инструкцию для объекта соединения (Statement statement = connection.createStatement();
), который был создан EntityManagerFactory. Мне было интересно, почему одна ошибка говорит, что не может обеспечить соединение? Я пришел к выводу, что WAS возвращает какой-то элемент прокси, в противном случае, если соединение будет NULL, сообщение об ошибке будет Unable obtain JDBC Connection
, которое будет инициировано ранее в коде Hibernates.
Дальнейшие исследования :
Когда приложение запускается (например, нажав start
в консоли администратора), начальная фаза состоит из двух фаз: в первой запускается контейнер, возвращая EJB, JTA JMS, JPA et c. и после этого приложение запускается и запускаются все компоненты запуска (компоненты, помеченные @StartUp
). При возникновении ошибки, которую WAS считает критической, при запуске происходит сбой.
Hibernates пытается проверить схему (на hbm2dll=validate
) при создании управления предприятием.
При копании в дальнейших журналах я обнаружил, что в Hibernate 4.2 дважды возникала ошибка при настройке JPA, так как не было соединения, но при запуске bean-компонента журналы показывают, что persistence.xml
анализируется снова и соединение может быть предоставлено WAS , В связи с этим проверка схемы прошла успешно. Во время настройки JPA сообщение об ошибке появляется дважды, потому что получение метаданных и попытка проверки находятся в двух блоках try / catch в Hibernate 4.2.
При использовании WAS9 / Hibernate 5.2 сообщение об ошибке регистрируется и запускается failes. Сообщение регистрируется только один раз, потому что получение метаданных и проверка выполняются в одном и том же блоке try / catch, и это уже не удается при получении метаданных. Эта ошибка по-прежнему не нарушает запуск приложения. Но в отличие от WAS 8.5 / 4.2, когда запускающий компонент запускается, процесс запуска завершается ошибкой, так как никакой компонент управления данными не может быть предоставлен компоненту. Также логи показывают, что persistence.xml
больше не анализируется. Таким образом, WAS не пытается предоставить диспетчер сущностей во второй раз.
Таким образом, без «исправления» или, назовем это изменением WAS 9, использование datasource-refrence невозможно. И я сомневаюсь, что это когда-нибудь случится ...
На более:
Упомянутый класс IdTableHelper
является базовой c девушкой для стратегии Hibernates Bulk и два метода, которые может быть выдано сообщение об ошибке, попробуйте выполнить операторы create или delete. Поскольку пользователь базы данных приложения не имеет прав DDL, я подумал, будет ли это проблемой, и можно ли изменить поведение, изменив массовую стратегию спящего режима на org.hibernate.hql.spi.id.inline.InlineIdsInClauseBulkIdStrategy
, где не создаются таблицы для каскадных операций. Но это ничего не изменило, поскольку метаданные для проверки схемы по-прежнему необходимы.