[jbossseam-issues] [JBoss JIRA] Commented: (JBSEAM-2082) JMS Topic subscriptions never released

Scott McNab (JIRA) jira-events at lists.jboss.org
Wed Jun 3 01:56:56 EDT 2009


    [ https://jira.jboss.org/jira/browse/JBSEAM-2082?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12470338#action_12470338 ] 

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

        



More information about the seam-issues mailing list