[seam-issues] [JBoss JIRA] Updated: (SEAMSERVLET-35) Calling session-scoped components from session initialized observer goes into infinite loop

Nicklas Karlsson (JIRA) jira-events at lists.jboss.org
Fri Apr 15 02:17:33 EDT 2011


     [ https://issues.jboss.org/browse/SEAMSERVLET-35?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Nicklas Karlsson updated SEAMSERVLET-35:
----------------------------------------

    Workaround Description: 
Use a flag and a request-scoped observer class

{code}

@RequestScoped
public class Observer
{
	@Inject
	Pinger pinger;

	private boolean handling;

	public void newSession(@Observes @Initialized HttpSession s)
	{
		if (!handling)
		{
			handling = true;
			pinger.ping();
		}
	}
}
{code}
               Description: 
Given a session scoped component
{code}
@SessionScoped
public class Pinger implements Serializable
{
	public void ping()
	{
	};
}
{code}
and a session initialized observer calling it
{code}
public class Observer
{
	@Inject
	Pinger pinger;

	public void newSession(@Observes @Initialized HttpSession s)
	{
		pinger.ping();
	}
}
{code}
We go off into an infinite loop. Since Pinger doesn't exist, it is created and placed in the session scoped beanstore, which creates a session and fires off the observer. I'm not sure why the session isn't considered created at this point. This is bordering on feature since I think the result would be the same if servlet listeners would be used. Perhaps this could be worked around int the event bridge somehow so that the firing would be prevented if we're already handling the session created event...



  was:
Given a session scoped component

@SessionScoped
public class Pinger implements Serializable
{
	public void ping()
	{
	};
}

and a session initialized observer calling it

public class Observer
{
	@Inject
	Pinger pinger;

	public void newSession(@Observes @Initialized HttpSession s)
	{
		pinger.ping();
	}
}

We go off into an infinite loop. Since Pinger doesn't exist, it is created and placed in the session scoped beanstore, which creates a session and fires off the observer. I'm not sure why the session isn't considered created at this point. This is bordering on feature since I think the result would be the same if servlet listeners would be used. Perhaps this could be worked around int the event bridge somehow so that the firing would be prevented if we're already handling the session created event...





> Calling session-scoped components from session initialized observer goes into infinite loop
> -------------------------------------------------------------------------------------------
>
>                 Key: SEAMSERVLET-35
>                 URL: https://issues.jboss.org/browse/SEAMSERVLET-35
>             Project: Seam Servlet
>          Issue Type: Bug
>          Components: Event Bridge
>    Affects Versions: 3.0.0.CR3
>            Reporter: Nicklas Karlsson
>
> Given a session scoped component
> {code}
> @SessionScoped
> public class Pinger implements Serializable
> {
> 	public void ping()
> 	{
> 	};
> }
> {code}
> and a session initialized observer calling it
> {code}
> public class Observer
> {
> 	@Inject
> 	Pinger pinger;
> 	public void newSession(@Observes @Initialized HttpSession s)
> 	{
> 		pinger.ping();
> 	}
> }
> {code}
> We go off into an infinite loop. Since Pinger doesn't exist, it is created and placed in the session scoped beanstore, which creates a session and fires off the observer. I'm not sure why the session isn't considered created at this point. This is bordering on feature since I think the result would be the same if servlet listeners would be used. Perhaps this could be worked around int the event bridge somehow so that the firing would be prevented if we're already handling the session created event...

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the seam-issues mailing list