2015-09-09 6 views
4

Есть ли причина, по которой классы EJB должны быть сериализуемыми? Я слышал, что это связано с тем, что RMI используется под капотом. Я знаю, как работает RMI (вызов удаленного метода), на стороне сервера зарегистрирован удаленный объект, а клиенту отправляется только заглушка удаленного объекта, - не весь объект.Почему EJB необходимо реализовать сериализуемый интерфейс?

Таким образом, в приложениях RMI методы удаленного объекта должны принимать аргументы и возвращать значения, которые могут быть сериализованы, поскольку они отправляются по сети, но не сам удаленный объект.

+0

Все аргументы методов EJB и возвращаемые значения должны быть сериализованы. Самый простой способ сделать это - убедиться, что все ваши классы реализуют java.io.Serializable. –

+0

Да, это то, что я сказал, но я спрашивал, нужно ли самому EJB реализовать сериализуемое. – user107986

+0

EntityBean, MessageDrivenBean, SessionBean: все расширяют EnterpriseBean, который является Serializable. –

ответ

8

Причина, по которой старый J2EE-стиль EJBS, который реализует javax.ejb.EntityBean, javax.ejb.SessionBean и javax.ejb.MessageDrivenBean, должен быть сериализуемым, является историческим. Исходный интерфейс javax.ejb.EnterpriseBean, который распространяется, сам по себе простирается на java.io.Serializable. В самые ранние дни EJB считалось, что это необходимо для облегчения перемещения бобов между JVM.

Все практические причины для EJB до Фактически реализация Serializable исчезла к тому времени, когда была опубликована спецификация EJB 2.0.

Введение EJB 3 устранило требование для любого из этих интерфейсов (и впоследствии java.io.Serializable) для реализации.

Нет спецификации EJB, поскольку EJB 2.0 указал, что EJB должны быть сериализуемыми. Это было скрыто из-за наследования интерфейса.

Неявное требование полностью исчезает с EJB 3.x.

+2

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

+1

Бит Entity можно кэшировать. Должен ли он также реализовывать Serializable? – MaxG

+2

@MaxG вы спрашиваете о javax.ejb.EntityBeans или javax.persistence.Entity beans? В первом случае некоторые реализации будут кэшировать состояние компонента, а не самого компонента. Ожидается, что в последних современных объектах сущности Case JPA будет реализован Serializable, если они работают в среде, которая копирует/перемещает экземпляры между экземплярами JVM. –

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