[jboss-cvs] jboss-portal/core/src/main/org/jboss/portal/core/impl/model/instance ...

Julien Viet julien at jboss.com
Thu Aug 24 09:21:37 EDT 2006


  User: julien  
  Date: 06/08/24 09:21:37

  Modified:    core/src/main/org/jboss/portal/core/impl/model/instance 
                        PersistentInstanceContainer.java
  Log:
  updated the implementation of destroyClone to now destroy a list of ids and return the list of non destroyed ids. updated the InstanceContainer accordingly
  
  Revision  Changes    Path
  1.51      +51 -31    jboss-portal/core/src/main/org/jboss/portal/core/impl/model/instance/PersistentInstanceContainer.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: PersistentInstanceContainer.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-portal/core/src/main/org/jboss/portal/core/impl/model/instance/PersistentInstanceContainer.java,v
  retrieving revision 1.50
  retrieving revision 1.51
  diff -u -b -r1.50 -r1.51
  --- PersistentInstanceContainer.java	31 Jul 2006 19:29:48 -0000	1.50
  +++ PersistentInstanceContainer.java	24 Aug 2006 13:21:37 -0000	1.51
  @@ -35,6 +35,7 @@
   import org.jboss.portal.portlet.NoSuchPortletException;
   import org.jboss.portal.portlet.PortletInvoker;
   import org.jboss.portal.portlet.PortletInvokerException;
  +import org.jboss.portal.portlet.state.DestroyCloneFailure;
   import org.jboss.portal.security.PortalPermission;
   import org.jboss.portal.security.PortalPermissionCollection;
   import org.jboss.portal.security.PortalSecurityException;
  @@ -55,13 +56,15 @@
   import java.util.HashSet;
   import java.util.Iterator;
   import java.util.Set;
  +import java.util.List;
  +import java.util.ArrayList;
   
   /**
    * Instance Container that is persistent
    *
    * @author <a href="mailto:julien at jboss.org">Julien Viet</a>
    * @author Anil.Saldhana at jboss.org
  - * @version $Revision: 1.50 $
  + * @version $Revision: 1.51 $
    */
   public class PersistentInstanceContainer extends AbstractJBossService
      implements InstanceContainer, AuthorizationDomain, DomainConfigurator,
  @@ -243,48 +246,65 @@
         {
            throw new NoSuchInstanceException(id);
         }
  +      Set userInstances = instance.getUserInstances();
   
  -      // Destroy the user instances first
  -      for (Iterator i = instance.getUserInstances().iterator(); i.hasNext();)
  +      // Collect portlet ids to destroy
  +      StringBuffer destroyLog = new StringBuffer("About to destroy portlets for instance=").
  +         append(instance.getInstanceId()).
  +         append(" [");
  +      List toDestroy = new ArrayList(userInstances.size());
  +      for (Iterator i = userInstances.iterator(); i.hasNext();)
         {
            UserInstance userInstance = (UserInstance)i.next();
   
            // Destroy state
  -         try
  +         String userPortletId = userInstance.getPortletRef();
  +         toDestroy.add(userPortletId);
  +         destroyLog.append(userPortletId);
  +         if (i.hasNext())
            {
  -            portletInvoker.destroyClone(userInstance.portletRef);
  +            destroyLog.append(',');
            }
  -         catch (NoSuchPortletException e)
  -         {
  -            e.printStackTrace();
            }
  -         catch (InvokerUnavailableException e)
  +      if (instance.modifiable)
            {
  -            e.printStackTrace();
  +         // Destroy the state only if it is not a producer offered portlet
  +         String instancePortletId = instance.getPortletRef();
  +         toDestroy.add(instancePortletId);
  +         destroyLog.append(instancePortletId);
            }
  +      destroyLog.append(']');
  +      log.debug(destroyLog);
   
  -         // Remove it
  -         i.remove();
  -         userInstance.instance = null;
  -         session.delete(userInstance);
  -      }
  +      // Perform destruction
  +      List failures = portletInvoker.destroyClones(toDestroy);
   
  -      // Destroy the state only if it is not a producer offered portlet
  -      if (instance.modifiable)
  +      // Log failures if any
  +      if (failures.size() > 0)
         {
  -         String portletId = instance.getPortletRef();
  -         try
  +         StringBuffer failureLog = new StringBuffer("Some portlet were not properly destroyed for instance=").
  +            append(instance.getInstanceId()).
  +            append(" [");
  +         for (Iterator i = failures.iterator(); i.hasNext();)
            {
  -            portletInvoker.destroyClone(portletId);
  -         }
  -         catch (NoSuchPortletException e)
  +            DestroyCloneFailure failure = (DestroyCloneFailure)i.next();
  +            failureLog.append(failure.getPortletId());
  +            if (i.hasNext())
            {
  -            e.printStackTrace();
  +               failureLog.append(',');
            }
  -         catch (InvokerUnavailableException e)
  -         {
  -            e.printStackTrace();
            }
  +         failureLog.append(']');
  +         log.debug(failureLog);
  +      }
  +
  +      // Destroy the user instances
  +      for (Iterator i = userInstances.iterator(); i.hasNext();)
  +      {
  +         UserInstance userInstance = (UserInstance)i.next();
  +         i.remove();
  +         userInstance.instance = null;
  +         session.delete(userInstance);
         }
   
         // Delete instance
  
  
  



More information about the jboss-cvs-commits mailing list