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;
}
Show replies by date