Я работаю над приложением с (почти) ванильным стеком Java EE 6 (EJB, JPA, JSF и т. Д.). Мы размещаем наше приложение на Glassfish 3, и наш код, связанный с постоянством, на данный момент является на 100% чистым JPA.
К сожалению, одна часть нашего приложения должна использовать хранимую процедуру в базе данных Oracle 10g. Чтобы вызвать эту хранимую процедуру, мы решили использовать EclipseLink (реализация JPA, поставляемая в комплекте с Glassfish).
Поскольку (небольшая) часть нашего кода теперь зависит от EclipseLink, я задумался, как проверить эту зависимость. Зависимость не поставляется вместе с приложением, но предполагается, что она доступна на нашей платформе развертывания (например, Glassfish).
На мой взгляд, у нас есть следующие варианты:
- Ничего не делай, просто дай этому потерпеть неудачу. Я думаю, что это решение является неоптимальным, так как никогда не указывается, что наш код предполагает наличие EclipseLink.
Проверьте EclipseLink в операторе if и сгенерируйте конкретное исключение.
if (!JpaHelper.isEclipseLink(entityManager)) {
throw new InvalidJpaImplementationException();
}
Добавить утверждение, которое проверяет EclipseLink, и разрешать ему генерировать исключение в случае сбоя.
assert JpaHelper.isEclipseLink(entityManager)) : "Blah!";
Будет ли утверждение (вариант 3) правильным решением? Вы бы предпочли другое решение? Какой и почему?