Сериализация именованного класса со ссылкой на EJB, который содержит менеджер сущностей

1

Я использую Java EE 6 с Glassfish 3.1.2.2. У меня есть проект EJB с сессионными компонентами без состояния и WEB-проект с именованными, сессионными классами.

Например:

Именованный класс

@Named
@SessionScoped
public class MyWebController implements Serializable {

@EJB
private MyBean myBean;
}

Класс EJB

@Stateless
public class MyBean {

@PersistenceContext
private EntityManager em;
}

Проект запущен, но когда я делаю анализ кода, я получаю следующее сообщение.

Непрерывное несериализуемое поле экземпляра в сериализованном классе

Этот класс Serializable определяет не примитивное поле экземпляра, которое не является временным, Serializable или java.lang.Object и не реализует интерфейс Externalizable или методы readObject() и writeObject(). Объекты этого класса не будут десериализованы правильно, если в этом поле хранится объект без Serializable.

Кто-нибудь знает, кто может мне реорганизовать мой код, чтобы этого избежать?

Теги:
entitymanager
serialization
java-ee
ejb

1 ответ

0

Не эксперт по этим темам, но попробуйте это:

1) Убедитесь, что вы используете правильную аннотацию @SessionScoped:

@Named
@javax.enterprise.context.SessionScoped
public class MyWebController implements Serializable {

  @EJB
  private MyBean myBean;

}

2) Попробуйте также с сериализуемым EJB:

@Stateless
public class MyBean implements Serializable {
    ...
}

3) Если это решение сломается. Попробуйте с @Inject вместо @EJB

  • 0
    Проблема в том, что bean-компонент без состояния не может быть Serializable, потому что есть EntityManager, который не сериализуем.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню