Hi,

You can put the tasks in an application scoped structure (e.g.
MyApplication.get().getTasksMap()) and use a serializable key.

Martin Grigorov
Wicket Training and Consulting


On Tue, May 6, 2014 at 2:11 PM, Richard W. Adams <rwada...@up.com> wrote:

> Interesting approach. Our use case is more complex, as it runs a
> background task in a separate thread. Our task has three basic
> requirements. It must:
>
> 1. Be cancellable.
>
> 2. Report its outcome (success/failure/warning).
>
> 3. Report incremental progress.
>
> Our fundamental problem is not how to display the progress bar, it's how
> to determine the outcome of the background thread. That's an unexpectedly
> a tough nut to crack. The vast majority of examples we've seen use the
> Runnable interface (which doesn't help us, as it can't be canceled or
> return a value), rather than Callable interface (which meets our needs,
> but doesn't seem to play well with Wicket)
>
>
>
>
> From:   Colin Rogers <colin.rog...@objectconsulting.com.au>
> To:     "users@wicket.apache.org" <users@wicket.apache.org>
> Date:   05/05/2014 08:14 PM
> Subject:        RE: Progress Bar
>
>
>
> There is a pretty nifty, jquery based progress bar, in wicket-jquery-ui
> library...
>
> http://www.7thweb.net/wicket-jquery-ui/progressbar/DefaultProgressBarPage
>
> Cheers,
> Col.
>
> -----Original Message-----
> From: Richard W. Adams [mailto:rwada...@up.com]
> Sent: Tuesday, 6 May 2014 3:19 AM
> To: users@wicket.apache.org
> Subject: Progress Bar
>
> We have a requirement to implement a progress bar for long-running server
> operations. We can't use the code at
> https://github.com/wicketstuff/core/wiki/Progressbar, because it doesn't
> meet our corporate user interface look-and-feel standards.
>
> So, we started our own implementation. Our test page contains these
> methods below (the TestExecutor below class implements
> Callable<ExecutorResult>).
>
>
> //----------------------------------------------------------------------------------------------
> private Component createButton() {
>         return new AjaxButton("start-button") {
>                 private static final long serialVersionUID = -1;
>
>                 @Override protected void onSubmit(final AjaxRequestTarget
> ajax, final Form<?> form) {
>
>                         final ExecutorService service = Executors.
> newSingleThreadExecutor();
>                         try {
>                                 final ProgressBarTestPage page =
> ProgressBarTestPage.this;
>                                 final TransactionData data = new
> TransactionData (page.getId(), false);
>                                 final TestExecutor executor = new
> TestExecutor(data, getPermissions());
>
>                                 executor.addListener(page);     // Request
> notification when done
>                                 future = service.submit(executor); //
> Begin execution
>                                 progressBarUpdater.start(ajax, executor);
> // Start polling for progress
>
>                         } catch (final Exception ex) {
>                                 throw new RuntimeException(ex);
>                         }
>                         service.shutdown();     // Terminate gracefully
> (VM probably
>                 }               //      won't exit if we fail to do this)
>         };
> }
>
> //----------------------------------------------------------------------------------------------
> /**
>    Observer Pattern method to let us know when the task is done so we can
> check how things went.
> */
> @Override public void executionComplete(final EnmCallableExecutor
> executor) {
>
>         try {
>                 if (!future.isCancelled()) {                            //
> Unless execution was canceled
>                         final ExecutorResult result = future.get();     //
> Get the outcome
>                         System.out.println(result);
>                         /*
>                          * TODO: Show success or error message
>                          */
>                 }
>         } catch (final Exception ex) {
>                 ex.printStackTrace();
>         }
> }
>
> The ProgessBarUpdater class has this method:
>
>
> //----------------------------------------------------------------------------------------------
> /**
>  * Displays the progress bar &amp; begins the polling. We don't start the
> polling until
>  * explicitly told to do, for efficiency purposes.
>  * @param ajax The Ajax request wrapper.
>  * @param reporter The object to query for progress data.
>  */
> public void start(final AjaxRequestTarget ajax, final ProgressReporter
> reporter) {
>
>         add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(2)) {
>                 private static final long serialVersionUID = 1L;
>
>                 @Override protected void onPostProcessTarget(final
> AjaxRequestTarget ajax) {
>
>                         final Progress progress = reporter.getProgress();
>                         final String script =                   // Build
> script to update
>                                 ProgressScript.build(progress);  //
> progress bar
>                         ajax.appendJavascript(script);
>                         if (progress == null) {                 // If
> operation is finished
>                                 final ProgressBarUpdater updater =
>                                         ProgressBarUpdater.this;
>                                 updater.remove(this);                   //
> Stop timer to prevent
>                                 ajax.addComponent(updater);  // pointless
> polling
>                         }
>                 }
>         });
>         ajax.addComponent(this);
> }
>
> The page also contains a Future object so we can check the result after
> the thread finishes:
>
>         private Future<ExecutorResult> future;
>
> __________________________________________
>
> Having said all that, here's the problem: When I click the page's button,
> Wicket throws this error:
>
>         Unable to serialize class: java.util.concurrent.FutureTask
>
> The FutureTask object, I believe, is coming from the service.submit call
> whose return value we store in our Future variable.
>
> Does anyone know how to get around this roadblock?
>
>
>
> **
>
> This email and any attachments may contain information that is
> confidential and/or privileged for the sole use of the intended recipient.
>  Any use, review, disclosure, copying, distribution or reliance by others,
> and any forwarding of this email or its contents, without the express
> permission of the sender is strictly prohibited by law.  If you are not
> the intended recipient, please contact the sender immediately, delete the
> e-mail and destroy all copies.
> **
> EMAIL DISCLAIMER This email message and its attachments are confidential
> and may also contain copyright or privileged material. If you are not the
> intended recipient, you may not forward the email or disclose or use the
> information contained in it. If you have received this email message in
> error, please advise the sender immediately by replying to this email and
> delete the message and any associated attachments. Any views, opinions,
> conclusions, advice or statements expressed in this email message are
> those of the individual sender and should not be relied upon as the
> considered view, opinion, conclusions, advice or statement of this company
> except where the sender expressly, and with authority, states them to be
> the considered view, opinion, conclusions, advice or statement of this
> company. Every care is taken but we recommend that you scan any
> attachments for viruses.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>
>
>
> **
>
> This email and any attachments may contain information that is
> confidential and/or privileged for the sole use of the intended recipient.
>  Any use, review, disclosure, copying, distribution or reliance by others,
> and any forwarding of this email or its contents, without the express
> permission of the sender is strictly prohibited by law.  If you are not the
> intended recipient, please contact the sender immediately, delete the
> e-mail and destroy all copies.
> **
>

Reply via email to