[gatein-commits] gatein SVN: r2648 - in portal/trunk: web/portal/src/main/webapp/WEB-INF and 4 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Thu Apr 15 04:11:29 EDT 2010


Author: hoang_to
Date: 2010-04-15 04:11:28 -0400 (Thu, 15 Apr 2010)
New Revision: 2648

Added:
   portal/trunk/component/web/src/main/java/org/exoplatform/web/application/RequestFailure.java
   portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/concurrent/
   portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/concurrent/PortalConcurrencyMonitorLifecycle.java
Modified:
   portal/trunk/component/web/src/main/java/org/exoplatform/web/application/ApplicationLifecycle.java
   portal/trunk/web/portal/src/main/webapp/WEB-INF/webui-configuration.xml
   portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/MonitorApplicationLifecycle.java
   portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/portlet/PortletApplicationLifecycle.java
   portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalApplicationLifecycle.java
   portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestHandler.java
   portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalStatisticLifecycle.java
   portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortletStatisticLifecycle.java
   portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/UserProfileLifecycle.java
   portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/UserSiteLifeCycle.java
Log:
GTNPORTAL-558: Issue when editing resources concurrently

Modified: portal/trunk/component/web/src/main/java/org/exoplatform/web/application/ApplicationLifecycle.java
===================================================================
--- portal/trunk/component/web/src/main/java/org/exoplatform/web/application/ApplicationLifecycle.java	2010-04-15 06:28:24 UTC (rev 2647)
+++ portal/trunk/component/web/src/main/java/org/exoplatform/web/application/ApplicationLifecycle.java	2010-04-15 08:11:28 UTC (rev 2648)
@@ -32,8 +32,10 @@
 
    public void onStartRequest(Application app, E context) throws Exception;
 
+   public void onFailRequest(Application app, E context, RequestFailure failureType) throws Exception;
+   
    public void onEndRequest(Application app, E context) throws Exception;
-
+   
    public void onDestroy(Application app) throws Exception;
 
 }

Added: portal/trunk/component/web/src/main/java/org/exoplatform/web/application/RequestFailure.java
===================================================================
--- portal/trunk/component/web/src/main/java/org/exoplatform/web/application/RequestFailure.java	                        (rev 0)
+++ portal/trunk/component/web/src/main/java/org/exoplatform/web/application/RequestFailure.java	2010-04-15 08:11:28 UTC (rev 2648)
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2010 eXo Platform SAS.
+ *
+ * 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.exoplatform.web.application;
+
+/**
+ * @author <a href="mailto:hoang281283 at gmail.com">Minh Hoang TO</a>
+ * @version $Id$
+ *
+ */
+public enum RequestFailure {
+
+   IO_FAILURE, CONCURRENCY_FAILURE
+}

Modified: portal/trunk/web/portal/src/main/webapp/WEB-INF/webui-configuration.xml
===================================================================
--- portal/trunk/web/portal/src/main/webapp/WEB-INF/webui-configuration.xml	2010-04-15 06:28:24 UTC (rev 2647)
+++ portal/trunk/web/portal/src/main/webapp/WEB-INF/webui-configuration.xml	2010-04-15 08:11:28 UTC (rev 2648)
@@ -37,6 +37,7 @@
       <listener>org.exoplatform.portal.application.PortalApplicationLifecycle</listener>
       <listener>org.exoplatform.webui.application.MonitorApplicationLifecycle</listener>
       <listener>org.exoplatform.portal.application.UserProfileLifecycle</listener>
+      <listener>org.exoplatform.portal.application.concurrent.PortalConcurrencyMonitorLifecycle</listener>
     </application-lifecycle-listeners>
 
     <events>

Modified: portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/MonitorApplicationLifecycle.java
===================================================================
--- portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/MonitorApplicationLifecycle.java	2010-04-15 06:28:24 UTC (rev 2647)
+++ portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/MonitorApplicationLifecycle.java	2010-04-15 08:11:28 UTC (rev 2648)
@@ -21,6 +21,7 @@
 
 import org.exoplatform.web.application.Application;
 import org.exoplatform.web.application.ApplicationLifecycle;
+import org.exoplatform.web.application.RequestFailure;
 import org.exoplatform.webui.event.MonitorEvent;
 
 /**
@@ -58,6 +59,12 @@
       event.setStartExecutionTime(System.currentTimeMillis());
       rcontext.setAttribute(MonitorEvent.PORTAL_EXECUTION_LIFECYCLE_EVENT, event);
    }
+   
+   @SuppressWarnings("unchecked")
+   public void onFailRequest(Application app, WebuiRequestContext rcontext, RequestFailure failureType) throws Exception
+   {
+      
+   }
 
    @SuppressWarnings("unchecked")
    public void onEndRequest(Application app, WebuiRequestContext rcontext) throws Exception

Modified: portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/portlet/PortletApplicationLifecycle.java
===================================================================
--- portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/portlet/PortletApplicationLifecycle.java	2010-04-15 06:28:24 UTC (rev 2647)
+++ portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/portlet/PortletApplicationLifecycle.java	2010-04-15 08:11:28 UTC (rev 2648)
@@ -21,6 +21,7 @@
 
 import org.exoplatform.web.application.Application;
 import org.exoplatform.web.application.ApplicationLifecycle;
+import org.exoplatform.web.application.RequestFailure;
 import org.exoplatform.webui.application.WebuiRequestContext;
 
 public class PortletApplicationLifecycle implements ApplicationLifecycle<WebuiRequestContext>
@@ -39,6 +40,12 @@
    }
 
    @SuppressWarnings("unused")
+   public void onFailRequest(Application app, WebuiRequestContext rcontext, RequestFailure failureType) throws Exception
+   {
+      
+   }
+   
+   @SuppressWarnings("unused")
    public void onEndRequest(Application app, WebuiRequestContext context) throws Exception
    {
    }

Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalApplicationLifecycle.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalApplicationLifecycle.java	2010-04-15 06:28:24 UTC (rev 2647)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalApplicationLifecycle.java	2010-04-15 08:11:28 UTC (rev 2648)
@@ -25,6 +25,7 @@
 import org.exoplatform.container.SessionManagerContainer;
 import org.exoplatform.web.application.Application;
 import org.exoplatform.web.application.ApplicationLifecycle;
+import org.exoplatform.web.application.RequestFailure;
 import org.exoplatform.webui.application.WebuiRequestContext;
 
 public class PortalApplicationLifecycle implements ApplicationLifecycle<WebuiRequestContext>
@@ -42,6 +43,12 @@
       SessionContainer.setInstance(((SessionManagerContainer)pcontainer).getSessionManager().getSessionContainer(
          rcontext.getSessionId()));
    }
+   
+   @SuppressWarnings("unused")
+   public void onFailRequest(Application app, WebuiRequestContext rontext, RequestFailure failureType) throws Exception
+   {
+      
+   }
 
    @SuppressWarnings("unused")
    public void onEndRequest(Application app, WebuiRequestContext rcontext) throws Exception

Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestHandler.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestHandler.java	2010-04-15 06:28:24 UTC (rev 2647)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestHandler.java	2010-04-15 08:11:28 UTC (rev 2648)
@@ -20,11 +20,13 @@
 package org.exoplatform.portal.application;
 
 import org.exoplatform.commons.utils.Safe;
+import org.exoplatform.portal.config.StaleModelException;
 import org.exoplatform.services.log.ExoLogger;
 import org.exoplatform.services.log.Log;
 import org.exoplatform.web.WebAppController;
 import org.exoplatform.web.WebRequestHandler;
 import org.exoplatform.web.application.ApplicationLifecycle;
+import org.exoplatform.web.application.RequestFailure;
 import org.exoplatform.webui.application.WebuiRequestContext;
 import org.exoplatform.webui.core.UIApplication;
 
@@ -114,10 +116,20 @@
          // Store ui root
          app.getStateManager().storeUIRootComponent(context);
       }
-      catch (Exception ex)
+      catch (StaleModelException staleModelEx)
       {
-         log.error("Error while handling request", ex);
+         // Minh Hoang TO:
+         //At the moment, this catch block is never reached, as the StaleModelException is intercepted temporarily 
+         //in UI-related code
+         for(ApplicationLifecycle lifecycle : lifecycles)
+         {
+            lifecycle.onFailRequest(app, context, RequestFailure.CONCURRENCY_FAILURE);
+         }
       }
+      catch (Exception NonStaleModelEx)
+      {
+         log.error("Error while handling request", NonStaleModelEx);
+      }
       finally
       {
 

Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalStatisticLifecycle.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalStatisticLifecycle.java	2010-04-15 06:28:24 UTC (rev 2647)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalStatisticLifecycle.java	2010-04-15 08:11:28 UTC (rev 2648)
@@ -22,6 +22,7 @@
 import org.exoplatform.container.PortalContainer;
 import org.exoplatform.web.application.Application;
 import org.exoplatform.web.application.ApplicationLifecycle;
+import org.exoplatform.web.application.RequestFailure;
 import org.exoplatform.webui.application.WebuiRequestContext;
 
 public class PortalStatisticLifecycle implements ApplicationLifecycle<WebuiRequestContext>
@@ -41,6 +42,12 @@
    }
 
    @SuppressWarnings("unused")
+   public void onFailRequest(Application app, WebuiRequestContext rcontext, RequestFailure failureType) throws Exception
+   {
+      
+   }
+   
+   @SuppressWarnings("unused")
    public void onEndRequest(Application app, WebuiRequestContext rcontext) throws Exception
    {
       PortalStatisticService service =

Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortletStatisticLifecycle.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortletStatisticLifecycle.java	2010-04-15 06:28:24 UTC (rev 2647)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortletStatisticLifecycle.java	2010-04-15 08:11:28 UTC (rev 2648)
@@ -21,6 +21,7 @@
 
 import org.exoplatform.web.application.Application;
 import org.exoplatform.web.application.ApplicationLifecycle;
+import org.exoplatform.web.application.RequestFailure;
 import org.exoplatform.webui.application.WebuiRequestContext;
 
 public class PortletStatisticLifecycle implements ApplicationLifecycle<WebuiRequestContext>
@@ -41,6 +42,12 @@
    }
 
    @SuppressWarnings("unused")
+   public void onFailRequest(Application app, WebuiRequestContext context, RequestFailure failureType) throws Exception
+   {
+      
+   }
+   
+   @SuppressWarnings("unused")
    public void onEndRequest(Application app, WebuiRequestContext context) throws Exception
    {
       ApplicationStatisticService service =

Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/UserProfileLifecycle.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/UserProfileLifecycle.java	2010-04-15 06:28:24 UTC (rev 2647)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/UserProfileLifecycle.java	2010-04-15 08:11:28 UTC (rev 2648)
@@ -24,6 +24,7 @@
 import org.exoplatform.services.organization.UserProfile;
 import org.exoplatform.web.application.Application;
 import org.exoplatform.web.application.ApplicationLifecycle;
+import org.exoplatform.web.application.RequestFailure;
 import org.exoplatform.webui.application.WebuiRequestContext;
 
 public class UserProfileLifecycle implements ApplicationLifecycle<WebuiRequestContext>
@@ -58,6 +59,12 @@
 	   currentUserProfile.set(userProfile);
 	   context.setAttribute(this.USER_PROFILE_ATTRIBUTE_NAME, userProfile);
    }
+   
+   @SuppressWarnings("unused")
+   public void onFailRequest(Application app, WebuiRequestContext context, RequestFailure failureType) throws Exception
+   {
+      
+   }
 
    @SuppressWarnings("unused")
    public void onEndRequest(Application app, WebuiRequestContext context) throws Exception

Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/UserSiteLifeCycle.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/UserSiteLifeCycle.java	2010-04-15 06:28:24 UTC (rev 2647)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/UserSiteLifeCycle.java	2010-04-15 08:11:28 UTC (rev 2648)
@@ -25,6 +25,7 @@
 import org.exoplatform.portal.config.model.PortalConfig;
 import org.exoplatform.web.application.Application;
 import org.exoplatform.web.application.ApplicationLifecycle;
+import org.exoplatform.web.application.RequestFailure;
 import org.gatein.common.logging.Logger;
 import org.gatein.common.logging.LoggerFactory;
 
@@ -59,6 +60,10 @@
          }
       }
    }
+   
+   public void onFailRequest(Application app, PortalRequestContext context, RequestFailure failureType) throws Exception
+   {
+   }
 
    public void onEndRequest(Application app, PortalRequestContext context) throws Exception
    {

Added: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/concurrent/PortalConcurrencyMonitorLifecycle.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/concurrent/PortalConcurrencyMonitorLifecycle.java	                        (rev 0)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/concurrent/PortalConcurrencyMonitorLifecycle.java	2010-04-15 08:11:28 UTC (rev 2648)
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2010 eXo Platform SAS.
+ *
+ * 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.exoplatform.portal.application.concurrent;
+
+import org.exoplatform.portal.application.PortalRequestContext;
+import org.exoplatform.portal.config.DataStorage;
+import org.exoplatform.portal.config.UserPortalConfig;
+import org.exoplatform.portal.config.model.PortalConfig;
+import org.exoplatform.portal.webui.page.UISiteBody;
+import org.exoplatform.portal.webui.portal.PageNodeEvent;
+import org.exoplatform.portal.webui.portal.UIPortal;
+import org.exoplatform.portal.webui.util.PortalDataMapper;
+import org.exoplatform.portal.webui.util.Util;
+import org.exoplatform.portal.webui.workspace.UIEditInlineWorkspace;
+import org.exoplatform.portal.webui.workspace.UIPortalApplication;
+import org.exoplatform.portal.webui.workspace.UIWorkingWorkspace;
+import org.exoplatform.web.application.Application;
+import org.exoplatform.web.application.ApplicationLifecycle;
+import org.exoplatform.web.application.JavascriptManager;
+import org.exoplatform.web.application.RequestFailure;
+import org.exoplatform.webui.event.Event;
+import org.gatein.common.logging.Logger;
+import org.gatein.common.logging.LoggerFactory;
+
+/**
+ * @author <a href="mailto:hoang281283 at gmail.com">Minh Hoang TO</a>
+ * @version $Id$
+ *
+ */
+public class PortalConcurrencyMonitorLifecycle implements ApplicationLifecycle<PortalRequestContext>
+{
+
+   private final Logger log = LoggerFactory.getLogger(PortalConcurrencyMonitorLifecycle.class);
+   
+   /**
+    * @see org.exoplatform.web.application.ApplicationLifecycle#onDestroy(org.exoplatform.web.application.Application)
+    */
+   public void onDestroy(Application app) throws Exception
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * @see org.exoplatform.web.application.ApplicationLifecycle#onEndRequest(org.exoplatform.web.application.Application, org.exoplatform.web.application.RequestContext)
+    */
+   public void onEndRequest(Application app, PortalRequestContext context) throws Exception
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * @see org.exoplatform.web.application.ApplicationLifecycle#onFailRequest(org.exoplatform.web.application.Application, org.exoplatform.web.application.RequestContext, org.exoplatform.web.application.RequestFailure)
+    */
+   public void onFailRequest(Application app, PortalRequestContext context, RequestFailure failureType) throws Exception
+   {
+      if(failureType == RequestFailure.CONCURRENCY_FAILURE)
+      {
+         //Concurrency-related handling should be put here in the future
+         log.error("Error in editing resources concurrently:  " + context.getRequestURI().toString());
+      }
+   }
+
+   /**
+    * @see org.exoplatform.web.application.ApplicationLifecycle#onInit(org.exoplatform.web.application.Application)
+    */
+   public void onInit(Application app) throws Exception
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * @see org.exoplatform.web.application.ApplicationLifecycle#onStartRequest(org.exoplatform.web.application.Application, org.exoplatform.web.application.RequestContext)
+    */
+   public void onStartRequest(Application app, PortalRequestContext context) throws Exception
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+}



More information about the gatein-commits mailing list