A wicket application comes with thread locals like Session, Application,
Injector etc. which may cause issues during deserialization.
For kryo there's already the ComponentSerializerFactory that ensures that the
possibly existing default constructor is not called, as this invokes
Application.get(), which causes an error as the threadlocal is not yet
initialized.
Still, you might create classes that access threadlocals in field
initialization (with any levels of indirection), e.g.
class BadClass1 {
private final Application _a = Application.get(); // bad!
...
}
Another example, with one level of indirection:
class SomeClass {
private final BadClass2 _b = new BadClass2();
...
}
class BadClass2() {
...
public BadClass2() {
InjectorHolder.get().inject(this); // bad!
}
}
Some static analysis like findbugs seems to be suitable to detect such
potential errors.
Original issue reported on code.google.com by martin.grotzke on 15 Nov 2010 at 3:53
Original issue reported on code.google.com by
martin.grotzke
on 15 Nov 2010 at 3:53