С CDI (Weld) Я реализовал метод производителя для несериализуемого класса. Если производитель получил сериализованная и поле NonSerializableObject ушел, я переинициализировать NonSerializableObject:CDI: Почему мое переходное поле сериализуется?
@SessionScoped
public class NonSerializableObjectProducer implements Serializable {
/** UUID */
private static final long serialVersionUID = -436472364723647647367L;
/** my transient non serializbale object */
private transient NonSerializableObject nonSerializableObject;
@SessionScoped
@Produces
protected NonSerializableObject produceNonSerializableObject() {
if (nonSerializableObject == null) {
// reinitialize object and set it
// nonSerializableObject = ...
}
return nonSerializableObject;
}
Я впрыснуть NonSerializableObject как:
@SessionScoped
public class UseSerializableObject implements Serializable {
private static final long serialVersionUID = 62378785678643784689L;
@Inject
private transient NonSerializableObject nonSerializableObject;
public void doSomething() {
nonSerializableObject.go();
}
}
Когда мой сервер приложений (Tomcat 7) повторно развертывает следующие Исключение:
Sep 22, 2014 4:41:58 PM org.apache.catalina.session.StandardSession writeObject
WARNING: Cannot serialize session attribute WELD_S#5 for session 4694BB90FF1BBD8
java.io.NotSerializableException: com.MemberOfNonSerializableObject
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1181)
Итак, переменная-член моей NonSerializableObject получает сериализацию д. Зачем? Я объявил все как временное!
Я бы подумал, что это '@ SessionScoped', он также хранится в' HttpSession'. Это сериализация «HttpSession», которая терпит неудачу, а не объекта 'UseSerializableObject'. –