[jboss-user] [JBoss Seam] - Re: Using Seam for porlet communication

jarkko@jab.fi do-not-reply at jboss.com
Thu Sep 21 04:09:13 EDT 2006


This allows intra/inter portlet to portlet communication inside Seam. Basically everything that goes to Session scope is also put to both PORTLET_SCOPE(portlet private, only the portlet putting has access to it) and APPLICATION_SCOPE (portal wide, every portlet inside portal sees it). A more elegant/resource wise solution might be better, but it is not actually trivial without adding new configuration options.

/*
  |  * JBoss, Home of Professional Open Source
  |  *
  |  * Distributable under LGPL license.
  |  * See terms of license at gnu.org.
  |  */
  | package org.jboss.seam.portlet;
  | 
  | import java.util.Collections;
  | import java.util.Enumeration;
  | import java.util.List;
  | 
  | import javax.portlet.PortletSession;
  | 
  | import org.apache.commons.collections.ListUtils;
  | import org.jboss.seam.contexts.ContextAdaptor;
  | 
  | /**
  |  * @author <a href="mailto:theute at jboss.org">Thomas Heute </a>
  |  * @version $Revision: 1.4 $
  |  */
  | public class PortletSessionImpl extends ContextAdaptor {
  | 
  | 	private PortletSession session;
  | 
  | 	public PortletSessionImpl(PortletSession session) {
  | 		this.session = session;
  | 	}
  | 
  | 	public Object getAttribute(String key) {
  | 		// search for key first in PORTLET_SCOPE
  | 		Object o = session.getAttribute(key);
  | 		Object po = null;
  | 		// if nothing is found there try APPLICATION_SCOPE
  | 		if (o == null) {
  | 			po = session.getAttribute(key, PortletSession.APPLICATION_SCOPE);
  | 			return po;
  | 		} else {
  | 			// TODO: just do some cleaning up or maybe not
  | 			// session.removeAttribute(key, PortletSession.APPLICATION_SCOPE);
  | 		}
  | 
  | 		return o;
  | 	}
  | 
  | 	public void removeAttribute(String key) {
  | 		session.removeAttribute(key);
  | 		session.removeAttribute(key, PortletSession.APPLICATION_SCOPE);
  | 	}
  | 
  | 	public Enumeration getAttributeNames() {
  | 		Enumeration portletAttributeNamesEnum = session.getAttributeNames();
  | 		Enumeration portalAttributeNamesEnum = session
  | 				.getAttributeNames(PortletSession.APPLICATION_SCOPE);
  | 
  | 		List portletAttributeNames = Collections
  | 				.list(portletAttributeNamesEnum);
  | 		List portalAttributeNames = Collections.list(portalAttributeNamesEnum);
  | 
  | 		// TODO: Is this correct?
  | 		List allNames = ListUtils.sum(portalAttributeNames,
  | 				portalAttributeNames);
  | 
  | 		return Collections.enumeration(allNames);
  | 	}
  | 
  | 	public void setAttribute(String key, Object value) {
  | 		session.setAttribute(key, value);
  | 		session.setAttribute(key, value, PortletSession.APPLICATION_SCOPE);
  | 	}
  | 
  | 	public void invalidate() {
  | 		session.invalidate();
  | 	}
  | 
  | }
  | 

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3973176#3973176

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3973176



More information about the jboss-user mailing list