sessions are serialised

François Meillet
Formation Wicket - Développement Wicket





Le 6 mai 2014 à 15:28, Richard W. Adams <rwada...@up.com> a écrit :

> One more question: Since each task is associated with a single user, would 
> it make more sense to create a task map in Session scope? Or will Wicket 
> try to serialize a map we put into the session?
> 
> 
> 
> 
> From:   Martin Grigorov <mgrigo...@apache.org>
> To:     "users@wicket.apache.org" <users@wicket.apache.org>
> Date:   05/06/2014 08:06 AM
> Subject:        Re: Application Scope
> 
> 
> 
> Please don't change the thread subject for all your answers. This confuses
> the threading support in some mail clients.
> 
> I meant *My*Application, i.e. *Your*Application.
> Add this method and map/associate all tasks that your run to some id/key.
> Serialize the key and later get a reference to the FutureTask with
> something like:
> YourApp.get().getTasks().get(theKey).isDone()/.isCanceled()/...
> 
> Martin Grigorov
> Wicket Training and Consulting
> 
> 
> On Tue, May 6, 2014 at 2:50 PM, Richard W. Adams <rwada...@up.com> wrote:
> 
>> Are you referring to org.apache.wicket.Application? I don't see a
>> getTasksMap() method there.  We use Wicket 1.4.17 & our company will not
>> allow us to upgrade to newer versions). If getTasksMap() is unavailable 
> in
>> 1.4.17, could Application.getSharedResources() be used in a similar way?
>> 
>> 
>> 
>> 
>> From:   Martin Grigorov <mgrigo...@apache.org>
>> To:     "users@wicket.apache.org" <users@wicket.apache.org>
>> Date:   05/06/2014 07:26 AM
>> Subject:        Re: Background Threading
>> 
>> 
>> 
>> 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.
>>> **
>>> 
>> 
>> 
>> 
>> **
>> 
>> 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.
>> **
>> 
> 
> 
> 
> **
> 
> 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