You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Ville Virtanen <vi...@cerion.fi> on 2008/10/06 13:17:16 UTC
Re: NPE when trying to contribute ServletContextSymbolProvider to
SymbolSource (WAS: Re: Page pool hard limit and page instance usage)
I have no new info on this, and I think we should add ticket to get this
sorted. (If it is something we do wrong -> correct the documentation or then
it is a bug that needs a fix anyway.)
Currently I'm just fetching the values from context by hand.
The reason behind this however is likely to be the order in which the
services are started: it doesn't require much effort to create situation
where for an example symbol provider is needed to contribute an alias, but
the alias service is needed to create the symbol provider... The end result
would be exactly the message we've been receiving, and unfortunately there
is no easy way around this afaik. Also it seems that this error comes deep
from Tapestry because the services are so fundamental to Tapestry, although
the recursive cycle is due to my own services.
I'm just happy that I have problems only reading context variables that are
very limited in number ;)
Don't know if this is the case here though.
Francois Armand wrote:
>
> 9902468 wrote:
>> This is starting to look more and more like Jira issue? Any new info on
>> this?
>>
>
> Hello guys,
>
> I encounter almost the same error when I try to access ApplicationState
> service from a RequestFilter. Do you have any new on that topic ? Did
> you open a ticket on the subject ?
>
> Thanks,
>
> --
> Francois Armand
> Etudes & Développements J2EE
> Groupe Linagora - http://www.linagora.com
> Tél.: +33 (0)1 58 18 68 28
> -----------
> InterLDAP - http://interldap.org
> FederID - http://www.federid.org/
> Open Source identities management and federation
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>
>
--
View this message in context: http://www.nabble.com/Re%3A-NPE-when-trying-to-contribute-ServletContextSymbolProvider-to---SymbolSource-%28WAS%3A-Re%3A-Page-pool-hard-limit-and-page-instance-usage%29-tp19609348p19835994.html
Sent from the Tapestry - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: NPE when trying to contribute ServletContextSymbolProvider to
SymbolSource (WAS: Re: Page pool hard limit and page instance usage)
Posted by Inge Solvoll <in...@gmail.com>.
Actually, it didn't work. Still getting the Alias recursion error when
injecting ServletContextProvider spring bean into my SymbolProvider. Isn't
that a bit strange?? Also, server startup success including my
SymbolProvider seems pretty random.
When I remove references to ServletContext through my Spring bean and use
MyClass.class.getResourceAsStream, it seems to work. But I can't be sure, it
seems to crash randomly so far...
On Fri, Aug 28, 2009 at 2:00 PM, Inge Solvoll <in...@gmail.com>wrote:
> That actually did the trick. Just create the simple spring bean listed
> below, and inject it instead of ApplicationGlobals into your SymbolSource.
>
> import javax.servlet.ServletContext;
>
> import org.springframework.web.context.ServletContextAware;
>
> public class ServletContextProvider implements ServletContextAware {
>
> private ServletContext servletContext;
>
>
> public ServletContext getServletContext() {
> return servletContext;
> }
>
>
> public void setServletContext(ServletContext servletContext) {
> this.servletContext = servletContext;
>
> }
> }
>
>
> On Fri, Aug 28, 2009 at 1:45 PM, Inge Solvoll <in...@gmail.com>wrote:
>
>> This last post didn't help in my attempt at trying to use
>> ApplicationGlobals.getServletContext() in my SymbolSource implementation.
>> But could this help? I will try it out
>>
>> http://forum.springsource.org/showthread.php?t=39927
>>
>>
>> On Tue, Oct 7, 2008 at 4:54 PM, Francois Armand <fa...@linagora.com>wrote:
>>
>>> Ville Virtanen wrote:
>>>
>>>> I have no new info on this, and I think we should add ticket to get this
>>>> sorted. (If it is something we do wrong -> correct the documentation or
>>>> then
>>>> it is a bug that needs a fix anyway.)
>>>>
>>>>
>>> I search forward and find a solution that works for me, I hope it may
>>> help you too :
>>>
>>> http://markmail.org/search/?q=list%3Aorg.apache.tapestry.users+problem+injecting#query:list%3Aorg.apache.tapestry.usersproblem injecting+page:1+mid:lnvawscuxr44aasv+state:results
>>>
>>> So, basically, the problem is that the Tapestry Request and Response
>>> object are saved in RequestGlobal object only in the Terminator of the
>>> RequestHandler pipeline. But the ApplicationStateManager, and perhaps other
>>> services, tries to access to the (T5) Request thanks to
>>> RequestGlobal#getRequest(), which is null : we did not reach the terminator
>>> yet.
>>>
>>> So, I just created a RequestHandler that does the same thing that the
>>> terminator (requestGlobals.storeRequestResponse(request, response)) and
>>> contribute it before all other RequestHandler.
>>>
>>> I believe that we may have the same problem with HttpRequestHandler, as
>>> the RequestGlobal#storeServletRequestResponse is called in theterminator of
>>> HttpRequestHandler pipeline.
>>>
>>> Hope it will help you.
>>>
>>> ============
>>> The code (copy&paste from the other email (save you a click) :
>>>
>>> public static RequestFilter buildSetRequestResponse(final RequestGlobals
>>> requestGlobals) {
>>> return new RequestFilter(){
>>> public boolean service(Request request, Response response,
>>> RequestHandler handler) throws IOException {
>>> requestGlobals.storeRequestResponse(request, response);
>>> return handler.service(request, response);
>>> }
>>> };
>>> }
>>>
>>> public static void
>>> contributeRequestHandler(OrderedConfiguration<RequestFilter> configuration,
>>> @InjectService("setRequestResponse") RequestFilter
>>> setRequestResponse,
>>> .... (other handlers)) {
>>> configuration.add("setRequestResponse", setRequestResponse,
>>> "before:*");
>>> ...
>>>
>>> }
>>>
>>>
>>>
>>>
>>> --
>>> Francois Armand
>>> Etudes & Développements J2EE
>>> Groupe Linagora - http://www.linagora.com
>>> Tél.: +33 (0)1 58 18 68 28
>>> -----------
>>> InterLDAP - http://interldap.org FederID - http://www.federid.org/
>>> Open Source identities management and federation
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>>> For additional commands, e-mail: users-help@tapestry.apache.org
>>>
>>>
>>
>
Re: NPE when trying to contribute ServletContextSymbolProvider to
SymbolSource (WAS: Re: Page pool hard limit and page instance usage)
Posted by Francois Armand <fa...@linagora.com>.
Ville Virtanen wrote:
> I have no new info on this, and I think we should add ticket to get this
> sorted. (If it is something we do wrong -> correct the documentation or then
> it is a bug that needs a fix anyway.)
>
I search forward and find a solution that works for me, I hope it may
help you too :
http://markmail.org/search/?q=list%3Aorg.apache.tapestry.users+problem+injecting#query:list%3Aorg.apache.tapestry.users
problem injecting+page:1+mid:lnvawscuxr44aasv+state:results
So, basically, the problem is that the Tapestry Request and Response
object are saved in RequestGlobal object only in the Terminator of the
RequestHandler pipeline. But the ApplicationStateManager, and perhaps
other services, tries to access to the (T5) Request thanks to
RequestGlobal#getRequest(), which is null : we did not reach the
terminator yet.
So, I just created a RequestHandler that does the same thing that the
terminator (requestGlobals.storeRequestResponse(request, response)) and
contribute it before all other RequestHandler.
I believe that we may have the same problem with HttpRequestHandler, as
the RequestGlobal#storeServletRequestResponse is called in theterminator
of HttpRequestHandler pipeline.
Hope it will help you.
============
The code (copy&paste from the other email (save you a click) :
public static RequestFilter buildSetRequestResponse(final
RequestGlobals requestGlobals) {
return new RequestFilter(){
public boolean service(Request request, Response response,
RequestHandler handler) throws IOException {
requestGlobals.storeRequestResponse(request, response);
return handler.service(request, response);
}
};
}
public static void
contributeRequestHandler(OrderedConfiguration<RequestFilter> configuration,
@InjectService("setRequestResponse") RequestFilter
setRequestResponse,
.... (other handlers)) {
configuration.add("setRequestResponse", setRequestResponse,
"before:*");
...
}
--
Francois Armand
Etudes & Développements J2EE
Groupe Linagora - http://www.linagora.com
Tél.: +33 (0)1 58 18 68 28
-----------
InterLDAP - http://interldap.org
FederID - http://www.federid.org/
Open Source identities management and federation
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org