Java EE внедряет CDI @SessionScoped в сеансовый компонент EJB @Stateless

Как я могу внедрить этот класс (он находится внутри военной части проекта):

@Named("user")
@SessionScoped
public class User implements Serializable
{....}

В этот сеансовый компонент EJB:

@Stateless
@LocalBean
public class testSB 
{    inject User here... }

Я пытался использовать @Inject, но это не работает. Кажется, он не распознает User класс. Я попытался найти пример внедрения CDI в EJB, но не смог найти ничего, что сработало.

Это вообще возможно? Как правильно это сделать? Я хотел бы получить данные из класса User напрямую, а не передавать значения внутри методов.


person user2046810    schedule 03.07.2013    source источник


Ответы (3)


Вставьте Provider<User> в свой bean-компонент без сохранения состояния. Затем, когда вам понадобится пользователь, выполните userProdiver.get().

person Jan Dörrenhaus    schedule 03.07.2013
comment
Вы можете использовать свои классы со стороны ejb на стороне войны, но не наоборот. - person Jan Dörrenhaus; 03.07.2013
comment
хорошо, так что это моя проблема, она не имеет ничего общего с инъекцией .. спасибо. - person user2046810; 03.07.2013
comment
На самом деле, и то, и другое;) Вы все равно не сможете внедрить объект с областью действия сеанса в bean-компонент без сохранения состояния. Просто сначала нужно решить другую проблему. - person Jan Dörrenhaus; 03.07.2013
comment
это не похоже на правду: stackoverflow.com/questions/8717022/ - person BrunoJCM; 08.11.2018

Обратите внимание на то, чтобы не создавать экземпляр объекта «testSB» (таким образом вы не можете ожидать, что контейнер внедрит вам объект класса «Пользователь»). Чтобы контейнер мог внедрить вам один объект класса «Пользователь», вы ДОЛЖНЫ позволить контейнеру создать экземпляр объекта класса «testSB».

Я не думаю, что есть проблема с внедрением «SessionBean» внутри «RequestBean». Все ваши объекты «RequestBean» будут совместно использовать один и тот же объект класса «SessionBean».

person Victor_Magalhaes    schedule 23.12.2013

С CDI вы сможете внедрить что угодно куда угодно, даже в EJB SessionScoped.

Попробуйте добавить пустой файл beans.xml в свой META-INF. Пожалуйста, проверьте мой ответ здесь:

Java EE 7 - @Decorator, @Stateless и @PersistenceContext = nullpointerException

С уважением, Александр

person sashok_bg    schedule 08.05.2015