Re: Render a component in a background thread.
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. 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: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: Render a component in a background thread.
On Fri, May 29, 2015 at 9:22 AM, Christoph Läubrich lae...@googlemail.com 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=25fn1=Description+Containsfn2=Date+%5Bmonth+year%5Dfv2=2015+1+1tab=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: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org -- Peter Henderson Director Starjar Ltd. www.starjar.com 0330 088 1662
Re: Render a component in a background thread.
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 peter.hender...@starjar.com wrote: On Fri, May 29, 2015 at 9:22 AM, Christoph Läubrich lae...@googlemail.com mailto:lae...@googlemail.com 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=25fn1=Description+Containsfn2=Date+%5Bmonth+year%5Dfv2=2015+1+1tab=Time+Sheets https://demo.starjar.com:25000/Starjar/protected/project/1210005?rpp=25fn1=Description+Containsfn2=Date+%5Bmonth+year%5Dfv2=2015+1+1tab=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: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org -- Peter Henderson Director Starjar Ltd. www.starjar.com http://www.starjar.com/ 0330 088 1662
Render a component in a background thread.
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 -- Peter Henderson
Re: Render a component in a background thread.
Hi, I was going to say that you can use ComponentRenderer for this but looking at its source [1] I see that we create temporary RequestCycle only for #renderPage() but not for #renderComponent(). Also there is no way to use Application#get(name). Please file a ticket for improvement. In the meantime you can roll your own class by reusing code. Martin Grigorov Wicket Training and Consulting https://twitter.com/mtgrigorov On Thu, May 28, 2015 at 12:51 PM, Peter Henderson peter.hender...@starjar.com wrote: 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 -- Peter Henderson