From do-not-reply at jboss.org Tue Aug 31 16:20:03 2010 Content-Type: multipart/mixed; boundary="===============5688513857349940433==" MIME-Version: 1.0 From: do-not-reply at jboss.org To: gatein-commits at lists.jboss.org Subject: [gatein-commits] gatein SVN: r3987 - portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp. Date: Tue, 31 Aug 2010 16:20:03 -0400 Message-ID: <201008312020.o7VKK3ba010217@svn01.web.mwc.hst.phx2.redhat.com> --===============5688513857349940433== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Author: chris.laprun(a)jboss.com Date: 2010-08-31 16:20:03 -0400 (Tue, 31 Aug 2010) New Revision: 3987 Added: portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/Session= EventListenerAndBroadcaster.java Modified: portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/WSRPSer= viceIntegration.java Log: - GTNPORTAL-1452, GTNWSRP-65: Use ListenerService to register SessionEventL= istenerAndBroadcaster for session creation and destruction events. Added: portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/Ses= sionEventListenerAndBroadcaster.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/Sessio= nEventListenerAndBroadcaster.java (rev 0) +++ portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/Sessio= nEventListenerAndBroadcaster.java 2010-08-31 20:20:03 UTC (rev 3987) @@ -0,0 +1,109 @@ +/* + * JBoss, a division of Red Hat + * Copyright 2010, Red Hat Middleware, LLC, and individual + * contributors as indicated by the @authors tag. See the + * copyright.txt in the distribution for a full listing of + * individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ + +package org.gatein.portal.wsrp; + +import org.exoplatform.container.PortalContainer; +import org.exoplatform.services.listener.Event; +import org.exoplatform.services.listener.Listener; +import org.gatein.wsrp.api.SessionEvent; +import org.gatein.wsrp.api.SessionEventBroadcaster; +import org.gatein.wsrp.api.SessionEventListener; + +import javax.servlet.http.HttpSession; +import javax.servlet.http.HttpSessionEvent; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @author Chris Laprun + * @version $Revision$ + */ +public class SessionEventListenerAndBroadcaster extends Listener implements SessionEventBroadcaster +{ + private Map listeners =3D new ConcurrentH= ashMap(); + private static final String SESSION_CREATED =3D "org.exoplatform.web.Ge= nericHttpListener.sessionCreated"; + private static final String SESSION_DESTROYED =3D "org.exoplatform.web.= GenericHttpListener.sessionDestroyed"; + + public void registerListener(String listenerId, SessionEventListener li= stener) + { + listeners.put(listenerId, listener); + } + + public void unregisterListener(String listenerId) + { + listeners.remove(listenerId); + } + + public void notifyListenersOf(SessionEvent event) + { + for (SessionEventListener listener : listeners.values()) + { + listener.onSessionEvent(event); + } + } + + @Override + public void onEvent(Event event) thr= ows Exception + { + String eventName =3D event.getEventName(); + SessionEvent.SessionEventType eventType; + if (SESSION_CREATED.equals(eventName)) + { + eventType =3D SessionEvent.SessionEventType.SESSION_CREATED; + } + else if (SESSION_DESTROYED.equals(eventName)) + { + eventType =3D SessionEvent.SessionEventType.SESSION_DESTROYED; + } + else + { + // do nothing + return; + } + + notifyListenersOf(new SimpleSessionEvent(eventType, event.getData().= getSession())); + } + + private static class SimpleSessionEvent implements SessionEvent + { + private SessionEventType eventType; + private HttpSession session; + + private SimpleSessionEvent(SessionEventType eventType, HttpSession s= ession) + { + this.eventType =3D eventType; + this.session =3D session; + } + + public SessionEventType getType() + { + return eventType; + } + + public HttpSession getSession() + { + return session; + } + } +} Modified: portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/= WSRPServiceIntegration.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/WSRPSe= rviceIntegration.java 2010-08-31 20:15:12 UTC (rev 3986) +++ portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/WSRPSe= rviceIntegration.java 2010-08-31 20:20:03 UTC (rev 3987) @@ -28,6 +28,7 @@ import org.exoplatform.container.configuration.ConfigurationManager; import org.exoplatform.container.xml.InitParams; import org.exoplatform.services.jcr.ext.hierarchy.NodeHierarchyCreator; +import org.exoplatform.services.listener.ListenerService; import org.gatein.common.logging.Logger; import org.gatein.common.logging.LoggerFactory; import org.gatein.pc.api.PortletInvoker; @@ -53,9 +54,6 @@ import org.gatein.wci.WebAppListener; import org.gatein.wci.impl.DefaultServletContainerFactory; import org.gatein.wsrp.WSRPConstants; -import org.gatein.wsrp.api.SessionEvent; -import org.gatein.wsrp.api.SessionEventBroadcaster; -import org.gatein.wsrp.api.SessionEventListener; import org.gatein.wsrp.consumer.registry.ActivatingNullInvokerHandler; import org.gatein.wsrp.consumer.registry.ConsumerRegistry; import org.gatein.wsrp.producer.ProducerHolder; @@ -65,8 +63,6 @@ = import javax.servlet.ServletContext; import java.io.InputStream; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; = /** * @author Chris Laprun @@ -218,11 +214,19 @@ FederatingPortletInvoker federatingPortletInvoker =3D (FederatingPortletInvoker)container.getComponentInstanceOfType(Po= rtletInvoker.class); = + // add our Session event listener to the ListenerService for use in = org.exoplatform.web.GenericHttpListener + ListenerService listenerService =3D (ListenerService)container.getCo= mponentInstanceOfType(ListenerService.class); + SessionEventListenerAndBroadcaster sessionEventBroadcaster =3D new S= essionEventListenerAndBroadcaster(); + sessionEventBroadcaster.setName("org.exoplatform.web.GenericHttpList= ener.sessionCreated"); + listenerService.addListener(sessionEventBroadcaster); + sessionEventBroadcaster.setName("org.exoplatform.web.GenericHttpList= ener.sessionDestroyed"); + listenerService.addListener(sessionEventBroadcaster); + try { consumerRegistry =3D new JCRConsumerRegistry(container); consumerRegistry.setFederatingPortletInvoker(federatingPortletInv= oker); - consumerRegistry.setSessionEventBroadcaster(new SimpleSessionEven= tBroadcaster()); + consumerRegistry.setSessionEventBroadcaster(sessionEventBroadcast= er); consumerRegistry.start(); = // set up a NullInvokerHandler so that when a remote producer is = queried, we can start it if needed @@ -298,27 +302,4 @@ } } = - private static class SimpleSessionEventBroadcaster implements SessionEv= entBroadcaster - { - private Map listeners =3D new Concurre= ntHashMap(); - - public void registerListener(String listenerId, SessionEventListener= listener) - { - listeners.put(listenerId, listener); - } - - public void unregisterListener(String listenerId) - { - listeners.remove(listenerId); - } - - public void notifyListenersOf(SessionEvent event) - { - for (SessionEventListener listener : listeners.values()) - { - listener.onSessionEvent(event); - } - } - - } -} +} \ No newline at end of file --===============5688513857349940433==--