> Hmm, maybe I'm missing something, but if you want to have EVALUATED once per
> request, I think the following should be sufficient. (unless I'm missing
> somtething)

I want a generic centrally managed solution. I don't want to cache
every model manually.

**
Martin

>
>        new AbstractReadOnlyModel<T>() {
>            private transient T cachedValue;
>           �...@override
>            public T getObject() {
>                if (cachedValue == null) {
>                    cachedValue = ...; //evaluate here, only once per
> request
>                }
>                return cachedValue;
>            }
>        };
>
> since the cached value is transient, it will be null when it is
> deserialized. But during the requestCyclue, the evaluation will only happen
> once. (at least, if I'm not missing something...)
>
>
>
> On Sun, Oct 25, 2009 at 7:02 AM, Martin Makundi <
> martin.maku...@koodaripalvelut.com> wrote:
>
>> > What I found was that I was instantiating my LDM's as private variables
>> in
>> > my custom components but that they were not being detached.  In this case
>> > you need to programatically register your non default models to
>> participate
>> > in the detachment process.  See the Wiki here for an example:
>> >
>> http://cwiki.apache.org/confluence/display/WICKET/Working+with+Wicket+models#WorkingwithWicketmodels-ManagingthelifecycleofnondefaultdetachableIModel%27s
>>
>> Which part there in particular? I read it and it didn't yet ring my bell...
>>
>> is there really "another way" to register for onDetach events apart
>> from the model being directly involved in render cycle as a
>> formcomponent's or another component's defaultmodel?
>>
>> > For your option 3 I would say you should create a custom IModel
>> > implementation that is aware of your caching strategy so that your
>> > Component's don't need to care about how the data is loaded.
>>
>> Well.. that's the dream ;) Furthermore, I would like it to be more or
>> less automatic. Maybe models like:
>>
>> 1. SettingThisModelWillResetCacheModel extends IModel
>> 2. SettingThisModelWillNOTResetCacheModel extends IModel
>>
>> Furthremore, they would probably be created using a factory method in
>> a cache manager:
>>
>> CacheManager cacheManager = new CacheManager(detachableToo);
>>
>> cacheManager.newIndependentCachedModel(IModel ...)
>> cacheManager.newCachedModelWhoseChangeFiresExpire(IModel ...)
>>
>> AND maybe I could chain cacheManagers to say "cache manger A will
>> expire if any of its dependent managers B-C-D expire."
>>
>> Also it should be easy to add
>> cacheManager.addCacheExpirationListener(Runnable ..) or something.
>>
>> ...
>>
>> Anybody else need something like this? We could write a draft and see
>> if it works and continue improving the design.
>>
>> **
>> Martin
>>
>>
>> >
>> > Your implementation could hold a Map of all related models and update
>> > according to your rules or better yet build a service that does the
>> caching
>> > and dirty detection and then just have the LDM source the cell value from
>> > the service.  Something like:
>> >
>> > new LoabableDetachableModel () {
>> >
>> >    protected CellValue load () {
>> >
>> >           return cellService.getValue (row, col);
>> >  }
>> > }
>> >
>> > Regards,
>> >
>> > Mike
>> >
>> >>> evaluated only one time per render can be done with
>> >>> LoadableDetachedModel ..
>> >>>
>> >>
>> >> I do not mean LOADED once per render. I mean EVALUATED once per
>> >> render. In my understanding LoadableDetachableModel does not guarantee
>> >> "reset" in any particular stage.
>> >>
>> >>
>> >>>
>> >>> can you explain it a littly bit (a link to your original message?)
>> >>>
>> >>
>> >> I mean for rexample I have many models like this:
>> >>
>> >> new AbstractReadOnlyModel<String>() {
>> >>   public String getObject() {
>> >>      // evaluate message with some logic
>> >>      return message;
>> >>   }
>> >> }
>> >>
>> >> Furthermore, I have several components that, say, depend on this
>> >> value. This getObject() will be called many times durung render and
>> >> the logic will be evaluated many times.
>> >>
>> >> If I make it detachable it will yes be detached but I am not sure that
>> >> the detaching is guaranteed at some specific point in request cycle?
>> >>
>> >> To make my "use case" more clear I will give an example: say I have a
>> >> wicket page with a panel that contains a table with columns rows and y
>> >> rows. Furthermore, let's assume it is a spreadsheet emulator: you can
>> >> write formulas into the cells that depend on the other cells which
>> >> means that the value of each cell is recursively evaluated dependent
>> >> on the other cell's values.
>> >>
>> >> Requirements:
>> >> 1. During render time each cell's model value should be cached once it
>> >> has been evaluated (we do not want to recurse many times to fetch the
>> >> same value).
>> >> 2. If the value of any cell changes, all the dependent cells should be
>> >> (for example) ajax refreshed and re-evaluated. For simplicity, we
>> >> could re-set the cache of all models when change occurs. And
>> >> redraw-all.
>> >> 3. We want to reset cache ONLY if change occurs.
>> >>
>> >> In my understanding requirement 3 cannot be directly reached with
>> >> detachable models.
>> >>
>> >> **
>> >> Martin
>> >>
>> >>
>> >
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>> For additional commands, e-mail: users-h...@wicket.apache.org
>>
>>
>
>
> --
> Pieter Degraeuwe
> Systemworks bvba
> Belgiëlaan 61
> 9070 Destelbergen
> GSM: +32 (0)485/68.60.85
> Email: pieter.degrae...@systemworks.be
> visit us at http://www.systemworks.be
>

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

Reply via email to