[
https://jira.jboss.org/jira/browse/JBSEAM-2082?page=com.atlassian.jira.pl...
]
Scott McNab commented on JBSEAM-2082:
-------------------------------------
How are you going with applying this patch? If it helps, we have also implemented this fix
for Seam 1.2.1.GA.
The example custom SeamListener implementation for Seam 1.2.1.GA is as follows:
public class CustomSeamListener extends SeamListener {
@Override
public void sessionDestroyed(HttpSessionEvent event) {
// Fake a HttpServletRequest that unsubscribes all the tokens associated
with this session
HttpServletRequest request = new
MockHttpServletRequest(event.getSession());
HttpSession session = event.getSession();
ServletContext servletContext = session.getServletContext();
Lifecycle.setPhaseId(PhaseId.INVOKE_APPLICATION);
Lifecycle.setServletRequest(request);
Lifecycle.setServletContext(servletContext);
Lifecycle.beginRequest(servletContext, session, request);
SubscriptionRegistry subRegistry = SubscriptionRegistry.instance();
// Take a copy of the token list so we don't modify the list as we are
iterating
Set<String> tokenSet = new HashSet<String>();
tokenSet.addAll(subRegistry.getUserTokens());
for (String token : tokenSet) {
RemoteSubscriber subscriber = subRegistry.getSubscription(token);
subscriber.unsubscribe();
}
Lifecycle.endRequest();
Lifecycle.setServletRequest(null);
Lifecycle.setPhaseId(null);
// Call the normal SeamListener implementation
super.sessionDestroyed(event);
}
}
JMS Topic subscriptions never released
--------------------------------------
Key: JBSEAM-2082
URL:
https://jira.jboss.org/jira/browse/JBSEAM-2082
Project: Seam
Issue Type: Bug
Components: Remoting
Affects Versions: 1.2.0.GA, 1.2.1.GA, 2.0.0.CR1, 2.0.0.CR2, 2.0.0.CR3, 2.0.2.SP1
Environment: JBossAS 4.2.3.GA, All platforms.
Reporter: Scott McNab
Assignee: Shane Bryzak
In the current Seam remoting implementation, there is no mechanism to clean up and
release JMS topic subscriptions for clients that may have subscribed to a JMS topic, but
who do not explicitly unsubscribe() (e.g. due to a coding error or if the client simply
disappears)
Unless a web-client specifically calls Seam.Remoting.unsubscribe(), the RemoteSubscriber
object is never released, and the corresponding TopicSession and TopicSubscriber resources
will be held open indefinitely. This will cause the JMS provider to store an ever-growing
list of undelivered topic messages, which will eventually result in an out of memory
crash.
Seam Remoting needs to be able to correctly identify situations whereby a
RemoteSubscriber is no longer in use, and release resources accordingly.
One possible solution might be to periodically check all subscriptions in the
SubscriptionRegistry and release any which have not had a recent poll request beyond a
certain time limit.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira