2015-02-03 2 views
0

, как обсуждалось здесь Display username in jsp redirected from a servlet, чтобы получить тот же экземпляр компонента Sessionful Session Bean, я должен сохранить его в связанной HttpSession. Это работает хорошо, но в сервлете я сделал так:Получение @EJB в контексте

SessionCart cart = (SessionCart) request.getSession().getAttribute("cart"); 
if (cart==null){ 
    cart = new SessionCart();} 

Где атрибут «корзина» является тот, где я спас инициализированную тележку. Проблема в том, что если корзина ранее не была инициализирована, строка cart = new SessionCart(); инициализировать компонент, не относящийся к Контексту, поэтому entitymanager, полученный by @PercistenceContext, имеет значение null. Я пытался использовать аннотацию

@EJB 
private SessionCart cart; 

, но это один создать новый сессионный тележку в любом случае, без моего контроля (так что если у меня есть корзина, связанные с пользователем еще, я создать новый и я мусор его ... это не так хорошо). Мой вопрос: могу ли я создать новый Sessionful Session Bean без использования аннотации @EJB и связать его с контекстом? Поэтому я могу контролировать, когда я хочу его создать.

ответ

0

Если я исправлю это, вы хотите инициализировать свой боб ленивый.

Для управления/создать компонент во время выполнения вы можете использовать Instance<Bean>Java EE API

В вашем случае это будет выглядеть так:

@Inject 
private Instance<SessionCart> sessionCartInstance; 

if (cart == null) { 
    cart = sessionCartInstance.get(); 
} 
+0

я нашел даже путь SES = (SessionCart) новый InitialContext() .lookup ("Java: глобальный/ibei/EJB/SessionCart"); как вы думаете, что лучше? Это первый раз, когда я вижу экземпляр класс – Neo87

+0

Это ручной поиск, если вы не используете удаленные EJB, я бы предпочел экземпляр, поскольку он безопасен по типу. –

+0

Thx, отличное объяснение, наконец, я нашел отличный способ сделать это! – Neo87

Смежные вопросы