Я использую Glassfish 3.1.2.2, java ee6.
У меня есть библиотека, в которой класс использует CDI для получения вспомогательного класса. Я хотел бы в одном конкретном проекте, где я использую эту библиотеку, переопределить эту зависимость CDI и заставить библиотеку использовать вместо этого мой собственный вспомогательный класс, специфичный для этого проекта. Я могу изменить библиотеку по своему желанию, но по умолчанию она должна использовать свой вспомогательный класс по умолчанию, чтобы поведение не менялось для других пользователей библиотеки.
Это должно быть идеальным применением шаблона @Alternative
CDI. Я сделал java-интерфейс для API вспомогательного класса; В библиотеке есть реализация по умолчанию, тогда я могу использовать тег <alternatives>
в beans.xml
; в проекте, где я хочу переопределить поведение, я бы указал свою собственную реализацию помощника в beans.xml этого конкретного проекта.
За исключением того, что это не работает. Это очевидно невозможно переопределить поведение альтернатив из библиотеки вне библиотеки в CDI 1.0 (java ee6).
И поэтому независимо от того, что я указываю в beans.xml моего внешнего проекта, CDI продолжает выбирать bean-компонент, определенный в библиотеке.
Я рассматривал использование производителя, но не нашел, как заставить CDI передать производителю EntityManager в качестве параметра , чтобы я мог передать его вспомогательному классу. В этом проекте мы обычно внедряем EntityManager, используя аннотацию @PersistenceContext
.
Любые идеи о том, как переопределить эту инъекцию CDI из внешнего проекта?