@InjectPage annotation can leak page instances from one locale to another
-------------------------------------------------------------------------
Key: TAP5-1585
URL: https://issues.apache.org/jira/browse/TAP5-1585
Project: Tapestry 5
Issue Type: Bug
Components: tapestry-core
Affects Versions: 5.3, 5.2
Reporter: Howard M. Lewis Ship
Noticed this code:
private final class InjectedPageConduit extends ReadOnlyFieldValueConduit
{
private final String injectedPageName;
private Object page;
private InjectedPageConduit(ComponentResources resources, String
fieldName,
String injectedPageName)
{
super(resources, fieldName);
this.injectedPageName = injectedPageName;
resources.addPageLifecycleListener(new PageLifecycleAdapter()
{
@Override
public void containingPageDidDetach()
{
page = null;
}
});
}
public Object get(Object instance, InstanceContext context)
{
if (page == null)
page = componentSource.getPage(injectedPageName);
return page;
}
Basically, what we have here is a field per instance storing the page ... this
should go in a PerThreadValue. As currently coded, there will be windows where
a page in one locale will have a page in some other locale injected into it
since the single field is injected across locale (and, in 5.3,
ComponentResourceSelector axis').
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira