This will get you started
https://gist.github.com/uklance/88c9a5400872273d9b14
 On 6 Nov 2014 03:01, "Alex Kotchnev" <akoch...@gmail.com> wrote:

> Thago  & Lance - thanks a lot for your detailed comments and ideas. On to
> the details :
>
> The issue that I ran into with passing page instance variables into threads
> is at
>
> http://apache-tapestry-mailing-list-archives.1045711.n5.nabble.com/Page-instance-variables-and-threads-td5728565.html
> . The specific issue is that the page instance variable is just a "facade"
> to the state that is stored in the thread local - while I'm accessing it
> inside a page method (same thread), I can access the value. When I access
> the same variable inside the new thread, it's value is null, as the new
> thread doesn't inherit the thread locals of its parent thread.
>
> Lance - any chance you could throw you example component into a GitHub gist
> for me to see ?
>
> In terms of being able to pass the state to the child threads, I was
> thinking - is there a way to put this state into InheritableThreadLocals
> (instead of ThreadLocals) so that child threads have access to the thread
> local state. Granted, it seems that with InheritableThreadLocals, if any
> state changes in the child thread it will not propagated to its parent, but
> that might be OK.
>
> Cheers - Alex K
>
>
>
> On Wed, Nov 5, 2014 at 6:34 PM, Lance Java <lance.j...@googlemail.com>
> wrote:
>
> > FYI I've worked out a very simple / no frills way to do this.
> >
> > <t:parallel>
> >    <t:someComponent />
> > </t:parallel>
> >
> > The parallel component would then render it's
> ComponentResources.getBody()
> > in a separate thread (note that the body Block can be TypeCoerced to
> > RenderCommand).
> >
> > As Thiago discussed, his shell element concept could be achieved by
> passing
> > an empty RenderQueue and MarkupWriter to the body RenderCommand (which is
> > rendering asynchronously to the main request). Once the async render
> > finishes, the resultant markup String could be introduced into the main
> DOM
> > on the request thread.
> >
> > Note that request / response will be null on the async thread. Any
> request
> > scoped property bindings and Environmentals will also be null.
> > PerthreadManager.cleanupThread() should be called after the async render.
> >  On 5 Nov 2014 16:51, "Thiago H de Paula Figueiredo" <thiag...@gmail.com
> >
> > wrote:
> >
> > > Hello, Alex!
> > >
> > > On Tue, 04 Nov 2014 21:23:10 -0200, Alex Kotchnev <akoch...@gmail.com>
> > > wrote:
> > >
> > >  I'm a bit puzzled by the negative vibe that I'm getting. Just to be
> > clear
> > >> -
> > >>
> > >
> > > I'm not perceiving any negative vibe, just one idea being proposed and
> > > some people thinking that it wouldn't actually reach its objective
> > (making
> > > page rendering faster).
> > >
> > >  I'm not asking anyone to do any work on my behalf, or to drop
> everything
> > >> and work on this as if it's the most important thing in the world
> (which
> > >> it is not). I'm also not here to troll and say "tapestry sucks, this
> > other
> > >> framework is better"
> > >>
> > >
> > > I don't think anyone here is thinking that. I definitely am not. :)
> > >
> > > - nothing of the sort (in my first email I did
> > >
> > >> explicitly mention that after evaluating the two for a while I did
> find
> > >> Tapestry to be superior and I'm still sticking with it). I saw this
> > >> approach in a different framework, I found it interesting and I'm
> > curious
> > >> for input from the more knowledgeable people on this list on how one
> > >> might tackle this.
> > >>
> > >
> > > I actually think it's doable without a thread-safe DOM, but with some
> > > limitations, even if I think it's not worth the effort:
> > > 1) The component would need to generate a DOM element immediately,
> let's
> > > call it shell element, before spawning a new thread. This way, the new
> > > thread would only work inside this shell element, avoiding the need of
> > > synchronizing the whole DOM tree (Document instance). This could be
> > > implemented with a new render phase event.
> > > 2) The component should avoid changing DOM elements it didn't create
> > > (a.k.a DOM rewriting), just creating new elements inside this shell
> > element.
> > > 3) The component couldn't be in a loop (Loop or Grid), as the same
> > > component instance is rendered many times.
> > > 4) The developer must know that things may go wrong in unexpected ways.
> > >
> > >  likely be much faster than actually getting the data. The trouble is
> > that
> > >> I did try the approach of "firing up new threads to do the work", but
> > then
> > >> I ran into issues w/ Tapestry's thread local data not being available
> in
> > >> those other threads when I pass in the variables from my tapestry
> > >> page/component ( I posted in a different thread a few weeks ago about
> > >> that).
> > >>
> > >
> > > This is weird. If you don't pass the component, page or mixin objects
> > > themselves to this other threads, there shouldn't be any problem. Could
> > you
> > > link to the thread please?
> > >
> > >  @Lance - thanks for pointing out the fact about the mutability of the
> > DOM
> > >> - AFAIK, Lift snippets are indeed "transformations" of the DOM that
> they
> > >> manipulate, and from the POV of how Scala deals w/ XML the DOM is
> > treated
> > >> as an immutable structure that goes through a bunch of
> transformations.
> > >> So, this might be a critical distinction that I missed in my initial
> > thought
> > >> process.
> > >>
> > >
> > > Lift is a Scala framework. Scala favors immutable structures, so this
> > > difference between Lift and Tapestry isn't unexpected to me.
> > >
> > >  Anyway, the argument here seems to me like the argument for parallel
> > >> collections (when I first saw them in Groovy  for example). My initial
> > >> reaction when I saw them for the first time was "why the heck would I
> > >> want to do this, of course I'd want to go over my collection items one
> > by
> > >> one".
> > >>
> > >
> > > Actually, in some cases, the parallelized version is slower than the
> > > sequential one due to threading overhead.
> > >
> > > --
> > > Thiago H. de Paula Figueiredo
> > > Tapestry, Java and Hibernate consultant and developer
> > > http://machina.com.br
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> > > For additional commands, e-mail: users-h...@tapestry.apache.org
> > >
> > >
> >
>

Reply via email to