You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by so...@apache.org on 2008/11/07 01:43:21 UTC
svn commit: r712023 - in
/myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config:
GlobalConfiguratorImpl.java ThreadLocalResetter.java
Author: sobryan
Date: Thu Nov 6 16:43:21 2008
New Revision: 712023
URL: http://svn.apache.org/viewvc?rev=712023&view=rev
Log:
TRINIDAD-1287 - Threadlocal system does not clean up on init
* Took work done for TRINIDAD-1273 and applied a call to the cleanup
code at the end of init and destroy.
Modified:
myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/GlobalConfiguratorImpl.java
myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/ThreadLocalResetter.java
Modified: myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/GlobalConfiguratorImpl.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/GlobalConfiguratorImpl.java?rev=712023&r1=712022&r2=712023&view=diff
==============================================================================
--- myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/GlobalConfiguratorImpl.java (original)
+++ myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/GlobalConfiguratorImpl.java Thu Nov 6 16:43:21 2008
@@ -241,20 +241,28 @@
{
if (_initialized)
{
- for (final Configurator config : _services)
+ try
{
- try
+ for (final Configurator config : _services)
{
- config.destroy();
- }
- catch (final Throwable t)
- {
- // we always want to continue to destroy things, so log errors and continue
- _LOG.severe(t);
+ try
+ {
+ config.destroy();
+ }
+ catch (final Throwable t)
+ {
+ // we always want to continue to destroy things, so log errors and continue
+ _LOG.severe(t);
+ }
}
+ _services = null;
+ _initialized = false;
+ }
+ finally
+ {
+ //release any managed threadlocals that may have been used durring destroy
+ _releaseManagedThreadLocals();
}
- _services = null;
- _initialized = false;
}
}
@@ -272,15 +280,21 @@
{
if (!_isDisabled(externalContext))
{
- final RequestType type = RequestType.getType(externalContext);
-
- // Do not end services at the end of a portal action request
- if (type != RequestType.PORTAL_ACTION)
+ try
{
- _endConfiguratorServiceRequest(externalContext);
+ final RequestType type = RequestType.getType(externalContext);
+
+ // Do not end services at the end of a portal action request
+ if (type != RequestType.PORTAL_ACTION)
+ {
+ _endConfiguratorServiceRequest(externalContext);
+ }
+ }
+ finally
+ {
+ _releaseRequestContext(externalContext);
+ _releaseManagedThreadLocals();
}
-
- _releaseRequestContext(externalContext);
}
RequestType.clearType(externalContext);
}
@@ -348,35 +362,44 @@
if (!_initialized)
{
- _services = ClassLoaderUtils.getServices(Configurator.class.getName());
-
- // Create a new RequestContextFactory is needed
- if (RequestContextFactory.getFactory() == null)
+ try
{
- RequestContextFactory.setFactory(new RequestContextFactoryImpl());
- }
-
- // Create a new SkinFactory if needed.
- if (SkinFactory.getFactory() == null)
- {
- SkinFactory.setFactory(new SkinFactoryImpl());
- }
-
- // register the base skins
- SkinUtils.registerBaseSkins();
-
- for (final Configurator config : _services)
- {
- config.init(externalContext);
+ _services = ClassLoaderUtils.getServices(Configurator.class.getName());
+
+ // Create a new RequestContextFactory is needed
+ if (RequestContextFactory.getFactory() == null)
+ {
+ RequestContextFactory.setFactory(new RequestContextFactoryImpl());
+ }
+
+ // Create a new SkinFactory if needed.
+ if (SkinFactory.getFactory() == null)
+ {
+ SkinFactory.setFactory(new SkinFactoryImpl());
+ }
+
+ // register the base skins
+ SkinUtils.registerBaseSkins();
+
+ for (final Configurator config : _services)
+ {
+ config.init(externalContext);
+ }
+
+ // after the 'services' filters are initialized, then register
+ // the skin extensions found in trinidad-skins.xml. This
+ // gives a chance to the 'services' filters to create more base
+ // skins that the skins in trinidad-skins.xml can extend.
+ SkinUtils.registerSkinExtensions(externalContext);
+ _initialized = true;
+ }
+ finally
+ {
+
+ //Do cleanup of anything which may have use the thread local manager durring
+ //init.
+ _releaseManagedThreadLocals();
}
-
- // after the 'services' filters are initialized, then register
- // the skin extensions found in trinidad-skins.xml. This
- // gives a chance to the 'services' filters to create more base
- // skins that the skins in trinidad-skins.xml can extend.
- SkinUtils.registerSkinExtensions(externalContext);
-
- _initialized = true;
}
else
{
@@ -416,12 +439,9 @@
_LOG.warning("REQUESTCONTEXT_NOT_PROPERLY_RELEASED");
}
context.release();
- ThreadLocalResetter resetter = _threadResetter.get();
-
- if (resetter != null)
- resetter.__removeRequestThreadLocals();
+ _releaseManagedThreadLocals();
}
-
+
// See if we've got a cached RequestContext instance; if so,
// reattach it
final Object cachedRequestContext = externalContext.getRequestMap().get(
@@ -460,15 +480,19 @@
context.release();
assert RequestContext.getCurrentInstance() == null;
- // now that the request is over, clean up all of the request-scoped
- // ThreadLocals.
- ThreadLocalResetter resetter = _threadResetter.get();
-
- if (resetter != null)
- resetter.__removeRequestThreadLocals();
}
}
+ private void _releaseManagedThreadLocals()
+ {
+ ThreadLocalResetter resetter = _threadResetter.get();
+
+ if (resetter != null)
+ {
+ resetter.__removeThreadLocals();
+ }
+ }
+
private void _endConfiguratorServiceRequest(final ExternalContext ec)
{
// Physical request has now ended
Modified: myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/ThreadLocalResetter.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/ThreadLocalResetter.java?rev=712023&r1=712022&r2=712023&view=diff
==============================================================================
--- myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/ThreadLocalResetter.java (original)
+++ myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/ThreadLocalResetter.java Thu Nov 6 16:43:21 2008
@@ -20,7 +20,6 @@
import java.util.concurrent.atomic.AtomicReference;
-import org.apache.myfaces.trinidad.util.ThreadLocalUtils;
import org.apache.myfaces.trinidad.util.ThreadLocalUtils.ThreadLocalLifecycle;
import org.apache.myfaces.trinidad.util.ThreadLocalUtils.ThreadLocalManager;
@@ -60,7 +59,7 @@
* Called by the GlobalConfiguratorImpl when the request is finished so that the
* ThreadLocalResetter can ask the ThreadLocalManager to clean itself up
*/
- void __removeRequestThreadLocals()
+ void __removeThreadLocals()
{
ThreadLocalManager threadLocalManager = _threadLocalManager.get();