Hi Richard,

I had a thorough look on your code. I have the following remarks:

- yes, SerializedPage must be clustered and should therefore implement
IClusterable (it is already Serializable, it should therefore be okay to
change)
- I found two problems with your implementation:
  1) unbind() is called during invalidation of a session. getPageStore()
will therefore result in a NPE as there is no WebRequest
  2) according to the JavaDoc of DiskPageStore#removePage(SessionEntry,
String, int) ("page id to remove or -1 if the whole pagemap should be
removed") calling removePage(String, String, int) with an id of -1 should
delete all pages of a pageMap (however, that's not documented in the JavaDoc
of IPageStore!)
- I feel that all pages could be in a single HashMap (rather than using 3
levels of nested HashMaps and HashSets). I therefore implemented my own
PageStore based on your ideas to confirm my feelings (using a single HashMap
per sesison, using less Hash(Map|Set) iterations; access synchronized using
a ReentrantReadWriteLock which I think has quite good performance with TC).
Please have a look. We can probably
http://www.nabble.com/file/p18312624/MyTerracottaPageStore.java
MyTerracottaPageStore.java  merge our ideas for best results!

Regards
Stefan


http://www.nabble.com/file/p18312624/MyTerracottaPageStore.java
MyTerracottaPageStore.java 

richardwilko wrote:
> 
> Hi again,
> 
> I have put together a second version which does away with the need to
> instrument TerracottaPageStore and AbstractPageStore, but not
> AbstractPageStore$SerializedPage (no getting away from that).
> 
> I have also improved the synchronisation stuff (i think, its not my strong
> point) and added a few more comments.
> 
> In the end I did make the classes static inner classes; i moved all the
> code calls to the methods in AbstractPageStore, to other places.
> 
> Please take a look and tell me what you think.
> 
> Richard
> 
>  http://www.nabble.com/file/p18280052/TerracottaPageStore.java
> TerracottaPageStore.java 
> 
> 
> 
> 
> richardwilko wrote:
>> 
>> It does add a slight overhead but I dont think 2 extra classes wouldn't
>> be noticed.
>> 
>> I can't use static inner classes because the methods in AbstractPageStore
>> aren't static.  
>> 
>> Your suggestion would work, with a slight modification:
>> 
>> (TerracottaPageStore)
>> ((SecondLevelCacheSessionStore)Application.get().getSesssionStore()).getStore();
>> 
>> So I will have a look at implementing it that way instead.
>> 
>> Cheers,
>> 
>> Richard
>> 
>> 
>> 
>> Stefan Fußenegger wrote:
>>> 
>>> I don't understand the problem. Is it just the visibility of those
>>> methods? If yes, TerracottaPageStore could allow public access to any
>>> protected method if needed. Or you could use static inner classes to
>>> remove this (hidden) reference and use lazy property initialization to
>>> get your hands on the current JVM's TerracottaSessionStore using:
>>> 
>>> <code>
>>> private transient TerracottaSessionStore _tss;
>>> 
>>> public TerracottaSessionStore getTerracottaSessionStore() {
>>>   if (_tss == null) _tss = (TerracottaSesssionStore)
>>> Application.get().getSesssionStore();
>>>   return _tss;
>>> }
>>> </code>
>>> 
>>> However, doesn't instrumenting classes that aren't meant be shared sound
>>> like unnecessary overhead?
>>> 
>>> best regards
>>> Stefan
>>> 
>>> 
>>> 
>>> 
>> 
>> 
> 
> 


-----
-------
Stefan Fußenegger
http://talk-on-tech.blogspot.com // looking for a nicer domain ;)
-- 
View this message in context: 
http://www.nabble.com/Terracotta-integration-tp18168616p18312624.html
Sent from the Wicket - Dev mailing list archive at Nabble.com.

Reply via email to