Hello.
I do not think InheritableThreadLocal is a good place to put your
DataContext as a DataContext should only be used by a single thread
at a time. You may experience random hard-to-debug problems if you
use the same DataContext for different (child) threads.
This problem is also somewhat relevant for the cayenne
WebApplicationContextFilter as it bounds a DC to the users session
and a session can have multiple parallell requests. I am currently
moving over to a variant of the click filter that allows for a single
DC per thread and checks that there are no uncomitted objects in the
context at the end of each request-response loop.
Perhaps ZK has some place where you can initiate the ZK-threads
DataContext?
Regards,
- Tore.
On May 21, 2007, at 06:23, Steve Wells wrote:
> Hi,
>
> I've been playing with the ZK (www.zkoss.org) framework for
> building AJAX
> apps, and so far have found it rather impressive and easy to use.
>
> Having hit my first roadblock now is getting DataContext, as each
> ZK request
> runs in a separate thread (see:
> http://www.zkoss.org/smalltalks/zkacegi/zkacegi.dsp
> ) I think this is the problem why I can't get DC
> with WebApplicationContextFilter and
> DataContext.getThreadDataContext (). I
> get "IllegalStateException: Current thread has no bound DataContext."
>
> Looking into src for DataContext I see this comment // TODO: Andrus,
> 11/7/2005 - should we use InheritableThreadLocal instead?
>
> So I subclassed DataContext and overrode the :
> ThreadLocal threadDataContext
>
> to be
>
> InheritableThreadLocal threadDataContext
>
> changed WebApplicationContextFilter to call my subclassed
> DataContext and
> bingo it works.
>
> Not sure if anyone else has run into this kind of thing before? I
> would
> raise a JIRA issue but I'm not yet confident that this is the 100%
> correct
> solution.
>
> Steve
This archive was generated by hypermail 2.0.0 : Mon May 21 2007 - 04:21:39 EDT