Внедренный EJB в SessionScoped ManagedBean генерирует исключения при удалении - PullRequest
1 голос
/ 30 декабря 2011
  1. Запустите новое веб-приложение, используя NetBeans 7 на GlassFish 3.1
  2. В теле index.xhtml добавьте тег h:outputText с value="#{myBean.message}"
  3. Создать SessionScoped ManagedBean MyBean со свойством String с именем message; создать геттер и сеттер; заставить его реализовать Serializable
  4. Создайте Stateless SessionBean и вставьте его в MyBean, используя @EJB аннотацию
  5. С этого момента, всякий раз, когда вы меняете код Java и сохраняете проект, вы будете получать множество ошибок (ошибки NPE, IOError, EJB) во время отмены развертывания. Развертывание в порядке, и приложение работает хорошо. Но я бы хотел избежать исключений во время безработицы.

Это нормально? Или я что-то не так делаю?

Вот мой код:

Index.xhtml (часть тела)

    <h:body>
        <h:outputText value="#{myBean.message}"></h:outputText>
    </h:body>

MyBean.Java

@ManagedBean
@SessionScoped
public class MyBean implements Serializable {

    @EJB NewSessionBean nsb;

    public String getMessage() {
        return " " + nsb.toString();
    }

    public MyBean() {
    }
}

NewSessionBean.java

@Stateless
@LocalBean
public class NewSessionBean {
}

Чтобы получить ошибки, просто загрузите веб-страницу, добавьте пробел в строку сообщения, сохраните файл java (с включенным автоматическим развертыванием, в противном случае повторно разверните вручную).

Некоторые исключения

EJB5014: Exception resolving object 
java.lang.NullPointerException at    
com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate$SerializableLocalObjectDelegate.createObject(EJBLocalObjectInvocationHandlerDelegate.java:158)

IOException while loading persisted sessions: java.io.IOException
java.io.IOException
at com.sun.ejb.base.io.EJBObjectInputStream.resolveObject(EJBObjectInputStream.java:114)

UPDATE

Если я заменю аннотации ManagedBean на Named, следовательно, используя CDI, и, следовательно, заменю javax.faces.bean.SessionScoped на javax.enterprise.context.SessionScoped, у меня возникнет точно такая же проблема при развертывании, и после слов приложение будет работать гладко.

Брошенное исключение точно такое же, как и раньше.

1 Ответ

0 голосов
/ 12 января 2012

Ваш сервер пытается сериализовать и сохранить сеанс http. Ваши сессионные компоненты должны быть сериализуемыми, чтобы обеспечить постоянство сессии. Ir выглядит следующим образом: NewSessionBean nsb; не сериализуем. Вы можете сделать это кратковременным, и вы должны избавиться от ошибок. Но после восстановления ssson nsb будет нулевым. Я не уверен, как это обрабатывается в EJB, но эту ссылку нужно как-то повторно вставить.

...