Hi Ernesto,

See https://github.com/reiern70/antilia-bits/pull/1
I've moved the code that exports the Application thread local to
TasksRunnable. This way it is possible to export the Session too.

The code looks good (after removing all annoying whitespaces :-) ). Now it
needs some explanation (i.e. blog article) ;-)

Martin Grigorov
Wicket Training and Consulting
https://twitter.com/mtgrigorov

On Sun, Nov 23, 2014 at 8:13 AM, Ernesto Reinaldo Barreiro <
reier...@gmail.com> wrote:

> Warren,
>
> ThreadContext.detach(); seems to be more proper than...
> ThreadContext.setApplication(null); I will update demo.
>
> On Sat, Nov 22, 2014 at 10:58 PM, Warren Bell <warrenbe...@gmail.com>
> wrote:
>
> > Ernesto,
> >
> > That’s kind of what I ended up doing except with a different
> > ThreadPoolExecutor implementation.
> >
> > ExecutorService executorService = new ScheduledThreadPoolExecutor(20)
> >         {
> >             @Override
> >             protected void beforeExecute(Thread t, Runnable r) {
> >                 ThreadContext.setApplication(MyApplication.this);
> >             }
> >
> >             @Override
> >             protected void afterExecute(Runnable r, Throwable t) {
> >                 ThreadContext.detach();
> >             }
> >         };
> >
> > No particular reason why I picked ScheduledThreadPoolExecutor other than
> > it looked a little easier to use. I need to look more into the different
> > types of Thread pools and such.
> >
> > I used:
> >
> > ThreadContext.detach();
> >
> > instead of:
> >
> > ThreadContext.setApplication(null);
> >
> > Warren Bell
> >
> >
> > On Nov 22, 2014, at 11:18 AM, Ernesto Reinaldo Barreiro <
> > reier...@gmail.com> wrote:
> >
> > > pushed a new version including injecting a Guice managed service class
> > >
> > > On Sat, Nov 22, 2014 at 8:08 PM, Ernesto Reinaldo Barreiro <
> > > reier...@gmail.com> wrote:
> > >
> > >> Warren,
> > >>
> > >> Something like:
> > >>
> > >> ExecutorService executorService =  new ThreadPoolExecutor(10, 10,
> > >>            0L, TimeUnit.MILLISECONDS,
> > >>            new LinkedBlockingQueue<Runnable>()) {
> > >>   @Override
> > >>           protected void beforeExecute(final Thread t, final Runnable
> > r) {
> > >>   ThreadContext.setApplication(BgProcessApplication.this);
> > >>           };
> > >>           @Override
> > >>           protected void afterExecute(final Runnable r, final
> Throwable
> > >> t) {
> > >>           ThreadContext.setApplication(null);
> > >>           }
> > >> };
> > >>
> > >> seems to work.
> > >>
> > >> On Thu, Nov 20, 2014 at 8:33 PM, Warren Bell <
> > warr...@clarksnutrition.com>
> > >> wrote:
> > >>
> > >>> I have seen this from a 2010 post:
> > >>>
> > >>> final Application app = Application.get();
> > >>>          final ExecutorService service = new
> > >>> ScheduledThreadPoolExecutor(1) {
> > >>>            @Override
> > >>>            protected void beforeExecute(final Thread t, final
> Runnable
> > >>> r) {
> > >>>              Application.set(app);
> > >>>            };
> > >>>            @Override
> > >>>            protected void afterExecute(final Runnable r, final
> > Throwable
> > >>> t) {
> > >>>              Application.unset();
> > >>>            }
> > >>>          };
> > >>>
> > >>> But there is no more Application#set(app) and Application#unset() in
> > >>> Wicket 6. Does Wicket 6 have some built in way of creating secondary
> > >>> processes, maybe an internal thread pool that can be set-up ?
> > >>>
> > >>> Warren Bell
> > >>>
> > >>> On Nov 20, 2014, at 10:03 AM, Warren Bell <
> warr...@clarksnutrition.com
> > >>> <mailto:warr...@clarksnutrition.com>> wrote:
> > >>>
> > >>> Ernesto, great job putting all that code together so quickly. I
> cloned
> > >>> your project and cherry picked out the code that I needed, I don’t
> > need all
> > >>> the process progress code you have. I don’t really care what the
> > process
> > >>> progress is or even if it completes ok, just don’t want it holding up
> > my
> > >>> response.
> > >>>
> > >>> I ended up using your ExecutionBridge, TasksRunnable, and ITask
> classes
> > >>> and interfaces. But I still don’t know where and how to inject my
> > service
> > >>> into this new task/thread or ExecutionBridge without getting this
> > exception:
> > >>>
> > >>> Exception in thread "pool-1-thread-1"
> > >>> org.apache.wicket.WicketRuntimeException: There is no application
> > attached
> > >>> to current thread pool-1-thread-1
> > >>>
> > >>> Do I need to get the application attached to my new threads somehow
> so
> > I
> > >>> can use my injected service, and if so, how do I do that ?
> > >>>
> > >>> Warren
> > >>>
> > >>> On Nov 20, 2014, at 5:47 AM, Ernesto Reinaldo Barreiro <
> > >>> reier...@gmail.com<mailto:reier...@gmail.com><mailto:
> > reier...@gmail.com>>
> > >>> wrote:
> > >>>
> > >>> Martin,
> > >>>
> > >>> I have created
> > >>>
> > >>> https://github.com/reiern70/antilia-bits/tree/master/bgprocess
> > >>>
> > >>> My only caveats are
> > >>>
> > >>>
> > >>>
> >
> https://github.com/reiern70/antilia-bits/blob/master/bgprocess/src/main/java/com/antilia/panel/TasksListPanel.java#L50
> > >>>
> > >>> and
> > >>>
> > >>>
> > >>>
> >
> https://github.com/reiern70/antilia-bits/blob/master/bgprocess/src/main/java/com/antilia/panel/TasksListPanel.java#L70
> > >>>
> > >>> I had to re-add Timer behavior: I do not see yet why? It is as if the
> > >>> timer
> > >>> is not re-rendered: they are not isTemporar :-( I will check when I
> > have
> > >>> more time.
> > >>>
> > >>> I would appreciate if you can review the code... before I write
> > anything
> > >>> on
> > >>> my fork  of Wicket in Action. This probably could be done in a leaner
> > way
> > >>> mounting a resource to serve JSON for task states and building the UI
> > at
> > >>> client side... But example illustrates how to do it with "plain
> > Wicket".
> > >>>
> > >>>
> > >>> On Thu, Nov 20, 2014 at 8:40 AM, Ernesto Reinaldo Barreiro <
> > >>> reier...@gmail.com<mailto:reier...@gmail.com><mailto:
> > reier...@gmail.com>>
> > >>> wrote:
> > >>>
> > >>> Ok. Let me see what I can do this weekend while I wait for my son to
> > >>> finish he's shower after he's football match  ;-)
> > >>>
> > >>> On Thu, Nov 20, 2014 at 8:30 AM, Martin Grigorov <
> mgrigo...@apache.org
> > >>> <mailto:mgrigo...@apache.org><mailto:mgrigo...@apache.org>>
> > >>> wrote:
> > >>>
> > >>> Sure! Thanks!
> > >>> It could be as fancy as you wish.
> > >>>
> > >>> Martin Grigorov
> > >>> Wicket Training and Consulting
> > >>> https://twitter.com/mtgrigorov
> > >>>
> > >>> On Thu, Nov 20, 2014 at 10:17 AM, Ernesto Reinaldo Barreiro <
> > >>> reier...@gmail.com> wrote:
> > >>>
> > >>> Can I give it a try? Something event showing some progress at client
> > >>> side?
> > >>>
> > >>> On Thu, Nov 20, 2014 at 7:54 AM, Martin Grigorov <
> mgrigo...@apache.org
> > >
> > >>> wrote:
> > >>>
> > >>> Hi,
> > >>>
> > >>> Someday I'll write a blog (with a demo) about this at
> > >>> http://wicketinaction.com.
> > >>> The question is being asked regularly.
> > >>>
> > >>> Actually anyone can send a Pull Request at
> > >>> https://github.com/dashorst/wicketinaction.com with such article.
> > >>>
> > >>> Martin Grigorov
> > >>> Wicket Training and Consulting
> > >>> https://twitter.com/mtgrigorov
> > >>>
> > >>> On Thu, Nov 20, 2014 at 7:26 AM, Ernesto Reinaldo Barreiro <
> > >>> reier...@gmail.com> wrote:
> > >>>
> > >>> Hi Warren,
> > >>>
> > >>>
> > >>> On Thu, Nov 20, 2014 at 12:46 AM, Warren Bell <
> > >>> warrenbe...@gmail.com>
> > >>> wrote:
> > >>>
> > >>> I am using Wicket 6 REST annotations and want to asynchronously
> > >>> start a
> > >>> process that writes some logging data to a db. I don’t need the
> > >>> response
> > >>> to
> > >>> wait for this process. I have tried using threads, but I get the
> > >>> “App
> > >>> not
> > >>> attached to this thread” exception when I try to use an injected
> > >>> service.
> > >>> This logging process is a little more complicated than what log4j
> > >>> or
> > >>> loopback can do. The bottom line is that I do not want the
> > >>> request/response
> > >>> process to have to wait for the logging process to complete. What
> > >>> is
> > >>> the
> > >>> proper way of doing this in Wicket 6 using an injected service.
> > >>>
> > >>> Sometimes  what I do is I create a context class ServiceHolder,
> > >>> inject
> > >>> what I need on this class (e.g. services) and pass this to the non
> > >>> web
> > >>> thread (e.g as an argument to the runnable). Injector.inject will
> > >>> have
> > >>> WicketApp in context.
> > >>>
> > >>>
> > >>> 1) Get request
> > >>> 2) Log some data (Do not wait for this to complete)
> > >>> 3) Process request
> > >>> 4) Return response
> > >>>
> > >>>
> > >>> You could use the same ServiceHolder as a bridge to pass info to the
> > >>> WEB
> > >>> layer. 1) keep a reference to it 2) in another (polling) request
> > >>> use it
> > >>> to
> > >>> see how back-ground job is progressing. Sometimes I also use it to
> > >>> control
> > >>> the Job: e.g. stop/pause it, cancel it. Once Job finishes just let
> > >>> service
> > >>> holder "go".
> > >>>
> > >>>
> > >>> Thanks,
> > >>>
> > >>> Warren Bell
> > >>>
> > >>> ---------------------------------------------------------------------
> > >>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> > >>> For additional commands, e-mail: users-h...@wicket.apache.org
> > >>>
> > >>>
> > >>>
> > >>>
> > >>> --
> > >>> Regards - Ernesto Reinaldo Barreiro
> > >>>
> > >>>
> > >>>
> > >>>
> > >>>
> > >>> --
> > >>> Regards - Ernesto Reinaldo Barreiro
> > >>>
> > >>>
> > >>>
> > >>>
> > >>>
> > >>> --
> > >>> Regards - Ernesto Reinaldo Barreiro
> > >>>
> > >>>
> > >>>
> > >>>
> > >>> --
> > >>> Regards - Ernesto Reinaldo Barreiro
> > >>>
> > >>> --
> > >>> This email was Virus checked by Clark's Nutrition's Astaro Security
> > >>> Gateway.
> > >>>
> > >>>
> > >>
> > >>
> > >> --
> > >> Regards - Ernesto Reinaldo Barreiro
> > >>
> > >
> > >
> > >
> > > --
> > > Regards - Ernesto Reinaldo Barreiro
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> > For additional commands, e-mail: users-h...@wicket.apache.org
> >
> >
>
>
> --
> Regards - Ernesto Reinaldo Barreiro
>

Reply via email to