even though it is session specific it still sets application threadlocal.

-igor

2009/8/30 Uwe Schäfer <u...@thomas-daily.de>:
>> Igor Vaynberg schrieb:
>
>>> map WicketSessionFilter in front of those servlets, you will get both
>>> Session.get() and Session.get().getApplication(), and
>>> Application.get()
>
> actually, (as the name implies), this is quite session centric. my current
> use case is web services where i don´t have a session.
>
> subclassing WicketFilter is not too easy as well, because it does not reveal
> the application reference (private, no getter).
>
> this makes me do nasty reflection tricks to get it, which - while it works -
> feels even much more dirty than using the singleton approach to get an
> application reference.
>
> any idea, how this could be done with a cleaner approach?
> or would
> WicketFilter: protected WebApplication getApplication()
> be an alternative?
>
> cu uwe
>
> ------- current nasty impl:
>
> �...@override
>    public void doFilter(final ServletRequest request, final ServletResponse
> response, final FilterChain chain)
>            throws IOException, ServletException    {
>        super.doFilter(request, response, new ModifiedChain(chain,
> getApplication()));
>    }
>
>    private Application getApplication()    {
>        // very very nasty
>        return (Application) getFieldValue(this, "webApplication");
>    }
>
>    public static Object getFieldValue(final Object obj, final String string)
>    {
>        // did i say nasty?
>        try        {
>            final Field declaredField =
> obj.getClass().getSuperclass().getDeclaredField(string);
>            declaredField.setAccessible(true);
>            return declaredField.get(obj);
>        }
>        catch (final Throwable e)        {
>            throw new RuntimeException(e);
>        }
>    }
> }
>
> class ModifiedChain implements FilterChain
> {
>    private FilterChain orgChain;
>    private final Application application;
>
>    public ModifiedChain(final FilterChain chain, final Application
> application)    {
>        this.orgChain = chain;
>        this.application = application;
>    }
>
>    public void doFilter(final ServletRequest request, final ServletResponse
> response) throws IOException,
>            ServletException    {
>        Application.set(this.application);
>        try        {
>            this.orgChain.doFilter(request, response);
>        }
>        finally        {
>            Application.unset();
>        }
>    }
>
> }
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org

Reply via email to