actually isDone() seems to work fine in this case []
Leo On Thu, Jan 14, 2016 at 3:34 PM, Leonardo K. Shikida <[email protected]> wrote: > Well, if I keep the map of tasks=>Future, I can call cancel() on it, then > in the async method I can check context.wasCancelCalled() and actually > cancel it (probably throwing an exception). But then, if isDone() can't > tell if the thread as ended or not, I have to find another way to notify my > map back that the task is not running anymore. > > Oh boy. > > [] > > Leo > > On Thu, Jan 14, 2016 at 3:29 PM, Romain Manni-Bucau <[email protected] > > wrote: > >> depends if you want the control in the caller or in your async method >> basically but isDone will have the constraints we talked about >> >> >> Romain Manni-Bucau >> @rmannibucau <https://twitter.com/rmannibucau> | Blog >> <http://rmannibucau.wordpress.com> | Github < >> https://github.com/rmannibucau> | >> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber >> <http://www.tomitribe.com> >> >> 2016-01-14 18:27 GMT+01:00 Leonardo K. Shikida <[email protected]>: >> >> > well, but I still have the option to keep a map os task=>Future and >> check >> > if Future.isDone() right? >> > >> > [] >> > >> > Leo >> > >> > On Wed, Jan 13, 2016 at 4:24 AM, Romain Manni-Bucau < >> [email protected] >> > > >> > wrote: >> > >> > > Well technically it should be ~possible adding in your impl a map of >> > > task=>thread and getting the thread from the task to interrupt it but >> > > results it would be quite hard to tune portably since you then need to >> > tune >> > > the async pool to support such an usage. >> > > Le 13 janv. 2016 00:21, "Leonardo K. Shikida" <[email protected]> a >> > écrit >> > > : >> > > >> > > > I wish I could just kill -9 it :-D but I understand it's a java >> > problem, >> > > > not a tomee problem :-) >> > > > >> > > > I'll stick to SessionContext then >> > > > >> > > > thx >> > > > >> > > > [] >> > > > >> > > > Leo >> > > > >> > > > On Tue, Jan 12, 2016 at 8:54 PM, Romain Manni-Bucau < >> > > [email protected] >> > > > > >> > > > wrote: >> > > > >> > > > > You dont like SessionContext solution? >> > > > > Le 12 janv. 2016 23:52, "Leonardo K. Shikida" <[email protected]> >> a >> > > > écrit >> > > > > : >> > > > > >> > > > > > right, but how can I reach them? It seems I'd need somehow to >> get >> > > > > > AsynchronousCall >> > > > > > from invoke() >> > > > > > >> > > > > > is there any "right way" to do that? >> > > > > > >> > > > > > [] >> > > > > > >> > > > > > Leo >> > > > > > >> > > > > > On Tue, Jan 12, 2016 at 7:44 PM, Romain Manni-Bucau < >> > > > > [email protected] >> > > > > > > >> > > > > > wrote: >> > > > > > >> > > > > > > think >> > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> https://github.com/apache/tomee/blob/120a33c7b4de07ae01c17978ea37d88a911ea860/container/openejb-core/src/main/java/org/apache/openejb/async/AsynchronousPool.java#L146 >> > > > > > > should help ;) >> > > > > > > >> > > > > > > As thread.stop() is deprecated asynchronous tasks should check >> > > their >> > > > > > state >> > > > > > > ("isRunning") through the context in a correct implementation >> if >> > > > theiy >> > > > > > can >> > > > > > > be cancelled. >> > > > > > > >> > > > > > > >> > > > > > > Romain Manni-Bucau >> > > > > > > @rmannibucau <https://twitter.com/rmannibucau> | Blog >> > > > > > > <http://rmannibucau.wordpress.com> | Github < >> > > > > > > https://github.com/rmannibucau> | >> > > > > > > LinkedIn <https://www.linkedin.com/in/rmannibucau> | >> Tomitriber >> > > > > > > <http://www.tomitribe.com> >> > > > > > > >> > > > > > > 2016-01-12 21:28 GMT+01:00 Leonardo K. Shikida < >> > [email protected] >> > > >: >> > > > > > > >> > > > > > > > actually, it seems that cancel() does not interrupt >> anything in >> > > > this >> > > > > > > > context >> > > > > > > > >> > > > > > > > it just changes a flag for >> > > > > > > > >> > > > > > > > @Resource >> > > > > > > > private SessionContext context; >> > > > > > > > >> > > > > > > > >> > > > > > > > to context.wasCancelCalled() >> > > > > > > > >> > > > > > > > right? >> > > > > > > > >> > > > > > > > [] >> > > > > > > > >> > > > > > > > Leo >> > > > > > > > >> > > > > > > > On Tue, Jan 12, 2016 at 6:13 PM, Leonardo K. Shikida < >> > > > > > [email protected]> >> > > > > > > > wrote: >> > > > > > > > >> > > > > > > > > I understand the need to wrap the result in a AsyncResult >> > > > > > > > > >> > > > > > > > > My question is if inside the @Asynchronous method I have a >> > > > > > > Thread.sleep() >> > > > > > > > > and if the caller method keeps the Future object, if I >> call >> > > > > > > > > Future.cancel(true), will it send an interrupt to the >> > > > > @Asynchrnonous >> > > > > > > > method >> > > > > > > > > or will it be ignored? >> > > > > > > > > >> > > > > > > > > [] >> > > > > > > > > >> > > > > > > > > Leo >> > > > > > > > > >> > > > > > > > > On Tue, Jan 12, 2016 at 10:58 AM, Romain Manni-Bucau < >> > > > > > > > > [email protected]> wrote: >> > > > > > > > > >> > > > > > > > >> the future returned to the caller can be cancelled, the >> > future >> > > > > > > instance >> > > > > > > > >> you >> > > > > > > > >> return can't since it is here just to match the returned >> > type: >> > > > > > > > >> >> > > > > > > > >> public Future<Foo> asyncMethod() { >> > > > > > > > >> return new Foo(); >> > > > > > > > >> } >> > > > > > > > >> >> > > > > > > > >> this is really what you do but it doesnt compile so you >> wrap >> > > Foo >> > > > > in >> > > > > > an >> > > > > > > > >> AsyncResult to match java typing but if you debug it is >> not >> > a >> > > > > > > > AsyncResult >> > > > > > > > >> that the caller get but a real Future. >> > > > > > > > >> >> > > > > > > > >> >> > > > > > > > >> >> > > > > > > > >> Romain Manni-Bucau >> > > > > > > > >> @rmannibucau <https://twitter.com/rmannibucau> | Blog >> > > > > > > > >> <http://rmannibucau.wordpress.com> | Github < >> > > > > > > > >> https://github.com/rmannibucau> | >> > > > > > > > >> LinkedIn <https://www.linkedin.com/in/rmannibucau> | >> > > Tomitriber >> > > > > > > > >> <http://www.tomitribe.com> >> > > > > > > > >> >> > > > > > > > >> 2016-01-12 13:42 GMT+01:00 Leonardo K. Shikida < >> > > > [email protected] >> > > > > >: >> > > > > > > > >> >> > > > > > > > >> > Hi >> > > > > > > > >> > >> > > > > > > > >> > Is it possible to cancel a long-running @Asynchronous >> > > method? >> > > > > > > > >> > >> > > > > > > > >> > My idea was to cancel the Future object, but according >> to >> > > > > > > > >> > >> > > > > > > > >> > >> > > > > http://tomee.apache.org/examples-trunk/async-methods/README.html >> > > > > > > > >> > >> > > > > > > > >> > "Important to note that the AsyncResult object the >> > > > JobProcessor >> > > > > > > > returns >> > > > > > > > >> is >> > > > > > > > >> > not the same Future object the caller is holding. It >> would >> > > > have >> > > > > > been >> > > > > > > > >> neat >> > > > > > > > >> > if the real JobProcessor could just return String and >> the >> > > > > caller's >> > > > > > > > >> version >> > > > > > > > >> > of JobProcessor could return Future<String>, but we >> didn't >> > > see >> > > > > any >> > > > > > > way >> > > > > > > > >> to >> > > > > > > > >> > do that without adding more complexity. So the >> AsyncResult >> > > is >> > > > a >> > > > > > > simple >> > > > > > > > >> > wrapper object. The container will pull the String out, >> > > throw >> > > > > the >> > > > > > > > >> > AsyncResult away, then put the String in the *real* >> Future >> > > > that >> > > > > > the >> > > > > > > > >> caller >> > > > > > > > >> > is holding." >> > > > > > > > >> > >> > > > > > > > >> > This thread also indicates that it's not defined in the >> > EJB >> > > > spec >> > > > > > > > >> > >> > > > > > > > >> > >> > > > > > > > >> > >> > > > > > > > >> >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> http://stackoverflow.com/questions/16493381/cannot-cancel-asynchronous-call-to-ejb >> > > > > > > > >> > >> > > > > > > > >> > Any help is welcome. >> > > > > > > > >> > >> > > > > > > > >> > [] >> > > > > > > > >> > >> > > > > > > > >> > Leo >> > > > > > > > >> > >> > > > > > > > >> >> > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> > >
