RE: Observation and page (map) eviction

2009-01-27 Thread Frank van Lankvelt
After working things through once more, I opted for a simple model where
I maintain a global registry of (jcr) event listeners using weak
references.  Events are queued to be processed later during a request
cycle.  So, in fact I managed to evade the page eviction problem; at the
cost of additional cpu time (pages that have been discarded by the
session store will still receive events, even though those will never be
processed).

The snags of (de)serialization are handled automatically if listeners
are re-registered when the object under observation is deserialized.
(i.e. implementing readObject())  This should work independent of
session store; any kind of caching scheme is supported this way.  It
should also work with replication.

I'm not sure if this is the solution that Igor suggested, but it sure
makes sense to me.

Thanks for the help!

Cheers, Frank


 -Original Message-
 From: Johan Compagner [mailto:jcompag...@gmail.com] 
 Sent: 25 January 2009 21:55
 To: users@wicket.apache.org
 Subject: Re: Observation and page (map) eviction
 
 Maybe if you want listeners then only the session listen to 
 those? And pages/components when they render pull the changes 
 out of the session?
 
 On 25/01/2009, Frank van Lankvelt f.vanlankv...@onehippo.com wrote:
  But how is a view to know if its model (object) has changed in the 
  pull model?  One way that I see this working is if views 
 extract all 
  state that they need to do the rendering into a separate 
 object.  This 
  object is then recalculated from the model that is used by 
 the view on 
  each request.  Is this what you're suggesting?
 
  Of course one should not go about (de)serializing listeners 
 carelessly.
  I was a bit simplistic in describing what I want there, sorry 'bout 
  that.  What I'm doing at the moment (with the listener 
 leak) is that 
  the listeners that actually get registered with the object 
 are stored 
  in the session.  When they're called (asynchronously), they store 
  events in a queue.  Then, when a request comes in, this queue is 
  emptied by the page that is being rendered; the events are 
 processed 
  by the in-page listeners.  This mechanism does depend on the use of 
  sticky sessions, as it has to be possible for an external 
 service to 
  invoke the (session) listeners.
 
  The problem is now how to manage the listeners in the 
 session.  They 
  only need to be present for the current pages in pagemaps, i.e. 
  those pages that are shown and that will generate a request 
 every now 
  and then using an ajax-timer.  Other pages in the pagemap will be 
  redrawn completely when they need to respond to a request, 
 so there is 
  no need for observation for them.
 
  Just realised that I can detect pagemap eviction by simply 
 enumerating 
  the pagemaps when the session is detached.
 
  It seems to me that for wicket to support comet/bayeux, there will 
  have to be a solution for the kind of problems I'm running 
 into here.  
  I don't think pushing the problem to the application 
 developer (as I 
  think you are suggesting) is acceptable in the long run.
 
  Cheers, Frank
 
 
  From: Johan Compagner [mailto:jcompag...@gmail.com]
  Sent: 24 January 2009 19:58
 
  I think having references to or from pages is a bad idea 
 in wicket. 
  We serialize pages so if pages would have listeners then 
 the are also 
  serialized. If others reference pages then after 
  serialization/deserialization they point to the wrong instance.
 
  Way better is pure pull support. Components know where 
 thet get its 
  data from and they pull it on render and/or on a visitor 
 that checks 
  all components if they are changed. (and if changes add 
 them to ajax 
  request target)
 
  On 24/01/2009, igor.vaynb...@gmail.com igor.vaynb...@gmail.com 
  wrote:
   Use weakreferences to hold onto pages instead.
  
   -igor
  
   On 1/24/09, Frank van Lankvelt 
 f.vanlankv...@onehippo.com wrote:
   I'm trying to get a page to observe a business object that
  can send
   events.  The changes don't warrant a full page refresh, so
  I want to
   update only those parts of the page that have changed as a
  result of
   the events.
  
   I've seen wicketstuff-push, where a similar kind of 
 observation is 
   present in the Application. From what I could see, the
  chat example
   has the drawback that there is no *unregistering* of
  listeners when
   pages are disposed of, so there is a memory leak.  (all
  pages will be
   kept in memory, being referenced directly by the service in the
   application)
  
   There doesn't seem to be any support for cleaning up
  pages, e.g. in
   the form of listeners that an application could 
 register with the 
   session store.  An alternative seems to be to implement my own 
   PageMap, but I'm reluctant to do that as there will be a lot of 
   copy/paste involved and the existing PageMap
  implementations rely on
   the fact that they're in the same package as Session.  
 A different

RE: Observation and page (map) eviction

2009-01-25 Thread Frank van Lankvelt
But how is a view to know if its model (object) has changed in the pull
model?  One way that I see this working is if views extract all state
that they need to do the rendering into a separate object.  This object
is then recalculated from the model that is used by the view on each
request.  Is this what you're suggesting?

Of course one should not go about (de)serializing listeners carelessly.
I was a bit simplistic in describing what I want there, sorry 'bout
that.  What I'm doing at the moment (with the listener leak) is that the
listeners that actually get registered with the object are stored in the
session.  When they're called (asynchronously), they store events in a
queue.  Then, when a request comes in, this queue is emptied by the page
that is being rendered; the events are processed by the in-page
listeners.  This mechanism does depend on the use of sticky sessions, as
it has to be possible for an external service to invoke the (session)
listeners.

The problem is now how to manage the listeners in the session.  They
only need to be present for the current pages in pagemaps, i.e. those
pages that are shown and that will generate a request every now and then
using an ajax-timer.  Other pages in the pagemap will be redrawn
completely when they need to respond to a request, so there is no need
for observation for them.

Just realised that I can detect pagemap eviction by simply enumerating
the pagemaps when the session is detached.

It seems to me that for wicket to support comet/bayeux, there will have
to be a solution for the kind of problems I'm running into here.  I
don't think pushing the problem to the application developer (as I think
you are suggesting) is acceptable in the long run.

Cheers, Frank


 From: Johan Compagner [mailto:jcompag...@gmail.com] 
 Sent: 24 January 2009 19:58
 
 I think having references to or from pages is a bad idea in 
 wicket. We serialize pages so if pages would have listeners 
 then the are also serialized. If others reference pages then 
 after serialization/deserialization they point to the wrong instance.
 
 Way better is pure pull support. Components know where thet 
 get its data from and they pull it on render and/or on a 
 visitor that checks all components if they are changed. (and 
 if changes add them to ajax request target)
 
 On 24/01/2009, igor.vaynb...@gmail.com 
 igor.vaynb...@gmail.com wrote:
  Use weakreferences to hold onto pages instead.
 
  -igor
 
  On 1/24/09, Frank van Lankvelt f.vanlankv...@onehippo.com wrote:
  I'm trying to get a page to observe a business object that 
 can send 
  events.  The changes don't warrant a full page refresh, so 
 I want to 
  update only those parts of the page that have changed as a 
 result of 
  the events.
 
  I've seen wicketstuff-push, where a similar kind of observation is 
  present in the Application. From what I could see, the 
 chat example 
  has the drawback that there is no *unregistering* of 
 listeners when 
  pages are disposed of, so there is a memory leak.  (all 
 pages will be 
  kept in memory, being referenced directly by the service in the 
  application)
 
  There doesn't seem to be any support for cleaning up 
 pages, e.g. in 
  the form of listeners that an application could register with the 
  session store.  An alternative seems to be to implement my own 
  PageMap, but I'm reluctant to do that as there will be a lot of 
  copy/paste involved and the existing PageMap 
 implementations rely on 
  the fact that they're in the same package as Session.  A different 
  alternative is to store all the listeners in a registry and use a 
  separate thread to remove any listeners that are associated with 
  pages that are no longer stored.  Is there a better way?
 
  Thanks, Frank
 
 
  f.vanlankv...@onehippo.com  www.onehippo.com
  Amsterdam Hippo B.V. Oosteinde 11   1017 WT   Amsterdam
  +31(0)20-5224466
  San Francisco Hippo USA Inc. 101 H Street, suite Q   Petaluma   CA
  94952-5100   +1-877-41-HIPPO
 
 
 
  
 -
  To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
  For additional commands, e-mail: users-h...@wicket.apache.org
 
 
 
  
 -
  To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
  For additional commands, e-mail: users-h...@wicket.apache.org
 
 
 
 -
 To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
 For additional commands, e-mail: users-h...@wicket.apache.org
 
 
  

f.vanlankv...@onehippo.com  www.onehippo.com
Amsterdam Hippo B.V. Oosteinde 11   1017 WT   Amsterdam
+31(0)20-5224466
San Francisco Hippo USA Inc. 101 H Street, suite Q   Petaluma   CA
94952-5100   +1-877-41-HIPPO

  

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

Re: Observation and page (map) eviction

2009-01-25 Thread Johan Compagner
What we doe is pretty simple
Just remeber the last rendered value of a component. Then you can
compare this to something and you know if it is changed ore not.

On 25/01/2009, Frank van Lankvelt f.vanlankv...@onehippo.com wrote:
 But how is a view to know if its model (object) has changed in the pull
 model?  One way that I see this working is if views extract all state
 that they need to do the rendering into a separate object.  This object
 is then recalculated from the model that is used by the view on each
 request.  Is this what you're suggesting?

 Of course one should not go about (de)serializing listeners carelessly.
 I was a bit simplistic in describing what I want there, sorry 'bout
 that.  What I'm doing at the moment (with the listener leak) is that the
 listeners that actually get registered with the object are stored in the
 session.  When they're called (asynchronously), they store events in a
 queue.  Then, when a request comes in, this queue is emptied by the page
 that is being rendered; the events are processed by the in-page
 listeners.  This mechanism does depend on the use of sticky sessions, as
 it has to be possible for an external service to invoke the (session)
 listeners.

 The problem is now how to manage the listeners in the session.  They
 only need to be present for the current pages in pagemaps, i.e. those
 pages that are shown and that will generate a request every now and then
 using an ajax-timer.  Other pages in the pagemap will be redrawn
 completely when they need to respond to a request, so there is no need
 for observation for them.

 Just realised that I can detect pagemap eviction by simply enumerating
 the pagemaps when the session is detached.

 It seems to me that for wicket to support comet/bayeux, there will have
 to be a solution for the kind of problems I'm running into here.  I
 don't think pushing the problem to the application developer (as I think
 you are suggesting) is acceptable in the long run.

 Cheers, Frank


 From: Johan Compagner [mailto:jcompag...@gmail.com]
 Sent: 24 January 2009 19:58

 I think having references to or from pages is a bad idea in
 wicket. We serialize pages so if pages would have listeners
 then the are also serialized. If others reference pages then
 after serialization/deserialization they point to the wrong instance.

 Way better is pure pull support. Components know where thet
 get its data from and they pull it on render and/or on a
 visitor that checks all components if they are changed. (and
 if changes add them to ajax request target)

 On 24/01/2009, igor.vaynb...@gmail.com
 igor.vaynb...@gmail.com wrote:
  Use weakreferences to hold onto pages instead.
 
  -igor
 
  On 1/24/09, Frank van Lankvelt f.vanlankv...@onehippo.com wrote:
  I'm trying to get a page to observe a business object that
 can send
  events.  The changes don't warrant a full page refresh, so
 I want to
  update only those parts of the page that have changed as a
 result of
  the events.
 
  I've seen wicketstuff-push, where a similar kind of observation is
  present in the Application. From what I could see, the
 chat example
  has the drawback that there is no *unregistering* of
 listeners when
  pages are disposed of, so there is a memory leak.  (all
 pages will be
  kept in memory, being referenced directly by the service in the
  application)
 
  There doesn't seem to be any support for cleaning up
 pages, e.g. in
  the form of listeners that an application could register with the
  session store.  An alternative seems to be to implement my own
  PageMap, but I'm reluctant to do that as there will be a lot of
  copy/paste involved and the existing PageMap
 implementations rely on
  the fact that they're in the same package as Session.  A different
  alternative is to store all the listeners in a registry and use a
  separate thread to remove any listeners that are associated with
  pages that are no longer stored.  Is there a better way?
 
  Thanks, Frank
 
 
  f.vanlankv...@onehippo.com  www.onehippo.com
  Amsterdam Hippo B.V. Oosteinde 11   1017 WT   Amsterdam
  +31(0)20-5224466
  San Francisco Hippo USA Inc. 101 H Street, suite Q   Petaluma   CA
  94952-5100   +1-877-41-HIPPO
 
 
 
 
 -
  To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
  For additional commands, e-mail: users-h...@wicket.apache.org
 
 
 
 
 -
  To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
  For additional commands, e-mail: users-h...@wicket.apache.org
 
 

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




 f.vanlankv...@onehippo.com  www.onehippo.com
 Amsterdam Hippo B.V. Oosteinde 11   1017 WT   Amsterdam
 +31(0)20-5224466
 San Francisco Hippo USA Inc. 

Re: Observation and page (map) eviction

2009-01-25 Thread Johan Compagner
Maybe if you want listeners then only the session listen to those? And
pages/components when they render pull the changes out of the session?

On 25/01/2009, Frank van Lankvelt f.vanlankv...@onehippo.com wrote:
 But how is a view to know if its model (object) has changed in the pull
 model?  One way that I see this working is if views extract all state
 that they need to do the rendering into a separate object.  This object
 is then recalculated from the model that is used by the view on each
 request.  Is this what you're suggesting?

 Of course one should not go about (de)serializing listeners carelessly.
 I was a bit simplistic in describing what I want there, sorry 'bout
 that.  What I'm doing at the moment (with the listener leak) is that the
 listeners that actually get registered with the object are stored in the
 session.  When they're called (asynchronously), they store events in a
 queue.  Then, when a request comes in, this queue is emptied by the page
 that is being rendered; the events are processed by the in-page
 listeners.  This mechanism does depend on the use of sticky sessions, as
 it has to be possible for an external service to invoke the (session)
 listeners.

 The problem is now how to manage the listeners in the session.  They
 only need to be present for the current pages in pagemaps, i.e. those
 pages that are shown and that will generate a request every now and then
 using an ajax-timer.  Other pages in the pagemap will be redrawn
 completely when they need to respond to a request, so there is no need
 for observation for them.

 Just realised that I can detect pagemap eviction by simply enumerating
 the pagemaps when the session is detached.

 It seems to me that for wicket to support comet/bayeux, there will have
 to be a solution for the kind of problems I'm running into here.  I
 don't think pushing the problem to the application developer (as I think
 you are suggesting) is acceptable in the long run.

 Cheers, Frank


 From: Johan Compagner [mailto:jcompag...@gmail.com]
 Sent: 24 January 2009 19:58

 I think having references to or from pages is a bad idea in
 wicket. We serialize pages so if pages would have listeners
 then the are also serialized. If others reference pages then
 after serialization/deserialization they point to the wrong instance.

 Way better is pure pull support. Components know where thet
 get its data from and they pull it on render and/or on a
 visitor that checks all components if they are changed. (and
 if changes add them to ajax request target)

 On 24/01/2009, igor.vaynb...@gmail.com
 igor.vaynb...@gmail.com wrote:
  Use weakreferences to hold onto pages instead.
 
  -igor
 
  On 1/24/09, Frank van Lankvelt f.vanlankv...@onehippo.com wrote:
  I'm trying to get a page to observe a business object that
 can send
  events.  The changes don't warrant a full page refresh, so
 I want to
  update only those parts of the page that have changed as a
 result of
  the events.
 
  I've seen wicketstuff-push, where a similar kind of observation is
  present in the Application. From what I could see, the
 chat example
  has the drawback that there is no *unregistering* of
 listeners when
  pages are disposed of, so there is a memory leak.  (all
 pages will be
  kept in memory, being referenced directly by the service in the
  application)
 
  There doesn't seem to be any support for cleaning up
 pages, e.g. in
  the form of listeners that an application could register with the
  session store.  An alternative seems to be to implement my own
  PageMap, but I'm reluctant to do that as there will be a lot of
  copy/paste involved and the existing PageMap
 implementations rely on
  the fact that they're in the same package as Session.  A different
  alternative is to store all the listeners in a registry and use a
  separate thread to remove any listeners that are associated with
  pages that are no longer stored.  Is there a better way?
 
  Thanks, Frank
 
 
  f.vanlankv...@onehippo.com  www.onehippo.com
  Amsterdam Hippo B.V. Oosteinde 11   1017 WT   Amsterdam
  +31(0)20-5224466
  San Francisco Hippo USA Inc. 101 H Street, suite Q   Petaluma   CA
  94952-5100   +1-877-41-HIPPO
 
 
 
 
 -
  To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
  For additional commands, e-mail: users-h...@wicket.apache.org
 
 
 
 
 -
  To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
  For additional commands, e-mail: users-h...@wicket.apache.org
 
 

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




 f.vanlankv...@onehippo.com  www.onehippo.com
 Amsterdam Hippo B.V. Oosteinde 11   1017 WT   Amsterdam
 +31(0)20-5224466
 San Francisco Hippo USA Inc. 101 H Street, 

Observation and page (map) eviction

2009-01-24 Thread Frank van Lankvelt
I'm trying to get a page to observe a business object that can send
events.  The changes don't warrant a full page refresh, so I want to
update only those parts of the page that have changed as a result of the
events.

I've seen wicketstuff-push, where a similar kind of observation is
present in the Application. From what I could see, the chat example has
the drawback that there is no *unregistering* of listeners when pages
are disposed of, so there is a memory leak.  (all pages will be kept in
memory, being referenced directly by the service in the application)

There doesn't seem to be any support for cleaning up pages, e.g. in the
form of listeners that an application could register with the session
store.  An alternative seems to be to implement my own PageMap, but I'm
reluctant to do that as there will be a lot of copy/paste involved and
the existing PageMap implementations rely on the fact that they're in
the same package as Session.  A different alternative is to store all
the listeners in a registry and use a separate thread to remove any
listeners that are associated with pages that are no longer stored.  Is
there a better way?

Thanks, Frank
  

f.vanlankv...@onehippo.com  www.onehippo.com
Amsterdam Hippo B.V. Oosteinde 11   1017 WT   Amsterdam
+31(0)20-5224466
San Francisco Hippo USA Inc. 101 H Street, suite Q   Petaluma   CA
94952-5100   +1-877-41-HIPPO

 

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



Re: Observation and page (map) eviction

2009-01-24 Thread igor . vaynberg
Use weakreferences to hold onto pages instead.

-igor

On 1/24/09, Frank van Lankvelt f.vanlankv...@onehippo.com wrote:
 I'm trying to get a page to observe a business object that can send
 events.  The changes don't warrant a full page refresh, so I want to
 update only those parts of the page that have changed as a result of the
 events.

 I've seen wicketstuff-push, where a similar kind of observation is
 present in the Application. From what I could see, the chat example has
 the drawback that there is no *unregistering* of listeners when pages
 are disposed of, so there is a memory leak.  (all pages will be kept in
 memory, being referenced directly by the service in the application)

 There doesn't seem to be any support for cleaning up pages, e.g. in the
 form of listeners that an application could register with the session
 store.  An alternative seems to be to implement my own PageMap, but I'm
 reluctant to do that as there will be a lot of copy/paste involved and
 the existing PageMap implementations rely on the fact that they're in
 the same package as Session.  A different alternative is to store all
 the listeners in a registry and use a separate thread to remove any
 listeners that are associated with pages that are no longer stored.  Is
 there a better way?

 Thanks, Frank


 f.vanlankv...@onehippo.com  www.onehippo.com
 Amsterdam Hippo B.V. Oosteinde 11   1017 WT   Amsterdam
 +31(0)20-5224466
 San Francisco Hippo USA Inc. 101 H Street, suite Q   Petaluma   CA
 94952-5100   +1-877-41-HIPPO



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



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



Re: Observation and page (map) eviction

2009-01-24 Thread Johan Compagner
I think having references to or from pages is a bad idea in wicket. We
serialize pages so if pages would have listeners then the are also
serialized. If others reference pages then after
serialization/deserialization they point to the wrong instance.

Way better is pure pull support. Components know where thet get its
data from and they pull it on render and/or on a visitor that checks
all components if they are changed. (and if changes add them to ajax
request target)

On 24/01/2009, igor.vaynb...@gmail.com igor.vaynb...@gmail.com wrote:
 Use weakreferences to hold onto pages instead.

 -igor

 On 1/24/09, Frank van Lankvelt f.vanlankv...@onehippo.com wrote:
 I'm trying to get a page to observe a business object that can send
 events.  The changes don't warrant a full page refresh, so I want to
 update only those parts of the page that have changed as a result of the
 events.

 I've seen wicketstuff-push, where a similar kind of observation is
 present in the Application. From what I could see, the chat example has
 the drawback that there is no *unregistering* of listeners when pages
 are disposed of, so there is a memory leak.  (all pages will be kept in
 memory, being referenced directly by the service in the application)

 There doesn't seem to be any support for cleaning up pages, e.g. in the
 form of listeners that an application could register with the session
 store.  An alternative seems to be to implement my own PageMap, but I'm
 reluctant to do that as there will be a lot of copy/paste involved and
 the existing PageMap implementations rely on the fact that they're in
 the same package as Session.  A different alternative is to store all
 the listeners in a registry and use a separate thread to remove any
 listeners that are associated with pages that are no longer stored.  Is
 there a better way?

 Thanks, Frank


 f.vanlankv...@onehippo.com  www.onehippo.com
 Amsterdam Hippo B.V. Oosteinde 11   1017 WT   Amsterdam
 +31(0)20-5224466
 San Francisco Hippo USA Inc. 101 H Street, suite Q   Petaluma   CA
 94952-5100   +1-877-41-HIPPO



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



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



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