[gatein-commits] gatein SVN: r5173 - in portal/branches/branch-GTNPORTAL-1643: webui/portlet/src/main/java/org/exoplatform/webui/application/portlet and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Fri Nov 19 03:30:16 EST 2010


Author: hoang_to
Date: 2010-11-19 03:30:15 -0500 (Fri, 19 Nov 2010)
New Revision: 5173

Modified:
   portal/branches/branch-GTNPORTAL-1643/component/web/controller/src/main/java/org/exoplatform/web/WebAppController.java
   portal/branches/branch-GTNPORTAL-1643/webui/portlet/src/main/java/org/exoplatform/webui/application/portlet/PortletApplicationController.java
Log:
Add double-check pattern on registering Application, back port from EXOGTN

Modified: portal/branches/branch-GTNPORTAL-1643/component/web/controller/src/main/java/org/exoplatform/web/WebAppController.java
===================================================================
--- portal/branches/branch-GTNPORTAL-1643/component/web/controller/src/main/java/org/exoplatform/web/WebAppController.java	2010-11-19 07:33:26 UTC (rev 5172)
+++ portal/branches/branch-GTNPORTAL-1643/component/web/controller/src/main/java/org/exoplatform/web/WebAppController.java	2010-11-19 08:30:15 UTC (rev 5173)
@@ -49,7 +49,7 @@
 
    private HashMap<String, Object> attributes_;
 
-   private HashMap<String, Application> applications_;
+   private volatile HashMap<String, Application> applications_;
 
    private HashMap<String, WebRequestHandler> handlers_;
 
@@ -89,16 +89,42 @@
       return applications;
    }
 
-   public void removeApplication(String appId)
+   public synchronized void removeApplication(String appId)
    {
       applications_.remove(appId);
    }
 
-   public void addApplication(Application app)
+   /**
+    *   Add application (portlet, gadget) to the global application map if and only if it has
+    * not been registered yet.
+    * 
+    * @param <T>
+    * @param app
+    * @return
+    */
+   public <T extends Application> T addApplication(T app)
    {
-      applications_.put(app.getApplicationId(), app);
+      Application result = getApplication(app.getApplicationId());
+      
+      //Double-check block
+      if(result == null)
+      {
+         synchronized(this)
+         {
+            result = getApplication(app.getApplicationId());
+            if(result == null)
+            {
+               HashMap<String, Application> temporalApplicationsMap = new HashMap<String, Application>(applications_);
+               temporalApplicationsMap.put(app.getApplicationId(), app);
+               this.applications_ = temporalApplicationsMap;
+               result = app;
+            }
+         }
+      }
+      
+      return (T)result;
    }
-
+   
    public void register(WebRequestHandler handler) throws Exception
    {
       for (String path : handler.getPath())

Modified: portal/branches/branch-GTNPORTAL-1643/webui/portlet/src/main/java/org/exoplatform/webui/application/portlet/PortletApplicationController.java
===================================================================
--- portal/branches/branch-GTNPORTAL-1643/webui/portlet/src/main/java/org/exoplatform/webui/application/portlet/PortletApplicationController.java	2010-11-19 07:33:26 UTC (rev 5172)
+++ portal/branches/branch-GTNPORTAL-1643/webui/portlet/src/main/java/org/exoplatform/webui/application/portlet/PortletApplicationController.java	2010-11-19 08:30:15 UTC (rev 5173)
@@ -133,7 +133,7 @@
       {
          application = new PortletApplication(getPortletConfig());
          application.onInit();
-         controller.addApplication(application);
+         application = controller.addApplication(application);
       }
       return application;
    }



More information about the gatein-commits mailing list