DELTASPIKE-1385 added support for init under high load
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/WindowIdHtmlRenderer.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/WindowIdHtmlRenderer.java
index b0f3175..92c1d89 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/WindowIdHtmlRenderer.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/WindowIdHtmlRenderer.java
@@ -127,8 +127,9 @@
if (clientWindow == null)
{
clientWindowConfig = BeanProvider.getContextualReference(ClientWindowConfig.class);
- clientWindow = BeanProvider.getContextualReference(ClientWindow.class);
maxWindowIdLength = ClientWindowHelper.getMaxWindowIdLength();
+
+ clientWindow = BeanProvider.getContextualReference(ClientWindow.class);
}
}
}
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/config/view/DefaultErrorViewAwareExceptionHandlerWrapper.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/config/view/DefaultErrorViewAwareExceptionHandlerWrapper.java
index 33af77f..f6f97fb 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/config/view/DefaultErrorViewAwareExceptionHandlerWrapper.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/config/view/DefaultErrorViewAwareExceptionHandlerWrapper.java
@@ -43,7 +43,7 @@
{
private ExceptionHandler wrapped;
- private ViewNavigationHandler viewNavigationHandler;
+ private volatile ViewNavigationHandler viewNavigationHandler;
/**
* Constructor used by proxy libs
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/config/view/navigation/ViewConfigAwareNavigationHandler.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/config/view/navigation/ViewConfigAwareNavigationHandler.java
index a3171f8..0bc189f 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/config/view/navigation/ViewConfigAwareNavigationHandler.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/config/view/navigation/ViewConfigAwareNavigationHandler.java
@@ -48,7 +48,7 @@
private final NavigationHandler navigationHandler;
- private BeanManager beanManager;
+ private volatile BeanManager beanManager;
private NavigationParameterContext navigationParameterContext;
@@ -259,11 +259,12 @@
{
if (this.beanManager == null)
{
- this.beanManager = BeanManagerProvider.getInstance().getBeanManager();
this.navigationParameterContext =
BeanProvider.getContextualReference(NavigationParameterContext.class);
this.viewConfigResolver =
BeanProvider.getContextualReference(ViewConfigResolver.class);
+
+ this.beanManager = BeanManagerProvider.getInstance().getBeanManager();
}
}
}
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/phase/DeltaSpikePhaseListener.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/phase/DeltaSpikePhaseListener.java
index adda43a..7f1c062 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/phase/DeltaSpikePhaseListener.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/phase/DeltaSpikePhaseListener.java
@@ -52,7 +52,7 @@
private final PhaseListener jsfRequestLifecyclePhaseListener = new JsfRequestLifecyclePhaseListener();
- private ViewConfigResolver viewConfigResolver;
+ private volatile ViewConfigResolver viewConfigResolver;
public DeltaSpikePhaseListener()
{
@@ -154,6 +154,11 @@
private synchronized void lazyInit()
{
+ if (this.viewConfigResolver != null)
+ {
+ return;
+ }
+
this.securityModuleActivated =
BeanProvider.getContextualReference(EditableAccessDecisionVoterContext.class, true) != null;
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/navigation/NavigationHandlerAwareApplication.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/navigation/NavigationHandlerAwareApplication.java
index 6393914..b622703 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/navigation/NavigationHandlerAwareApplication.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/navigation/NavigationHandlerAwareApplication.java
@@ -31,7 +31,7 @@
public class NavigationHandlerAwareApplication extends ApplicationWrapper implements Deactivatable
{
- private static Boolean manualNavigationHandlerWrapperMode;
+ private static volatile Boolean manualNavigationHandlerWrapperMode;
private static Class navigationHandlerWrapperClass;
private final Application wrapped;
@@ -108,7 +108,7 @@
try
{
Constructor deltaSpikeNavigationHandlerWrapperConstructor =
- this.navigationHandlerWrapperClass.getConstructor(ConfigurableNavigationHandler.class);
+ navigationHandlerWrapperClass.getConstructor(ConfigurableNavigationHandler.class);
NavigationHandler navigationHandlerWrapper =
(NavigationHandler)deltaSpikeNavigationHandlerWrapperConstructor.newInstance(handler);
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/security/SecurityAwareViewHandler.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/security/SecurityAwareViewHandler.java
index 7d5115f..6fb44ee 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/security/SecurityAwareViewHandler.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/security/SecurityAwareViewHandler.java
@@ -46,7 +46,7 @@
protected final ViewHandler wrapped;
private final boolean activated;
- private Boolean securityModuleActivated;
+ private volatile Boolean securityModuleActivated;
/**
* Constructor for wrapping the given {@link ViewHandler}
@@ -184,6 +184,11 @@
private synchronized void lazyInit()
{
+ if (this.securityModuleActivated != null)
+ {
+ return;
+ }
+
this.securityModuleActivated =
BeanProvider.getContextualReference(EditableAccessDecisionVoterContext.class, true) != null;