Как я могу ввести EJB в объект области (объект JPA) с Java EE 6?
Обычно вы не делаете этого просто потому, что объекты домена выходят из базы данных, а не из контейнера, и, следовательно, услуги по инъекции не так прямолинейны.
Однако это не означает, что вы не должны этого делать.
Вы знаете, для чего предназначена ваша система и с какими другими системами она взаимодействует. Эти знания повлияют на решение, которое я себе представляю.
См. ссылку Активная запись . Как я имел в виду в своем комментарии обычно небольшие системы выбрали бы этот путь.
EJB3 клиентский инъектор применяется к "управляемым классам", таким как сервлеты и EJB (и код страницы JSF и т.д.).
Объекты JPA, я полагаю, не управляются в этом смысле. Поэтому я думаю, что вы бы вернулись к технике pre-EJB3, делая JNDI поиск и т.д..
Однако, как уже было замечено, в вашей иерархии ответственности может быть некоторый клубок, если вам это понадобится. Было бы интересно, если бы вы задали вопрос об общем дизайне, чтобы мы могли подумать о вопросах дизайна. Моя позиция по умолчанию заключается в том, что EJB используют объекты домена JPA, объекты JPA не используют EJB.
В Java EE 6 CDI расширяет концепцию управляемого компонента на все, и EJB может быть внедрен в управляемый компонент CDI (с помощью аннотации @Inject
). Но хотя взаимодействие между JPA и CDI было рассмотрено, оно не было включено в спецификацию (и) Java EE 6. Другими словами, внедрение в объект JPA невозможно.