You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by st...@apache.org on 2013/06/17 10:40:42 UTC

git commit: DELTASPIKE-375 improve performance and use internal ClassUtils common code

Updated Branches:
  refs/heads/master ee00aab11 -> eb526e50a


DELTASPIKE-375 improve performance and use internal ClassUtils common code


Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/eb526e50
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/eb526e50
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/eb526e50

Branch: refs/heads/master
Commit: eb526e50a1925a11412e256f598ff787c42d2950
Parents: ee00aab
Author: Mark Struberg <st...@apache.org>
Authored: Mon Jun 17 08:22:20 2013 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Mon Jun 17 08:23:04 2013 +0200

----------------------------------------------------------------------
 .../servlet/impl/event/EventEmitter.java        | 24 ++++++++++++++++----
 .../impl/produce/ServletContextHolder.java      | 18 ++++-----------
 2 files changed, 24 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/eb526e50/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/event/EventEmitter.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/event/EventEmitter.java b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/event/EventEmitter.java
index 899e3f7..7ef367d 100644
--- a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/event/EventEmitter.java
+++ b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/event/EventEmitter.java
@@ -18,6 +18,7 @@
  */
 package org.apache.deltaspike.servlet.impl.event;
 
+import javax.enterprise.inject.spi.BeanManager;
 import java.lang.annotation.Annotation;
 
 import org.apache.deltaspike.core.api.provider.BeanManagerProvider;
@@ -30,14 +31,27 @@ import org.apache.deltaspike.core.api.provider.BeanManagerProvider;
  */
 abstract class EventEmitter
 {
+    private volatile BeanManager beanManager;
 
     protected void fireEvent(Object event, Annotation... qualifier)
     {
-        /*
-         * No need to cache the BeanManager reference because the providers already does this on a context class loader
-         * level.
-         */
-        BeanManagerProvider.getInstance().getBeanManager().fireEvent(event, qualifier);
+        getBeanManager().fireEvent(event, qualifier);
+    }
+
+    protected BeanManager getBeanManager()
+    {
+        if (beanManager == null)
+        {
+            synchronized (this)
+            {
+                if (beanManager == null)
+                {
+                    beanManager = BeanManagerProvider.getInstance().getBeanManager();
+                }
+            }
+        }
+
+        return beanManager;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/eb526e50/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/ServletContextHolder.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/ServletContextHolder.java b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/ServletContextHolder.java
index 14044d8..1d4f292 100644
--- a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/ServletContextHolder.java
+++ b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/ServletContextHolder.java
@@ -25,6 +25,8 @@ import java.util.logging.Logger;
 
 import javax.servlet.ServletContext;
 
+import org.apache.deltaspike.core.util.ClassUtils;
+
 /**
  * This class holds the {@link ServletContext} for each context class loader.
  * 
@@ -52,7 +54,7 @@ class ServletContextHolder
      */
     static void bind(ServletContext servletContext)
     {
-        ClassLoader classLoader = getContextClassLoader();
+        ClassLoader classLoader = ClassUtils.getClassLoader(null);
         ServletContext existingContext = CONTEXT_BY_CLASSLOADER.put(classLoader, servletContext);
         if (existingContext != null)
         {
@@ -69,7 +71,7 @@ class ServletContextHolder
      */
     static ServletContext get()
     {
-        ClassLoader classLoader = getContextClassLoader();
+        ClassLoader classLoader = ClassUtils.getClassLoader(null);
         ServletContext servletContext = CONTEXT_BY_CLASSLOADER.get(classLoader);
         if (servletContext == null)
         {
@@ -84,7 +86,7 @@ class ServletContextHolder
      */
     static void release()
     {
-        ClassLoader classLoader = getContextClassLoader();
+        ClassLoader classLoader = ClassUtils.getClassLoader(null);
         ServletContext removedContext = CONTEXT_BY_CLASSLOADER.remove(classLoader);
         if (removedContext == null)
         {
@@ -92,14 +94,4 @@ class ServletContextHolder
         }
     }
 
-    private static ClassLoader getContextClassLoader()
-    {
-        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
-        if (classLoader == null)
-        {
-            throw new IllegalStateException("Unable to obtain the context class loader for the current thread");
-        }
-        return classLoader;
-    }
-
 }