#java #maven #jakarta-ee
#java #maven #джакарта-ee
Вопрос:
Я не понимаю одной вещи, которую, я надеюсь, кто-нибудь из вас мог бы мне объяснить. У меня есть корпоративный проект maven, разработанный с помощью glassfish.
Я использую функцию вставки кода netbeans (щелкните правой кнопкой мыши) для вызова компонента в сервлете и, в частности, аннотации
@EJB
Я не понимаю, почему, когда я вызываю компонент сеанса с сохранением состояния через функцию Insert Code в netbeans, компонент вызывается через JNDI. Вот что я имею в виду
private BookingBeanInterface lookupBookingBeanLocal() {
try {
Context c = new InitialContext();
return (BookingBeanInterface) c.lookup("java:global/it.volaconnoi_volaconnoi-webapp-ear_ear_1.0-SNAPSHOT/it.volaconnoi_volaconnoi-webapp-ejb_ejb_1.0-SNAPSHOT/BookingBean!it.volaconnoi.logic.BookingBeanInterface");
} catch (NamingException ne) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", ne);
throw new RuntimeException(ne);
}
}`
Вышеупомянутая функция не была написана мной
Я не могу ввести компонент сеанса с сохранением состояния через EJB?
Ответ №1:
Вот решение проблемы:
Как вы, вероятно, уже знаете, один экземпляр сервлета используется для обработки нескольких запросов от нескольких клиентов, поэтому EJB с сохранением состояния не следует вводить непосредственно в сервлет и сохранять как свойство экземпляра, иначе мы столкнемся с очевидными проблемами, связанными с безопасностью потоков. В нашем случае мы извлекаем его из JNDI внутри метода doGet и сохраняем его в сеансе HTTP, чтобы у каждого пользователя был свой собственный экземпляр EJB с сохранением состояния.