Author: julien(a)jboss.com
Date: 2007-03-21 20:20:28 -0400 (Wed, 21 Mar 2007)
New Revision: 6799
Added:
trunk/api/src/main/org/jboss/portal/api/event/PortalEventListener.java
trunk/api/src/main/org/jboss/portal/api/user/
trunk/api/src/main/org/jboss/portal/api/user/event/
trunk/api/src/main/org/jboss/portal/api/user/event/UserAuthenticationEvent.java
trunk/api/src/main/org/jboss/portal/api/user/event/UserEvent.java
trunk/api/src/main/org/jboss/portal/api/user/event/UserSessionEvent.java
trunk/api/src/main/org/jboss/portal/spi/runtime/
trunk/api/src/main/org/jboss/portal/spi/runtime/PortalRuntimeContext.java
trunk/api/src/main/org/jboss/portal/spi/runtime/PortalRuntimeObject.java
trunk/api/src/main/org/jboss/portal/spi/runtime/PortalSession.java
trunk/core-samples/src/main/org/jboss/portal/core/portlet/test/event/PortalEventListenerLogger.java
trunk/core/src/main/org/jboss/portal/core/event/user/
trunk/core/src/main/org/jboss/portal/core/event/user/UserEventBridge.java
trunk/core/src/main/org/jboss/portal/core/event/user/UserEventInterceptor.java
trunk/core/src/main/org/jboss/portal/core/impl/CoreRuntimeContext.java
trunk/core/src/main/org/jboss/portal/core/impl/CoreSession.java
Modified:
trunk/api/src/main/org/jboss/portal/api/event/PortalEvent.java
trunk/core-samples/src/resources/portal-samples-sar/META-INF/jboss-service.xml
trunk/core/src/main/org/jboss/portal/core/event/PortalEventListenerRegistry.java
trunk/core/src/main/org/jboss/portal/core/event/PortalEventListenerRegistryImpl.java
trunk/core/src/resources/portal-core-sar/META-INF/jboss-service.xml
trunk/core/src/resources/portal-server-war/WEB-INF/web.xml
trunk/widget/src/resources/widget-war/WEB-INF/web.xml
trunk/wsrp/src/main/org/jboss/portal/wsrp/servlet/ReleaseSessionsSessionListener.java
Log:
first shot for portal events
Modified: trunk/api/src/main/org/jboss/portal/api/event/PortalEvent.java
===================================================================
--- trunk/api/src/main/org/jboss/portal/api/event/PortalEvent.java 2007-03-21 21:26:54 UTC
(rev 6798)
+++ trunk/api/src/main/org/jboss/portal/api/event/PortalEvent.java 2007-03-22 00:20:28 UTC
(rev 6799)
@@ -22,6 +22,8 @@
******************************************************************************/
package org.jboss.portal.api.event;
+import org.jboss.portal.spi.runtime.PortalRuntimeContext;
+
/**
* Base event class for portal events.
*
@@ -30,4 +32,17 @@
*/
public abstract class PortalEvent
{
+
+ /** . */
+ protected PortalRuntimeContext runtimeContext;
+
+ protected PortalEvent(PortalRuntimeContext runtimeContext)
+ {
+ this.runtimeContext = runtimeContext;
+ }
+
+ public PortalRuntimeContext getRuntimeContext()
+ {
+ return runtimeContext;
+ }
}
Added: trunk/api/src/main/org/jboss/portal/api/event/PortalEventListener.java
===================================================================
--- trunk/api/src/main/org/jboss/portal/api/event/PortalEventListener.java
(rev 0)
+++ trunk/api/src/main/org/jboss/portal/api/event/PortalEventListener.java 2007-03-22
00:20:28 UTC (rev 6799)
@@ -0,0 +1,32 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, 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.jboss.portal.api.event;
+
+/**
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 1.1 $
+ */
+public interface PortalEventListener
+{
+ void onEvent(PortalEvent event);
+}
Added: trunk/api/src/main/org/jboss/portal/api/user/event/UserAuthenticationEvent.java
===================================================================
--- trunk/api/src/main/org/jboss/portal/api/user/event/UserAuthenticationEvent.java
(rev 0)
+++
trunk/api/src/main/org/jboss/portal/api/user/event/UserAuthenticationEvent.java 2007-03-22
00:20:28 UTC (rev 6799)
@@ -0,0 +1,67 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, 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.jboss.portal.api.user.event;
+
+import org.jboss.portal.spi.runtime.PortalRuntimeContext;
+
+/**
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 1.1 $
+ */
+public class UserAuthenticationEvent extends UserEvent
+{
+
+ public static final int SIGN_IN = 0;
+
+ public static final int SIGN_OUT = 1;
+
+ private final int type;
+
+
+ public UserAuthenticationEvent(PortalRuntimeContext runtimeContext, String userId, int
type)
+ {
+ super(runtimeContext, userId);
+
+ //
+ if (runtimeContext == null)
+ {
+ throw new IllegalArgumentException("Need a runtime context for this kind of
event");
+ }
+ if (userId == null)
+ {
+ throw new IllegalArgumentException("No user id provided");
+ }
+ if (type < SIGN_IN || type > SIGN_OUT)
+ {
+ throw new IllegalArgumentException("Wrong event type");
+ }
+
+ //
+ this.type = type;
+ }
+
+ public int getType()
+ {
+ return type;
+ }
+}
Added: trunk/api/src/main/org/jboss/portal/api/user/event/UserEvent.java
===================================================================
--- trunk/api/src/main/org/jboss/portal/api/user/event/UserEvent.java
(rev 0)
+++ trunk/api/src/main/org/jboss/portal/api/user/event/UserEvent.java 2007-03-22 00:20:28
UTC (rev 6799)
@@ -0,0 +1,48 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, 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.jboss.portal.api.user.event;
+
+import org.jboss.portal.api.event.PortalEvent;
+import org.jboss.portal.spi.runtime.PortalRuntimeContext;
+
+/**
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 1.1 $
+ */
+public abstract class UserEvent extends PortalEvent
+{
+
+ /** The user id or null if the user is anonymous. */
+ protected final String userId;
+
+ public UserEvent(PortalRuntimeContext runtimeContext, String userId)
+ {
+ super(runtimeContext);
+ this.userId = userId;
+ }
+
+ public String getUserId()
+ {
+ return userId;
+ }
+}
Added: trunk/api/src/main/org/jboss/portal/api/user/event/UserSessionEvent.java
===================================================================
--- trunk/api/src/main/org/jboss/portal/api/user/event/UserSessionEvent.java
(rev 0)
+++ trunk/api/src/main/org/jboss/portal/api/user/event/UserSessionEvent.java 2007-03-22
00:20:28 UTC (rev 6799)
@@ -0,0 +1,62 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, 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.jboss.portal.api.user.event;
+
+import org.jboss.portal.spi.runtime.PortalRuntimeContext;
+
+/**
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 1.1 $
+ */
+public class UserSessionEvent extends UserEvent
+{
+
+ public static final int SESSION_CREATED = 0;
+
+ public static final int SESSION_DESTROYED = 1;
+
+ private final int type;
+
+ public UserSessionEvent(PortalRuntimeContext runtimeContext, String userId, int type)
+ {
+ super(runtimeContext, userId);
+
+ //
+ if (runtimeContext == null)
+ {
+ throw new IllegalArgumentException("Need a runtime context for this kind of
event");
+ }
+ if (type < SESSION_CREATED || type > SESSION_DESTROYED)
+ {
+ throw new IllegalArgumentException("Wrong event type");
+ }
+
+ //
+ this.type = type;
+ }
+
+ public int getType()
+ {
+ return type;
+ }
+}
Added: trunk/api/src/main/org/jboss/portal/spi/runtime/PortalRuntimeContext.java
===================================================================
--- trunk/api/src/main/org/jboss/portal/spi/runtime/PortalRuntimeContext.java
(rev 0)
+++ trunk/api/src/main/org/jboss/portal/spi/runtime/PortalRuntimeContext.java 2007-03-22
00:20:28 UTC (rev 6799)
@@ -0,0 +1,44 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, 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.jboss.portal.spi.runtime;
+
+/**
+ * The portal runtime context.
+ *
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 1.1 $
+ */
+public interface PortalRuntimeContext
+{
+ /**
+ * Return the user id or null if no user is associated with the context.
+ *
+ * @return the user id
+ */
+ String getUserId();
+
+ /**
+ * Return the portal session or null if no session is associated with the client.
+ */
+ PortalSession getSession();
+}
Added: trunk/api/src/main/org/jboss/portal/spi/runtime/PortalRuntimeObject.java
===================================================================
--- trunk/api/src/main/org/jboss/portal/spi/runtime/PortalRuntimeObject.java
(rev 0)
+++ trunk/api/src/main/org/jboss/portal/spi/runtime/PortalRuntimeObject.java 2007-03-22
00:20:28 UTC (rev 6799)
@@ -0,0 +1,32 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, 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.jboss.portal.spi.runtime;
+
+/**
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 1.1 $
+ */
+public interface PortalRuntimeObject
+{
+ PortalRuntimeContext getRuntimeContext();
+}
Added: trunk/api/src/main/org/jboss/portal/spi/runtime/PortalSession.java
===================================================================
--- trunk/api/src/main/org/jboss/portal/spi/runtime/PortalSession.java
(rev 0)
+++ trunk/api/src/main/org/jboss/portal/spi/runtime/PortalSession.java 2007-03-22 00:20:28
UTC (rev 6799)
@@ -0,0 +1,42 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, 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.jboss.portal.spi.runtime;
+
+/**
+ * The portal session.
+ *
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 1.1 $
+ */
+public interface PortalSession
+{
+
+ String getId();
+
+ Object getAttribute(String name);
+
+ void setAttribute(String name, Object attribute);
+
+ void removeAttribute(String name);
+
+}
Modified:
trunk/core/src/main/org/jboss/portal/core/event/PortalEventListenerRegistry.java
===================================================================
---
trunk/core/src/main/org/jboss/portal/core/event/PortalEventListenerRegistry.java 2007-03-21
21:26:54 UTC (rev 6798)
+++
trunk/core/src/main/org/jboss/portal/core/event/PortalEventListenerRegistry.java 2007-03-22
00:20:28 UTC (rev 6799)
@@ -22,6 +22,8 @@
******************************************************************************/
package org.jboss.portal.core.event;
+import java.util.Collection;
+
/**
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
* @version $Revision$
@@ -42,4 +44,10 @@
*
*/
Object getListener(String id);
+
+
+ /**
+ *
+ */
+ Collection getListeners();
}
Modified:
trunk/core/src/main/org/jboss/portal/core/event/PortalEventListenerRegistryImpl.java
===================================================================
---
trunk/core/src/main/org/jboss/portal/core/event/PortalEventListenerRegistryImpl.java 2007-03-21
21:26:54 UTC (rev 6798)
+++
trunk/core/src/main/org/jboss/portal/core/event/PortalEventListenerRegistryImpl.java 2007-03-22
00:20:28 UTC (rev 6799)
@@ -23,9 +23,9 @@
package org.jboss.portal.core.event;
import org.jboss.portal.jems.as.system.AbstractJBossService;
+import org.jboss.portal.common.util.CopyOnWriteRegistry;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.Collection;
/**
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
@@ -35,39 +35,26 @@
{
/** . */
- protected Map listeners = new HashMap();
+ protected final CopyOnWriteRegistry listeners = new CopyOnWriteRegistry();
public void registerListener(String id, Object listener)
{
- synchronized (this)
- {
- if (listeners.containsKey(id))
- {
- throw new IllegalArgumentException("Listener already registered " +
id);
- }
- Map copy = new HashMap(listeners);
- copy.put(id, listener);
- listeners = copy;
- }
+ listeners.register(id, listener);
}
public void unregisterListener(String id)
{
- synchronized (this)
- {
- if (!listeners.containsKey(id))
- {
- throw new IllegalArgumentException("Listener is not registered " +
id);
- }
- Map copy = new HashMap(listeners);
- copy.remove(id);
- listeners = copy;
- }
+ listeners.unregister(id);
}
-
public Object getListener(String id)
{
- return listeners.get(id);
+ return listeners.getRegistration(id);
}
+
+ public Collection getListeners()
+ {
+ return listeners.getRegistrations();
+ }
+
}
Added: trunk/core/src/main/org/jboss/portal/core/event/user/UserEventBridge.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/event/user/UserEventBridge.java
(rev 0)
+++ trunk/core/src/main/org/jboss/portal/core/event/user/UserEventBridge.java 2007-03-22
00:20:28 UTC (rev 6799)
@@ -0,0 +1,148 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, 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.jboss.portal.core.event.user;
+
+import org.jboss.portal.core.event.PortalEventListenerRegistry;
+import org.jboss.portal.core.impl.CoreRuntimeContext;
+import org.jboss.portal.core.impl.CoreSession;
+import org.jboss.portal.api.user.event.UserSessionEvent;
+import org.jboss.portal.api.user.event.UserAuthenticationEvent;
+import org.jboss.portal.api.event.PortalEvent;
+import org.jboss.portal.api.event.PortalEventListener;
+import org.jboss.mx.util.MBeanProxy;
+import org.jboss.mx.util.ObjectNameFactory;
+import org.jboss.mx.util.MBeanServerLocator;
+import org.jboss.mx.util.MBeanProxyCreationException;
+
+import javax.servlet.http.HttpSessionListener;
+import javax.servlet.http.HttpSessionAttributeListener;
+import javax.servlet.http.HttpSessionEvent;
+import javax.servlet.http.HttpSessionBindingEvent;
+import javax.servlet.ServletContextListener;
+import javax.servlet.ServletContextEvent;
+import java.util.Iterator;
+
+/**
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 1.1 $
+ */
+public class UserEventBridge implements HttpSessionListener, ServletContextListener,
HttpSessionAttributeListener
+{
+
+ /** . */
+ private PortalEventListenerRegistry listenerRegistry;
+
+ // ServletContextListener implementation
****************************************************************************
+
+ public void contextInitialized(ServletContextEvent event)
+ {
+ try
+ {
+ listenerRegistry =
(PortalEventListenerRegistry)MBeanProxy.get(PortalEventListenerRegistry.class,
ObjectNameFactory.create("portal:service=ListenerRegistry"),
MBeanServerLocator.locateJBoss());
+ }
+ catch (MBeanProxyCreationException e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ public void contextDestroyed(ServletContextEvent event)
+ {
+ listenerRegistry = null;
+ }
+
+ // HttpSessionListener implementation
*******************************************************************************
+
+ public void sessionCreated(HttpSessionEvent event)
+ {
+ CoreRuntimeContext rt = new CoreRuntimeContext();
+ rt.setSession(new CoreSession(event.getSession()));
+
+ //
+ UserSessionEvent use = new UserSessionEvent(rt, null,
UserSessionEvent.SESSION_CREATED);
+ fireEvent(use);
+ }
+
+ public void sessionDestroyed(HttpSessionEvent event)
+ {
+ CoreRuntimeContext rt = new CoreRuntimeContext();
+ rt.setSession(new CoreSession(event.getSession()));
+
+ //
+ UserSessionEvent use = new UserSessionEvent(rt, null,
UserSessionEvent.SESSION_DESTROYED);
+ fireEvent(use);
+ }
+
+ // HttpSessionAttributeListener implementation
**********************************************************************
+
+
+ public void attributeAdded(HttpSessionBindingEvent event)
+ {
+ if ("PRINCIPAL_TOKEN".equals(event.getName()))
+ {
+ String userId = (String)event.getValue();
+ CoreRuntimeContext rt = new CoreRuntimeContext();
+ rt.setSession(new CoreSession(event.getSession()));
+ rt.setUserId(userId);
+ UserAuthenticationEvent uae = new UserAuthenticationEvent(rt, userId,
UserAuthenticationEvent.SIGN_IN);
+ fireEvent(uae);
+ }
+ }
+
+ public void attributeRemoved(HttpSessionBindingEvent event)
+ {
+ if ("PRINCIPAL_TOKEN".equals(event.getName()))
+ {
+ String userId = (String)event.getValue();
+ CoreRuntimeContext rt = new CoreRuntimeContext();
+ rt.setSession(new CoreSession(event.getSession()));
+ rt.setUserId(userId);
+ UserAuthenticationEvent uae = new UserAuthenticationEvent(rt, userId,
UserAuthenticationEvent.SIGN_OUT);
+ fireEvent(uae);
+ }
+ }
+
+ public void attributeReplaced(HttpSessionBindingEvent event)
+ {
+ }
+
+ private void fireEvent(PortalEvent event)
+ {
+ for (Iterator i = listenerRegistry.getListeners().iterator();i.hasNext();)
+ {
+ Object o = i.next();
+ if (o instanceof PortalEventListener)
+ {
+ PortalEventListener listener = (PortalEventListener)o;
+ try
+ {
+ listener.onEvent(event);
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+}
Added: trunk/core/src/main/org/jboss/portal/core/event/user/UserEventInterceptor.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/event/user/UserEventInterceptor.java
(rev 0)
+++
trunk/core/src/main/org/jboss/portal/core/event/user/UserEventInterceptor.java 2007-03-22
00:20:28 UTC (rev 6799)
@@ -0,0 +1,65 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, 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.jboss.portal.core.event.user;
+
+import org.jboss.portal.server.ServerInterceptor;
+import org.jboss.portal.server.ServerInvocation;
+import org.jboss.portal.common.invocation.InvocationException;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import java.security.Principal;
+
+/**
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 1.1 $
+ */
+public class UserEventInterceptor extends ServerInterceptor
+{
+ protected void invoke(ServerInvocation invocation) throws Exception,
InvocationException
+ {
+ HttpServletRequest req = invocation.getServerContext().getClientRequest();
+ HttpSession session = req.getSession(false);
+ if (session != null)
+ {
+ Principal userPrincipal = req.getUserPrincipal();
+ if (userPrincipal != null)
+ {
+ if (session.getAttribute("PRINCIPAL_TOKEN") == null)
+ {
+ session.setAttribute("PRINCIPAL_TOKEN",
userPrincipal.getName());
+ }
+ }
+ else
+ {
+ if (session.getAttribute("PRINCIPAL_TOKEN") != null)
+ {
+ session.removeAttribute("PRINCIPAL_TOKEN");
+ }
+ }
+ }
+
+ //
+ invocation.invokeNext();
+ }
+}
Added: trunk/core/src/main/org/jboss/portal/core/impl/CoreRuntimeContext.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/impl/CoreRuntimeContext.java
(rev 0)
+++ trunk/core/src/main/org/jboss/portal/core/impl/CoreRuntimeContext.java 2007-03-22
00:20:28 UTC (rev 6799)
@@ -0,0 +1,60 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, 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.jboss.portal.core.impl;
+
+import org.jboss.portal.spi.runtime.PortalRuntimeContext;
+import org.jboss.portal.spi.runtime.PortalSession;
+
+/**
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 1.1 $
+ */
+public class CoreRuntimeContext implements PortalRuntimeContext
+{
+
+ /** . */
+ private PortalSession session;
+
+ /** . */
+ private String userId;
+
+ public String getUserId()
+ {
+ return null;
+ }
+
+ public void setUserId(String userId)
+ {
+ this.userId = userId;
+ }
+
+ public PortalSession getSession()
+ {
+ return session;
+ }
+
+ public void setSession(PortalSession session)
+ {
+ this.session = session;
+ }
+}
Added: trunk/core/src/main/org/jboss/portal/core/impl/CoreSession.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/impl/CoreSession.java
(rev 0)
+++ trunk/core/src/main/org/jboss/portal/core/impl/CoreSession.java 2007-03-22 00:20:28
UTC (rev 6799)
@@ -0,0 +1,79 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, 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.jboss.portal.core.impl;
+
+import org.jboss.portal.spi.runtime.PortalSession;
+
+import javax.servlet.http.HttpSession;
+
+/**
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 1.1 $
+ */
+public class CoreSession implements PortalSession
+{
+
+ /** . */
+ private HttpSession session;
+
+ public CoreSession(HttpSession session)
+ {
+ if (session == null)
+ {
+ throw new IllegalArgumentException();
+ }
+ this.session = session;
+ }
+
+ public String getId()
+ {
+ return session.getId();
+ }
+
+ public Object getAttribute(String name)
+ {
+ if (name == null)
+ {
+ throw new IllegalArgumentException();
+ }
+ return session.getAttribute("blah." + name);
+ }
+
+ public void setAttribute(String name, Object attribute)
+ {
+ if (name == null)
+ {
+ throw new IllegalArgumentException();
+ }
+ session.setAttribute("blah." + name, attribute);
+ }
+
+ public void removeAttribute(String name)
+ {
+ if (name == null)
+ {
+ throw new IllegalArgumentException();
+ }
+ session.removeAttribute("blah." + name);
+ }
+}
Modified: trunk/core/src/resources/portal-core-sar/META-INF/jboss-service.xml
===================================================================
--- trunk/core/src/resources/portal-core-sar/META-INF/jboss-service.xml 2007-03-21
21:26:54 UTC (rev 6798)
+++ trunk/core/src/resources/portal-core-sar/META-INF/jboss-service.xml 2007-03-22
00:20:28 UTC (rev 6799)
@@ -101,6 +101,13 @@
<xmbean/>
</mbean>
<mbean
+ code="org.jboss.portal.core.event.user.UserEventInterceptor"
+ name="portal:service=Interceptor,type=Server,name=UserEvent"
+ xmbean-dd=""
+ xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
+ <xmbean/>
+ </mbean>
+ <mbean
code="org.jboss.portal.server.aspects.server.SessionInvalidatorInterceptor"
name="portal:service=Interceptor,type=Server,name=SessionInvalidator"
xmbean-dd=""
@@ -138,6 +145,7 @@
<xmbean/>
<depends-list optional-attribute-name="InterceptorNames">
<depends-list-element>portal:service=Interceptor,type=Server,name=Transaction</depends-list-element>
+
<depends-list-element>portal:service=Interceptor,type=Server,name=UserEvent</depends-list-element>
<depends-list-element>portal:service=Interceptor,type=Server,name=SessionInvalidator</depends-list-element>
<depends-list-element>portal:service=Interceptor,type=Server,name=User</depends-list-element>
<depends-list-element>portal:service=Interceptor,type=Server,name=Locale</depends-list-element>
Modified: trunk/core/src/resources/portal-server-war/WEB-INF/web.xml
===================================================================
--- trunk/core/src/resources/portal-server-war/WEB-INF/web.xml 2007-03-21 21:26:54 UTC
(rev 6798)
+++ trunk/core/src/resources/portal-server-war/WEB-INF/web.xml 2007-03-22 00:20:28 UTC
(rev 6799)
@@ -31,6 +31,11 @@
<distributable/>
@portal.web.postdistributable@-->
+ <!-- Bridge portal user events -->
+ <listener>
+
<listener-class>org.jboss.portal.core.event.user.UserEventBridge</listener-class>
+ </listener>
+
<!-- The portal servlet is the main entrance point -->
<servlet>
<servlet-name>PortalServletWithPathMapping</servlet-name>
Added:
trunk/core-samples/src/main/org/jboss/portal/core/portlet/test/event/PortalEventListenerLogger.java
===================================================================
---
trunk/core-samples/src/main/org/jboss/portal/core/portlet/test/event/PortalEventListenerLogger.java
(rev 0)
+++
trunk/core-samples/src/main/org/jboss/portal/core/portlet/test/event/PortalEventListenerLogger.java 2007-03-22
00:20:28 UTC (rev 6799)
@@ -0,0 +1,53 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, 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.jboss.portal.core.portlet.test.event;
+
+import org.jboss.portal.api.event.PortalEventListener;
+import org.jboss.portal.api.event.PortalEvent;
+import org.jboss.portal.api.user.event.UserSessionEvent;
+import org.jboss.portal.api.user.event.UserAuthenticationEvent;
+
+/**
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 1.1 $
+ */
+public class PortalEventListenerLogger implements PortalEventListener
+{
+ public void onEvent(PortalEvent event)
+ {
+ if (event instanceof UserSessionEvent)
+ {
+ UserSessionEvent use = (UserSessionEvent)event;
+ System.out.println(use.getType() == UserSessionEvent.SESSION_CREATED ?
"session created" : "session destroyed");
+ }
+ else if (event instanceof UserAuthenticationEvent)
+ {
+ UserAuthenticationEvent uae = (UserAuthenticationEvent)event;
+ System.out.println(uae.getType() == UserAuthenticationEvent.SIGN_IN ? "user
login" : "user logout");
+ }
+ else
+ {
+ System.out.println("event = " + event);
+ }
+ }
+}
Modified: trunk/core-samples/src/resources/portal-samples-sar/META-INF/jboss-service.xml
===================================================================
---
trunk/core-samples/src/resources/portal-samples-sar/META-INF/jboss-service.xml 2007-03-21
21:26:54 UTC (rev 6798)
+++
trunk/core-samples/src/resources/portal-samples-sar/META-INF/jboss-service.xml 2007-03-22
00:20:28 UTC (rev 6799)
@@ -49,5 +49,17 @@
<attribute
name="RegistryId">window_event_listener</attribute>
<attribute
name="ListenerClassName">org.jboss.portal.core.portlet.test.event.WindowConstraintEventListener</attribute>
</mbean>
+ <mbean
+ code="org.jboss.portal.core.event.PortalEventListenerServiceImpl"
+ name="portal:service=ListenerService,type=user_listener"
+ xmbean-dd=""
+ xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
+ <xmbean/>
+ <depends
+ optional-attribute-name="Registry"
+
proxy-type="attribute">portal:service=ListenerRegistry</depends>
+ <attribute name="RegistryId">user_listener</attribute>
+ <attribute
name="ListenerClassName">org.jboss.portal.core.portlet.test.event.PortalEventListenerLogger</attribute>
+ </mbean>
</server>
Modified: trunk/widget/src/resources/widget-war/WEB-INF/web.xml
===================================================================
--- trunk/widget/src/resources/widget-war/WEB-INF/web.xml 2007-03-21 21:26:54 UTC (rev
6798)
+++ trunk/widget/src/resources/widget-war/WEB-INF/web.xml 2007-03-22 00:20:28 UTC (rev
6799)
@@ -36,6 +36,6 @@
<param-value>GoogleWidgetPortletInstance</param-value>
</context-param>
<listener>
-
<listener-class>org.jboss.portal.core.servlet.jsp.ContentTypeRegistration</listener-class>
+
<listener-class>org.jboss.portlet.content.ContentTypeRegistration</listener-class>
</listener>
</web-app>
Modified:
trunk/wsrp/src/main/org/jboss/portal/wsrp/servlet/ReleaseSessionsSessionListener.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/wsrp/servlet/ReleaseSessionsSessionListener.java 2007-03-21
21:26:54 UTC (rev 6798)
+++
trunk/wsrp/src/main/org/jboss/portal/wsrp/servlet/ReleaseSessionsSessionListener.java 2007-03-22
00:20:28 UTC (rev 6799)
@@ -23,7 +23,7 @@
package org.jboss.portal.wsrp.servlet;
-import org.jboss.portal.core.event.SessionEventListenerRegistry;
+// import org.jboss.portal.core.event.SessionEventListenerRegistry;
import org.jboss.portal.wsrp.consumer.ProducerSessionInformation;
import org.jboss.portal.wsrp.handler.RequestHeaderClientHandler;
@@ -68,11 +68,11 @@
public void start()
{
- SessionEventListenerRegistry.registerListener(ID, this);
+// SessionEventListenerRegistry.registerListener(ID, this);
}
public void stop()
{
- SessionEventListenerRegistry.unregisterListener(ID);
+// SessionEventListenerRegistry.unregisterListener(ID);
}
}