From your description of the problem, it doesn’t really seem like you need a
renderer — perhaps abstracting out the search criterion as a pure java
(non-wicket-specific) object that can be used both in the UI and in data export
would be a better approach.
That said, here’s what I’m doing to render pages (batch emails) in a background
thread:
public static void sendMail(EmailBatch batch) {
Application app = ThreadContext.getApplication();
RequestCycle requestCycle = ThreadContext.getRequestCycle();
Session session = ThreadContext.getSession();
Runnable r = () -> {
ThreadContext.setApplication(app);
ThreadContext.setRequestCycle(requestCycle);
ThreadContext.setSession(session);
<blah blah blah>
ComponentRenderer.renderPage(new
PageProvider(EmailMergeProcessor.class, pp)
There are some restrictions on what the pages can contain (for example, I had
to disable bootstrap), but eventually I got the above to work. Your mileage
may vary. Good luck.
-Don
> On May 29, 2015, at 1:49 AM, Peter Henderson <[email protected]>
> wrote:
>
> On Fri, May 29, 2015 at 9:22 AM, Christoph Läubrich <[email protected]
> <mailto:[email protected]>>
> wrote:
>
>> Can you explain what is the reason for using a background-thread?
>> Depending on your container you might want to use e.g. Continuations or
>> Servlet-Async to compute lengthy values in the background and then let
>> render the page as normal in the RequestCycle depending on that result.
>>
>>
> In my real application the background thread is a data export routine. I
> want to run a list panel with saved page parameters and instead of
> rendering the html I'll access the underlying list model to extract the
> data, export to csv (or json,etc) and pass it out for other processing.
> This way the user can fiddle about with the search filters on the list to
> see exactly what they want and later get the raw data (accountants love
> spreadsheets).
>
> For example.
> This page [1] I'd like to have a plain servlet which can run the component
> outside of wicket.
>
>
> Peter.
>
>
>
> [1]
> https://demo.starjar.com:25000/Starjar/protected/project/1210005?rpp=25&fn1=Description+Contains&fn2=Date+%5Bmonth+year%5D&fv2=2015+1+1&tab=Time+Sheets
>
> <https://demo.starjar.com:25000/Starjar/protected/project/1210005?rpp=25&fn1=Description+Contains&fn2=Date+%5Bmonth+year%5D&fv2=2015+1+1&tab=Time+Sheets>
>
>
>
>> Am 28.05.2015 11:51, schrieb Peter Henderson:
>>
>>> Hi
>>>
>>> I am trying to render a component in a background thread.
>>>
>>> My first attempt fails with an Exception
>>> "There is no application attached to current thread Thread-4"
>>>
>>>
>>>
>>> So I link the application with the background thread and now a different
>>> exception.
>>> java.lang.IllegalArgumentException: Argument 'requestCycle' may not be
>>> null.
>>> at org.apache.wicket.util.lang.Args.notNull(Args.java:41)
>>> at
>>>
>>> org.apache.wicket.Application.fetchCreateAndSetSession(Application.java:1568)
>>> at org.apache.wicket.Session.get(Session.java:171)
>>>
>>>
>>> Is component renderer designed to work from a background thread?
>>>
>>>
>>> I've put a quick start on git hub.
>>> https://github.com/bollinger/wicket-ComponentRenderer
>>>
>>>
>>>
>>>
>>>
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>>
>
>
> --
> Peter Henderson
>
> Director
> Starjar Ltd.
> www.starjar.com <http://www.starjar.com/>
> 0330 088 1662