You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by "J.-F. Rompre" <jr...@gmail.com> on 2009/09/10 21:00:17 UTC

Serialization on objects inherited from a container

Hello,

I would like to know where I could find documentation on the issue of
serializing objects inherited from a component's container as in the example
below. I tried looking at the wicket source code to see when this occurs but
still don't understand when/how it is done.

//...

final Product p = //get non-serializable Product object

add new Link( "addToCart") {
    public void onClick() {
        getSession().getCart().add( p.getId());
    //..etc

The above throws a NotSerializableException. However, no problem occurs
after the code is changed to:

//...

//Product p already assigned
final String pId = p.getId() //serializable

add new Link( "addToCart") {
    public void onClick() {
        getSession().getCart().add( pId);
    //..etc

(Also, building the Link with a wrapping Model object also works, obviously)

However I am curious to know why a non-model object is serialized when
inherited from the container even though within the same request?

Thanks for any comment,

JF

Re: Serialization on objects inherited from a container

Posted by Igor Vaynberg <ig...@gmail.com>.
wicket serializes the page which contains all the components - so
everything your components hold on to is also serialized. this is why
we have models that can detach - so you can release the heavy state
before the page is serialized, and reacquire it again when needed.

-igor

On Thu, Sep 10, 2009 at 7:59 PM, kingcode <jr...@gmail.com> wrote:
>
> Thanks Igor for the quick response - I guess this is stating the obvious, but
> I conclude that this is just part of the page/component serialization?
>
> Correct me if I am wrong, but from what I understand the reference to an
> outer scope obj. is a 'field' of the inner class and therefore required to
> be serializable by wicket.
>
> JF
>
>
>
> igor.vaynberg wrote:
>>
>>> add new Link( "addToCart") {
>>>    public void onClick() {
>>>        getSession().getCart().add( p.getId());
>>>    //..etc
>>>
>>
>> your anonymous class keeps a reference to p because inside you
>> reference p via p.getId().
>>
>> -igor
>>
>> On Thu, Sep 10, 2009 at 12:00 PM, J.-F. Rompre <jr...@gmail.com> wrote:
>>> Hello,
>>>
>>> I would like to know where I could find documentation on the issue of
>>> serializing objects inherited from a component's container as in the
>>> example
>>> below. I tried looking at the wicket source code to see when this occurs
>>> but
>>> still don't understand when/how it is done.
>>>
>>> //...
>>>
>>> final Product p = //get non-serializable Product object
>>>
>>> add new Link( "addToCart") {
>>>    public void onClick() {
>>>        getSession().getCart().add( p.getId());
>>>    //..etc
>>>
>>> The above throws a NotSerializableException. However, no problem occurs
>>> after the code is changed to:
>>>
>>> //...
>>>
>>> //Product p already assigned
>>> final String pId = p.getId() //serializable
>>>
>>> add new Link( "addToCart") {
>>>    public void onClick() {
>>>        getSession().getCart().add( pId);
>>>    //..etc
>>>
>>> (Also, building the Link with a wrapping Model object also works,
>>> obviously)
>>>
>>> However I am curious to know why a non-model object is serialized when
>>> inherited from the container even though within the same request?
>>>
>>> Thanks for any comment,
>>>
>>> JF
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>
>>
>
> --
> View this message in context: http://www.nabble.com/Serialization-on-objects-inherited-from-a-container-tp25389127p25394299.html
> Sent from the Wicket - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Serialization on objects inherited from a container

Posted by kingcode <jr...@gmail.com>.
Thanks Igor for the quick response - I guess this is stating the obvious, but
I conclude that this is just part of the page/component serialization? 

Correct me if I am wrong, but from what I understand the reference to an
outer scope obj. is a 'field' of the inner class and therefore required to
be serializable by wicket.

JF



igor.vaynberg wrote:
> 
>> add new Link( "addToCart") {
>>    public void onClick() {
>>        getSession().getCart().add( p.getId());
>>    //..etc
>>
> 
> your anonymous class keeps a reference to p because inside you
> reference p via p.getId().
> 
> -igor
> 
> On Thu, Sep 10, 2009 at 12:00 PM, J.-F. Rompre <jr...@gmail.com> wrote:
>> Hello,
>>
>> I would like to know where I could find documentation on the issue of
>> serializing objects inherited from a component's container as in the
>> example
>> below. I tried looking at the wicket source code to see when this occurs
>> but
>> still don't understand when/how it is done.
>>
>> //...
>>
>> final Product p = //get non-serializable Product object
>>
>> add new Link( "addToCart") {
>>    public void onClick() {
>>        getSession().getCart().add( p.getId());
>>    //..etc
>>
>> The above throws a NotSerializableException. However, no problem occurs
>> after the code is changed to:
>>
>> //...
>>
>> //Product p already assigned
>> final String pId = p.getId() //serializable
>>
>> add new Link( "addToCart") {
>>    public void onClick() {
>>        getSession().getCart().add( pId);
>>    //..etc
>>
>> (Also, building the Link with a wrapping Model object also works,
>> obviously)
>>
>> However I am curious to know why a non-model object is serialized when
>> inherited from the container even though within the same request?
>>
>> Thanks for any comment,
>>
>> JF
>>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Serialization-on-objects-inherited-from-a-container-tp25389127p25394299.html
Sent from the Wicket - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Serialization on objects inherited from a container

Posted by Igor Vaynberg <ig...@gmail.com>.
> add new Link( "addToCart") {
>    public void onClick() {
>        getSession().getCart().add( p.getId());
>    //..etc
>

your anonymous class keeps a reference to p because inside you
reference p via p.getId().

-igor

On Thu, Sep 10, 2009 at 12:00 PM, J.-F. Rompre <jr...@gmail.com> wrote:
> Hello,
>
> I would like to know where I could find documentation on the issue of
> serializing objects inherited from a component's container as in the example
> below. I tried looking at the wicket source code to see when this occurs but
> still don't understand when/how it is done.
>
> //...
>
> final Product p = //get non-serializable Product object
>
> add new Link( "addToCart") {
>    public void onClick() {
>        getSession().getCart().add( p.getId());
>    //..etc
>
> The above throws a NotSerializableException. However, no problem occurs
> after the code is changed to:
>
> //...
>
> //Product p already assigned
> final String pId = p.getId() //serializable
>
> add new Link( "addToCart") {
>    public void onClick() {
>        getSession().getCart().add( pId);
>    //..etc
>
> (Also, building the Link with a wrapping Model object also works, obviously)
>
> However I am curious to know why a non-model object is serialized when
> inherited from the container even though within the same request?
>
> Thanks for any comment,
>
> JF
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org