[Seaside] Re: GOODS

C. David Shaffer cdshaffer at acm.org
Tue Nov 20 02:29:30 UTC 2007


Avi Bryant wrote:
>
> 1) Do you get a new connection from the pool for each seaside request?
>  If so, how do you deal with references to objects that stick around
> between requests?  If not, how does the pooling work?
>   
No, this pool is just a small set of "fresh" connections that I keep.  
When a new seaside session is created it gets a session from this pool 
and, I kick a background process that creates another connection to fill 
the empty slot in the pool.  It is important that these connections have 
_no_ objects loaded on them otherwise they will cause GOODS to queue 
object change notifications.

> 2) This idea has come up before but I'm curious what your take on it
> is these days: would it help to have a single shared connection that
> was used most of the time, and had a very large cache but never any
> commits, and then switch to a pooled, small-cache transaction whenever
> you need to do writes?  I'm picturing an interface something like
> this:
>
> renderItemsOn: html
>    connection root allItems do:
>        [:ea |
>        ...
>        html anchor callback: [self delete: ea]; text: 'Delete']
>
> delete: anItem
>    connection writeConnectionFor: anItem do:
>       [:write :item |
>       write root allItems remove: item ifAbsent: [].
>       write commit]
>
>   
Yes, I did something very similar.  Since I had hidden all mutation 
inside command objects each command went through a transition from one 
transaction to another before it executed.  Each command was responsible 
for supplying the list of GOODS objects that needed to be moved.  Worked 
very well.  Oddly enough I didn't use a single read-only 
transaction...each session still had its own read transaction.  Maybe 
the next step would have been to get rid of that obvious redundancy but 
that would have required making the transactions thread-safe.  As I 
recall something had to be done to make sure that the read-only session 
saw changes at reasonable points (I think my commands sent #refresh to 
the read-only session after the command was complete).

David



More information about the seaside mailing list