Сериализуемыми должны быть только объекты, входящие в сеанс (т. Е. Реализовать этот интерфейс Serializable
)
Это означает, что любой объект, заданный в качестве атрибута, плюс любые объекты, содержащиеся в этих объектах.
Итак, если у вас есть класс
public class User implements Serializable {
private Department department;
// ...
}
, то ваш класс Department
также должен реализовать Serializable
Классы, которые просто делают вызовы в сеансе (включаявызовы setAttribute
) не должны реализовывать Serializable
(включая SomeUtilityClass
)
Причина в том, что все, что находится внутри сеанса, должно быть отправлено на другой узел WebLogic (это, вероятно,работает на другом сервере).Это означает, что ему нужно отправить ваш класс User
по сети, поэтому он должен иметь возможность превратить ваш класс User
в серию байтов, которые он может отправлять, а затем снова превратить его в реальный объект.с другой стороны.
Когда вы реализуете интерфейс Serializable
, вы говорите Java, что вы построили свой класс таким образом, что он может превращаться в эти байты (и обратно).Если вы не реализуете Serializable
, то Java не знает, нормально ли это делать, так что нет. Примечание : Код для класса не передается, а только значения полей внутри него.Код уже находится на другом узле, потому что это часть вашего приложения, которая уже развернута на всех узлах.
Вашему служебному классу не нужно переходить по сети.Вы не поместили объект этого класса в сеанс, поэтому WebLogic не нужно превращать его в байты (и обратно) в рамках репликации сеанса.
Единственные вещи, которые должны быть Serializable
- это объекты, которые помещаются в сеанс либо напрямую (например, User
) или косвенно (например, Department
пример).
Объектыкоторые просто делают вызовы в сеансе, не должны быть Serializable
.