wicket-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ernesto Reinaldo Barreiro <reier...@gmail.com>
Subject Re: What is the proper way to start a secondary process in Wicket 6
Date Fri, 21 Nov 2014 05:59:16 GMT
I do not see a problem with the approach bellow.... But I normally op for
the solution I posted before.

On Thu, Nov 20, 2014 at 9:33 PM, Warren Bell <warrenb@clarksnutrition.com>
wrote:

> After doing a little digging, I found the ThreadContext class.
>
> ExecutorService executorService = new ScheduledThreadPoolExecutor(20)
>         {
>             @Override
>             protected void beforeExecute(Thread t, Runnable r) {
>                 ThreadContext.setApplication(app);
>             }
>
>             @Override
>             protected void afterExecute(Runnable r, Throwable t) {
>                 ThreadContext.detach();
>             }
>         };
>
> That got rid of the initial "no application attached to current thread …”
> exception.
>
> Is this the correct way of creating a new process when you need to use an
> injected service in it ?
>
> Warren Bell
>
> On Nov 20, 2014, at 11:33 AM, Warren Bell <warrenb@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 <warrenb@clarksnutrition.com
> <mailto:warrenb@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 <
> reiern70@gmail.com<mailto:reiern70@gmail.com><mailto:reiern70@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 <
> > reiern70@gmail.com<mailto:reiern70@gmail.com><mailto:reiern70@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 <mgrigorov@apache.org
> <mailto:mgrigorov@apache.org><mailto:mgrigorov@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 <
> > reiern70@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 <mgrigorov@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 <
> > reiern70@gmail.com> wrote:
> >
> > Hi Warren,
> >
> >
> > On Thu, Nov 20, 2014 at 12:46 AM, Warren Bell <
> > warrenbell2@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-unsubscribe@wicket.apache.org
> > For additional commands, e-mail: users-help@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.
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>


-- 
Regards - Ernesto Reinaldo Barreiro

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message