Поддержка Informix в EclipseLink 2.3.2 (и, вероятно, более поздняя версия) содержит довольно серьезную ошибку, когда внешние соединения не выполняются должным образом. Я хотел бы создать подкласс класса EclipseLink InformixPlatform, чтобы обойти эту проблему.

По разным причинам я не хочу указывать платформу базы данных для использования в моем persistence.xml. Я бы предпочел полагаться на способность EclipseLink найти подходящую платформу для использования.

Очевидно EclipseLink из коробки не знает о моем подклассе. Как я могу сообщить EclipseLink, что мой подкласс существует и что он должен быть предпочтительнее, чем обычно автоматически обнаруживаемый?

Для сравнения в Hibernate есть несколько механизмов под названием «преобразователи диалектов», которые делают именно это: передают ему настраиваемый преобразователь диалектов, и он позволяет вам иметь дело с процессом автообнаружения. Что эквивалентно в EclipseLink 2.3.2?

2
Laird Nelson 15 Фев 2013 в 20:51
Я вижу свойство eclipselink.session-event-listener, но не уверен, что это действует на комара с паровым молотком. Будет ли это правильный подход?
 – 
Laird Nelson
15 Фев 2013 в 21:11
Глядя на код, он на самом деле не сработает, потому что, если я попытаюсь установить платформу из моего прослушивателя событий сеанса, он немедленно null отключится loginAndDetectDatasource() после того, как мой слушатель вернется!
 – 
Laird Nelson
15 Фев 2013 в 21:13
Уродливо: возможно, мне следует перехватить событие postLogin, выйти из системы, затем установить платформу, которую я хочу использовать, а затем снова войти в систему. Надеюсь, есть способ получше!
 – 
Laird Nelson
15 Фев 2013 в 21:18
Этот общий подход не работает. Это приводит к NullPointerException изнутри QuerySequence позже, когда вы пытаетесь вставить объект с помощью генератора таблиц. Идеи заканчиваются.
 – 
Laird Nelson
20 Фев 2013 в 22:12
Сейчас я попробую подход SessionCustomizer. По этому классу нет документации, указывающей, где в жизненном цикле он вызывается.
 – 
Laird Nelson
20 Фев 2013 в 22:32

1 ответ

Лучший ответ

Невозможно программно установить подкласс DatabasePlatform, не столкнувшись с другими ошибками. См. https://bugs.eclipse.org/bugs/show_bug.cgi?id= 401388, чтобы узнать подробности.

0
Laird Nelson 21 Фев 2013 в 11:20