I did not yet replace our checker with the new one. One of the changes we made 
to the checker was that we removed a few lines to improve performance. The old 
SerializableChecker uses string concatenation all over the place, and a few of 
those places introduce a serious performance overhead (I'm talking about 
minutes, not milliseconds). The most important ones are 'String arrayPos = "[" 
+ i + "]";' and 'String arrayPos = "[" + i + "]";'. A large set (with 
thousands or records) generates 10th's of thousands string concatenations, 
which takes a long time. It would be nice if we could fix that as well.

Best regards,
Emond

On Wednesday 10 October 2012 16:00:23 Martin Grigorov wrote:
> Hi,
> 
> With
> https://git-wip-us.apache.org/repos/asf/wicket/repo?p=wicket.git;a=commitdi
> ff;h=6014d8bb92595bf486d69f7a5c1c798bcdc252f1 I extracted the logic for
> reading object members with
> ObjectStreamClass into a separate class ObjectChecker. This new class
> uses implementations of IObjectChecker to do the actual checks. For
> now there are two impls:
> - check that the class is Serializable (as before)
> - check that instances of LoadableDetachableModel are detached before
> serialization. This own proved to be quite useful !
> 
> It is quite easy to add your own custom checkers. For example like the
> ones explained at
> http://wicketinaction.com/2011/11/detect-attached-models-and-entities/
> for JPA entities.
> 
> I tried to keep SerializableChecker binary compatible so it has some
> baggage which may be removed for Wicket 7.0.
> If any of the checkers fail then the pretty print message is used to
> show where is the problem and its type.
> 
> The usage is:
> JavaSerializer serializer = new JavaSerializer(app.getKey()) {
>    @Override
>    protected ObjectOutputStream newObjectOutputStream(OutputStream
> out) throws IOException {
>        return new ObjectCheckerObjectOutputStream(out, new
> ObjectSerializationChecker(), new NotDetachedModelChecker(), new
> MyOwnChecker());
>    }
> }
> app.getFrameworkSettings().setSerializer(serializer);
> 
> Please have a look and give your opinion. Any suggestions are welcome!

Reply via email to