You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2011/02/24 17:54:18 UTC
svn commit: r1074211 - in /myfaces/extensions/cdi/trunk:
core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/startup/
core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/tools/
core/impl/src/main/java/org/apache/myfaces/exte...
Author: gpetracek
Date: Thu Feb 24 16:54:17 2011
New Revision: 1074211
URL: http://svn.apache.org/viewvc?rev=1074211&view=rev
Log:
EXTCDI-146
Modified:
myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/startup/CodiStartupBroadcaster.java
myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/tools/DefaultAnnotation.java
myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/projectstage/ProjectStageProducer.java
myfaces/extensions/cdi/trunk/core/impl/src/test/java/org/apache/myfaces/extensions/cdi/core/test/impl/config/ConfigTest.java
myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/DefaultTransactionalInterceptorStrategy.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigCache.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/listener/phase/CodiLifecycleWrapper.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/listener/startup/ApplicationStartupBroadcaster.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/CodiRenderKitFactory.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextAwareViewHandler.java
myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/phase/CodiLifecycleWrapper.java
myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/scope/conversation/CodiRenderKitFactory.java
Modified: myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/startup/CodiStartupBroadcaster.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/startup/CodiStartupBroadcaster.java?rev=1074211&r1=1074210&r2=1074211&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/startup/CodiStartupBroadcaster.java (original)
+++ myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/startup/CodiStartupBroadcaster.java Thu Feb 24 16:54:17 2011
@@ -65,6 +65,7 @@ public abstract class CodiStartupBroadca
private static synchronized void invokeStartupEventBroadcaster(ClassLoader classLoader)
{
+ // switch into paranoia mode
if (initialized.containsKey(classLoader))
{
return;
Modified: myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/tools/DefaultAnnotation.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/tools/DefaultAnnotation.java?rev=1074211&r1=1074210&r2=1074211&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/tools/DefaultAnnotation.java (original)
+++ myfaces/extensions/cdi/trunk/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/tools/DefaultAnnotation.java Thu Feb 24 16:54:17 2011
@@ -47,57 +47,67 @@ public class DefaultAnnotation implement
// NOTE that this cache needs to be a WeakHashMap in order to prevent a memory leak
// (the garbage collector should be able to remove the ClassLoader).
- private static Map<ClassLoader, Map<String, Annotation>> annotationCachePerClassLoader
+ private static volatile Map<ClassLoader, Map<String, Annotation>> annotationCache
= new WeakHashMap<ClassLoader, Map<String, Annotation>>();
public static <T extends Annotation> T of(Class<T> annotationClass)
{
- Map<String, Annotation> annotationCache = getAnnotationCache();
- final String key = annotationClass.getName();
+ String key = annotationClass.getName();
+
+ Map<String, Annotation> cache = getAnnotationCache();
+
+ Annotation annotation = cache.get(key);
- Annotation annotation = annotationCache.get(key);
-
if (annotation == null)
{
- // switch into paranoia mode
- //noinspection SynchronizationOnLocalVariableOrMethodParameter
- synchronized (annotationCache)
- {
- annotation = annotationCache.get(key);
- if (annotation == null)
- {
- annotation = (Annotation) Proxy.newProxyInstance(
- annotationClass.getClassLoader(),
- new Class[]{annotationClass},
- new DefaultAnnotation(annotationClass));
-
- annotationCache.put(key, annotation);
- }
- }
+ annotation = initAnnotation(key, annotationClass, cache);
}
return (T) annotation;
}
+ private static synchronized <T extends Annotation> Annotation initAnnotation(String key,
+ Class<T> annotationClass,
+ Map<String, Annotation> cache)
+ {
+ Annotation annotation = cache.get(key);
+
+ // switch into paranoia mode
+ if(annotation == null)
+ {
+ annotation = (Annotation) Proxy.newProxyInstance(annotationClass.getClassLoader(),
+ new Class[]{annotationClass},
+ new DefaultAnnotation(annotationClass));
+
+ cache.put(key, annotation);
+ }
+
+ return annotation;
+ }
+
private static Map<String, Annotation> getAnnotationCache()
{
ClassLoader classLoader = ClassUtils.getClassLoader(null);
- Map<String, Annotation> annotationCache = annotationCachePerClassLoader.get(classLoader);
- if (annotationCache == null)
+ Map<String, Annotation> cache = annotationCache.get(classLoader);
+
+ if (cache == null)
{
- // switch into paranoia mode
- synchronized (annotationCachePerClassLoader)
- {
- annotationCache = annotationCachePerClassLoader.get(classLoader);
- if (annotationCache == null)
- {
- annotationCache = new ConcurrentHashMap<String, Annotation>();
- annotationCachePerClassLoader.put(classLoader, annotationCache);
- }
- }
+ cache = init(classLoader);
}
- return annotationCache;
+ return cache;
+ }
+
+ private static synchronized Map<String, Annotation> init(ClassLoader classLoader)
+ {
+ // switch into paranoia mode
+ Map<String, Annotation> cache = annotationCache.get(classLoader);
+ if (cache == null)
+ {
+ cache = new ConcurrentHashMap<String, Annotation>();
+ annotationCache.put(classLoader, cache);
+ }
+ return cache;
}
private Class<? extends Annotation> annotationClass;
@@ -211,5 +221,4 @@ public class DefaultAnnotation implement
{
return annotationClass.hashCode();
}
-
}
Modified: myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/projectstage/ProjectStageProducer.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/projectstage/ProjectStageProducer.java?rev=1074211&r1=1074210&r2=1074211&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/projectstage/ProjectStageProducer.java (original)
+++ myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/projectstage/ProjectStageProducer.java Thu Feb 24 16:54:17 2011
@@ -24,6 +24,7 @@ import org.apache.myfaces.extensions.cdi
import org.apache.myfaces.extensions.cdi.core.impl.util.CodiUtils;
import javax.enterprise.context.Dependent;
+import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Default;
import javax.enterprise.inject.Produces;
import java.io.Serializable;
@@ -52,7 +53,7 @@ import java.io.Serializable;
*
* TODO move jsf specific parts
*/
-@Dependent
+@ApplicationScoped
public class ProjectStageProducer implements Serializable
{
private static final long serialVersionUID = -2987762608635612074L;
@@ -72,7 +73,7 @@ public class ProjectStageProducer implem
/**
* for the singleton factory
*/
- private static ProjectStageProducer projectStageProducer;
+ private static volatile ProjectStageProducer projectStageProducer;
/**
* We can only produce @Dependent scopes since an enum is final.
@@ -85,7 +86,8 @@ public class ProjectStageProducer implem
{
if(projectStage == null)
{
- initProjectStage();
+ //triggers initialization
+ getInstance();
}
return projectStage;
}
@@ -105,32 +107,48 @@ public class ProjectStageProducer implem
*
* @return the ProjectStageProducer instance.
*/
- public static synchronized ProjectStageProducer getInstance()
+ public static ProjectStageProducer getInstance()
{
if (projectStageProducer == null)
{
- projectStageProducer = CodiUtils.lookupFromEnvironment(ProjectStageProducer.class);
-
- if(projectStageProducer == null)
- {
- //workaround to avoid the usage of a service loader
- projectStageProducer = ClassUtils.tryToInstantiateClassForName(
- "org.apache.myfaces.extensions.cdi.jsf2.impl.projectstage.JsfProjectStageProducer",
- ProjectStageProducer.class);
- }
+ lazyInit();
+ }
- if (projectStageProducer == null)
- {
- // if we still didn't find a customised ProjectStageProducer,
- // then we take the default one.
- projectStageProducer = new ProjectStageProducer();
- }
+ if(projectStage == null)
+ {
projectStageProducer.initProjectStage();
}
return projectStageProducer;
}
+ private static synchronized void lazyInit()
+ {
+ // switch into paranoia mode
+ if (projectStageProducer != null)
+ {
+ return;
+ }
+
+ projectStageProducer = CodiUtils.lookupFromEnvironment(ProjectStageProducer.class);
+
+ if(projectStageProducer == null)
+ {
+ //workaround to avoid the usage of a service loader
+ projectStageProducer = ClassUtils.tryToInstantiateClassForName(
+ "org.apache.myfaces.extensions.cdi.jsf2.impl.projectstage.JsfProjectStageProducer",
+ ProjectStageProducer.class);
+ }
+
+ if (projectStageProducer == null)
+ {
+ // if we still didn't find a customised ProjectStageProducer,
+ // then we take the default one.
+ projectStageProducer = new ProjectStageProducer();
+ }
+ projectStageProducer.initProjectStage();
+ }
+
/**
* This function can be used to manually set the ProjectStage for the application.
* This is e.g. useful in unit tests.
@@ -185,6 +203,7 @@ public class ProjectStageProducer implem
protected void initProjectStage()
{
+ // switch into paranoia mode
synchronized (ProjectStageProducer.class)
{
if(projectStage == null)
Modified: myfaces/extensions/cdi/trunk/core/impl/src/test/java/org/apache/myfaces/extensions/cdi/core/test/impl/config/ConfigTest.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/impl/src/test/java/org/apache/myfaces/extensions/cdi/core/test/impl/config/ConfigTest.java?rev=1074211&r1=1074210&r2=1074211&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/test/java/org/apache/myfaces/extensions/cdi/core/test/impl/config/ConfigTest.java (original)
+++ myfaces/extensions/cdi/trunk/core/impl/src/test/java/org/apache/myfaces/extensions/cdi/core/test/impl/config/ConfigTest.java Thu Feb 24 16:54:17 2011
@@ -81,6 +81,12 @@ public class ConfigTest
}
@Test
+ public void testLazyInitBeforeStaticCall()
+ {
+ assertEquals(new ProjectStageProducer(){}.getProjectStage(), ProjectStage.Production);
+ }
+
+ @Test
public void testConfiguredClassViaSystemPropertyConfig()
{
assertNull(CodiUtils.lookupFromEnvironment(ClassDeactivator.class));
Modified: myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/DefaultTransactionalInterceptorStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/DefaultTransactionalInterceptorStrategy.java?rev=1074211&r1=1074210&r2=1074211&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/DefaultTransactionalInterceptorStrategy.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/DefaultTransactionalInterceptorStrategy.java Thu Feb 24 16:54:17 2011
@@ -69,7 +69,8 @@ public class DefaultTransactionalInterce
private static transient ThreadLocal<HashMap<String, EntityManager>> entityManagerMap =
new ThreadLocal<HashMap<String, EntityManager>>();
- private static transient Map<ClassLoader, Map<String, PersistenceContextMetaEntry>> persistenceContextMetaEntries =
+ private static transient volatile Map<ClassLoader, Map<String, PersistenceContextMetaEntry>>
+ persistenceContextMetaEntries =
new ConcurrentHashMap<ClassLoader, Map<String, PersistenceContextMetaEntry>>();
/** 1 ms in nanoTime ticks */
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigCache.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigCache.java?rev=1074211&r1=1074210&r2=1074211&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigCache.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ViewConfigCache.java Thu Feb 24 16:54:17 2011
@@ -65,7 +65,7 @@ public class ViewConfigCache
inlineViewConfigRootMarker =
new HashMap<ClassLoader, Class>();
- private static Map<ClassLoader, Boolean>
+ private static volatile Map<ClassLoader, Boolean>
lazyInitAllowed =
new HashMap<ClassLoader, Boolean>();
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/listener/phase/CodiLifecycleWrapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/listener/phase/CodiLifecycleWrapper.java?rev=1074211&r1=1074210&r2=1074211&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/listener/phase/CodiLifecycleWrapper.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/listener/phase/CodiLifecycleWrapper.java Thu Feb 24 16:54:17 2011
@@ -43,9 +43,9 @@ class CodiLifecycleWrapper extends Lifec
private BeforeAfterFacesRequestBroadcaster beforeAfterFacesRequestBroadcaster;
- private Boolean initialized;
+ private volatile Boolean initialized;
- private Boolean applicationInitialized;
+ private volatile Boolean applicationInitialized;
CodiLifecycleWrapper(Lifecycle wrapped, List<PhaseListener> phaseListeners)
{
@@ -104,6 +104,14 @@ class CodiLifecycleWrapper extends Lifec
//just an !additional! check to improve the performance
if(applicationInitialized == null)
{
+ initApplication();
+ }
+ }
+
+ private synchronized void initApplication()
+ {
+ if(applicationInitialized == null)
+ {
applicationInitialized = true;
ApplicationStartupBroadcaster applicationStartupBroadcaster =
CodiUtils.getContextualReferenceByClass(ApplicationStartupBroadcaster.class);
@@ -124,16 +132,22 @@ class CodiLifecycleWrapper extends Lifec
{
if(this.initialized == null)
{
- synchronized (this)
- {
- if(ClassDeactivation.isClassActivated(BeforeAfterFacesRequestBroadcaster.class))
- {
- this.beforeAfterFacesRequestBroadcaster =
- CodiUtils.getContextualReferenceByClass(BeforeAfterFacesRequestBroadcaster.class);
- }
+ init();
+ }
+ }
- this.initialized = true;
+ private synchronized void init()
+ {
+ // switch into paranoia mode
+ if(this.initialized == null)
+ {
+ if(ClassDeactivation.isClassActivated(BeforeAfterFacesRequestBroadcaster.class))
+ {
+ this.beforeAfterFacesRequestBroadcaster =
+ CodiUtils.getContextualReferenceByClass(BeforeAfterFacesRequestBroadcaster.class);
}
+
+ this.initialized = true;
}
}
}
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/listener/startup/ApplicationStartupBroadcaster.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/listener/startup/ApplicationStartupBroadcaster.java?rev=1074211&r1=1074210&r2=1074211&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/listener/startup/ApplicationStartupBroadcaster.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/listener/startup/ApplicationStartupBroadcaster.java Thu Feb 24 16:54:17 2011
@@ -33,7 +33,7 @@ import java.util.concurrent.ConcurrentHa
@ApplicationScoped
public class ApplicationStartupBroadcaster
{
- private static Map<ClassLoader, Boolean> initialized =
+ private static volatile Map<ClassLoader, Boolean> initialized =
new ConcurrentHashMap<ClassLoader, Boolean>();
@Inject
@@ -46,8 +46,7 @@ public class ApplicationStartupBroadcast
return;
}
- //noinspection SynchronizeOnNonFinalField
- synchronized (initialized)
+ synchronized (ApplicationStartupBroadcaster.class)
{
// switch into paranoia mode
if(initialized.containsKey(getClassLoader()))
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/CodiRenderKitFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/CodiRenderKitFactory.java?rev=1074211&r1=1074210&r2=1074211&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/CodiRenderKitFactory.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/CodiRenderKitFactory.java Thu Feb 24 16:54:17 2011
@@ -39,7 +39,7 @@ public class CodiRenderKitFactory extend
private RenderKitFactory wrapped;
private RenderKitWrapperFactory renderKitWrapperFactory;
- private Boolean initialized;
+ private volatile Boolean initialized;
private final boolean deactivated;
public CodiRenderKitFactory(RenderKitFactory wrapped)
@@ -87,8 +87,14 @@ public class CodiRenderKitFactory extend
return new InterceptedRenderKit(renderKit);
}
- private void lazyInit()
+ private synchronized void lazyInit()
{
+ // switch into paranoia mode
+ if(this.initialized != null)
+ {
+ return;
+ }
+
if(this.renderKitWrapperFactory == null)
{
//workaround for mojarra
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextAwareViewHandler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextAwareViewHandler.java?rev=1074211&r1=1074210&r2=1074211&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextAwareViewHandler.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextAwareViewHandler.java Thu Feb 24 16:54:17 2011
@@ -38,7 +38,7 @@ public class WindowContextAwareViewHandl
{
private ViewHandler wrapped;
- private WindowHandler windowHandler;
+ private volatile WindowHandler windowHandler;
private final boolean deactivated;
@@ -69,10 +69,19 @@ public class WindowContextAwareViewHandl
return url;
}
- private synchronized void lazyInit()
+ private void lazyInit()
{
if(this.windowHandler == null)
{
+ init();
+ }
+ }
+
+ private synchronized void init()
+ {
+ // switch into paranoia mode
+ if(this.windowHandler == null)
+ {
this.windowHandler = ConversationUtils.getWindowHandler();
}
}
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/phase/CodiLifecycleWrapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/phase/CodiLifecycleWrapper.java?rev=1074211&r1=1074210&r2=1074211&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/phase/CodiLifecycleWrapper.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/phase/CodiLifecycleWrapper.java Thu Feb 24 16:54:17 2011
@@ -44,7 +44,7 @@ class CodiLifecycleWrapper extends Lifec
private BeforeAfterFacesRequestBroadcaster beforeAfterFacesRequestBroadcaster;
- private Boolean initialized;
+ private volatile Boolean initialized;
private Boolean applicationInitialized;
@@ -125,16 +125,22 @@ class CodiLifecycleWrapper extends Lifec
{
if(this.initialized == null)
{
- synchronized (this)
- {
- if(ClassDeactivation.isClassActivated(BeforeAfterFacesRequestBroadcaster.class))
- {
- this.beforeAfterFacesRequestBroadcaster =
- CodiUtils.getContextualReferenceByClass(BeforeAfterFacesRequestBroadcaster.class);
- }
+ init();
+ }
+ }
- this.initialized = true;
+ private synchronized void init()
+ {
+ // switch into paranoia mode
+ if(this.initialized == null)
+ {
+ if(ClassDeactivation.isClassActivated(BeforeAfterFacesRequestBroadcaster.class))
+ {
+ this.beforeAfterFacesRequestBroadcaster =
+ CodiUtils.getContextualReferenceByClass(BeforeAfterFacesRequestBroadcaster.class);
}
+
+ this.initialized = true;
}
}
}
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/scope/conversation/CodiRenderKitFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/scope/conversation/CodiRenderKitFactory.java?rev=1074211&r1=1074210&r2=1074211&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/scope/conversation/CodiRenderKitFactory.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/scope/conversation/CodiRenderKitFactory.java Thu Feb 24 16:54:17 2011
@@ -42,7 +42,7 @@ public class CodiRenderKitFactory extend
private final RenderKitFactory wrapped;
private RenderKitWrapperFactory renderKitWrapperFactory;
- private Boolean initialized;
+ private volatile Boolean initialized;
private final boolean deactivated;
public CodiRenderKitFactory(RenderKitFactory wrapped)
@@ -90,8 +90,14 @@ public class CodiRenderKitFactory extend
return new InterceptedRenderKit(renderKit);
}
- private void lazyInit()
+ private synchronized void lazyInit()
{
+ // switch into paranoia mode
+ if(this.initialized != null)
+ {
+ return;
+ }
+
if(this.renderKitWrapperFactory == null)
{
//workaround for mojarra