[exo-jcr-commits] exo-jcr SVN: r445 - in kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container: definition and 1 other directory.
do-not-reply at jboss.org
do-not-reply at jboss.org
Thu Oct 29 17:54:44 EDT 2009
Author: nfilotto
Date: 2009-10-29 17:54:44 -0400 (Thu, 29 Oct 2009)
New Revision: 445
Modified:
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/PortalContainer.java
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/RootContainer.java
kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/definition/PortalContainerConfig.java
Log:
EXOJCR-166: Support separated ear delivery
* The PortalContainerContext must not be used as context of a init task
* PortalContainer.getInstance(ServletContext) could return a bad value if the PortalContainer set in the ThreadLocal was not cleaned properly
* We ensure that the PortalContainer set in the ThreadLocal has been set properly
Modified: kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/PortalContainer.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/PortalContainer.java 2009-10-29 16:49:03 UTC (rev 444)
+++ kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/PortalContainer.java 2009-10-29 21:54:44 UTC (rev 445)
@@ -319,7 +319,7 @@
*/
public static PortalContainer getInstance()
{
- PortalContainer container = (PortalContainer)currentContainer_.get();
+ PortalContainer container = getInstanceIfPresent();
if (container == null)
{
container = RootContainer.getInstance().getPortalContainer(DEFAULT_PORTAL_CONTAINER_NAME);
@@ -334,7 +334,27 @@
*/
public static PortalContainer getInstanceIfPresent()
{
- return currentContainer_.get();
+ PortalContainer pc = currentContainer_.get();
+ if (pc != null)
+ {
+ ExoContainer container = ExoContainerContext.getCurrentContainerIfPresent();
+ if (container != pc)
+ {
+ // Clean the value of currentContainer_ since it should be equals to
+ // ExoContainerContext.getCurrentContainerIfPresent()
+ if (container instanceof PortalContainer)
+ {
+ // The current container is a PortalContainer, this value will replace the old one
+ currentContainer_.set(pc = (PortalContainer)container);
+ }
+ else
+ {
+ // The current container is not a PortalContainer, the old value must be removed
+ currentContainer_.set(pc = null);
+ }
+ }
+ }
+ return pc;
}
/**
@@ -402,9 +422,9 @@
{
return null;
}
- List<String> portalContainerNames = CONFIG.getPortalContainerNames(context.getServletContextName());
+ String portalContainerName = CONFIG.getPortalContainerName(context.getServletContextName());
RootContainer root = RootContainer.getInstance();
- return root.getPortalContainer(portalContainerNames.get(0));
+ return root.getPortalContainer(portalContainerName);
}
/**
@@ -425,14 +445,7 @@
}
else
{
- PortalContainer pContainer = PortalContainer.getInstanceIfPresent();
- if (pContainer == null)
- {
- if (log.isDebugEnabled())
- log.debug("No portal container has been set in the ThreadLoal of PortalContainer");
- pContainer = PortalContainer.getInstance(context);
- }
- return pContainer;
+ return PortalContainer.getInstance(context);
}
}
@@ -560,7 +573,7 @@
public static Object getComponent(Class key)
{
- PortalContainer pcontainer = (PortalContainer)currentContainer_.get();
+ PortalContainer pcontainer = getInstanceIfPresent();
return pcontainer.getComponentInstanceOfType(key);
}
Modified: kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/RootContainer.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/RootContainer.java 2009-10-29 16:49:03 UTC (rev 444)
+++ kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/RootContainer.java 2009-10-29 21:54:44 UTC (rev 445)
@@ -566,18 +566,10 @@
{
while ((context = queue.poll()) != null)
{
- if (context.getServletContextName().equals(portalContainer.getName()))
- {
- context.getTask().execute(portalContainer.getPortalContext(), portalContainer);
- }
- else
- {
- // The current servlet context is not the context of the portal
- // Set the context classloader of the related web application
- Thread.currentThread().setContextClassLoader(context.getWebappClassLoader());
- hasChanged = true;
- context.getTask().execute(context.getServletContext(), portalContainer);
- }
+ // Set the context classloader of the related web application
+ Thread.currentThread().setContextClassLoader(context.getWebappClassLoader());
+ hasChanged = true;
+ context.getTask().execute(context.getServletContext(), portalContainer);
}
}
finally
Modified: kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/definition/PortalContainerConfig.java
===================================================================
--- kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/definition/PortalContainerConfig.java 2009-10-29 16:49:03 UTC (rev 444)
+++ kernel/trunk/exo.kernel.container/src/main/java/org/exoplatform/container/definition/PortalContainerConfig.java 2009-10-29 21:54:44 UTC (rev 445)
@@ -219,6 +219,31 @@
}
/**
+ * Gives the portal container names for which the web application is available if several
+ * portal container are available only the fist one will be returned
+ * @param contextName the context name of the web application
+ * @return the portal container names for which the web application is available
+ */
+ public String getPortalContainerName(String contextName)
+ {
+ if (contextName == null)
+ {
+ throw new IllegalArgumentException("The context name cannot be null");
+ }
+ if (portalContainerNames.contains(contextName))
+ {
+ // The given context name is a context name of a portal container
+ return contextName;
+ }
+ final List<String> result = scopes.get(contextName);
+ if (result == null || result.isEmpty())
+ {
+ // we assume the old behavior is expected
+ return defaultPortalContainerName;
+ }
+ return result.get(0);
+ }
+ /**
* Gives all the dependencies related to the given portal container
* @param portalContainerName the name of the portal container for which we want the dependencies
* @return a list of sorted context names
More information about the exo-jcr-commits
mailing list