Repository: tomee
Updated Branches:
  refs/heads/master 1cbe8e350 -> 12711a1b3


TOMEE-1770 OWB boot should use webapp loader as well


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

Branch: refs/heads/master
Commit: 12711a1b353d487f2196bf3d5666ea0c3c493610
Parents: 1cbe8e3
Author: Romain manni-Bucau <[email protected]>
Authored: Thu Apr 7 10:56:44 2016 +0200
Committer: Romain manni-Bucau <[email protected]>
Committed: Thu Apr 7 10:56:44 2016 +0200

----------------------------------------------------------------------
 .../tomee/catalina/TomcatWebAppBuilder.java     | 103 ++++++++++---------
 1 file changed, 54 insertions(+), 49 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/12711a1b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
----------------------------------------------------------------------
diff --git 
a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
 
b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
index f9c5d58..41a8a7b 100644
--- 
a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
+++ 
b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
@@ -1709,67 +1709,72 @@ public class TomcatWebAppBuilder implements 
WebAppBuilder, ContextListener, Pare
             ContextAccessController.setReadOnly(listenerName);
         }
 
-        // owb integration filters
-        final WebBeansContext webBeansContext = 
getWebBeansContext(contextInfo);
-        if (webBeansContext != null) {
-            // it is important to have a begin and a end listener
-            // to be sure to create contexts before other listeners
-            // and destroy contexts after other listeners
+        thread.setContextClassLoader(classLoader);
+        try {
+            // owb integration filters
+            final WebBeansContext webBeansContext = 
getWebBeansContext(contextInfo);
+            if (webBeansContext != null) {
+                // it is important to have a begin and a end listener
+                // to be sure to create contexts before other listeners
+                // and destroy contexts after other listeners
 
-            final BeginWebBeansListener beginWebBeansListener = new 
BeginWebBeansListener(webBeansContext);
-            final EndWebBeansListener endWebBeansListener = new 
EndWebBeansListener(webBeansContext);
+                final BeginWebBeansListener beginWebBeansListener = new 
BeginWebBeansListener(webBeansContext);
+                final EndWebBeansListener endWebBeansListener = new 
EndWebBeansListener(webBeansContext);
 
-            {
-                final Object[] appEventListeners = 
standardContext.getApplicationEventListeners();
-                final Object[] newEventListeners = new 
Object[appEventListeners.length + 2];
+                {
+                    final Object[] appEventListeners = 
standardContext.getApplicationEventListeners();
+                    final Object[] newEventListeners = new 
Object[appEventListeners.length + 2];
 
-                newEventListeners[0] = beginWebBeansListener;
-                System.arraycopy(appEventListeners, 0, newEventListeners, 1, 
appEventListeners.length);
-                newEventListeners[newEventListeners.length - 1] = 
endWebBeansListener;
-                
standardContext.setApplicationEventListeners(newEventListeners);
-            }
+                    newEventListeners[0] = beginWebBeansListener;
+                    System.arraycopy(appEventListeners, 0, newEventListeners, 
1, appEventListeners.length);
+                    newEventListeners[newEventListeners.length - 1] = 
endWebBeansListener;
+                    
standardContext.setApplicationEventListeners(newEventListeners);
+                }
 
-            {
-                final Object[] lifecycleListeners = 
standardContext.getApplicationLifecycleListeners();
-                final Object[] newLifecycleListeners = new 
Object[lifecycleListeners.length + 2];
+                {
+                    final Object[] lifecycleListeners = 
standardContext.getApplicationLifecycleListeners();
+                    final Object[] newLifecycleListeners = new 
Object[lifecycleListeners.length + 2];
 
-                newLifecycleListeners[0] = beginWebBeansListener;
-                System.arraycopy(lifecycleListeners, 0, newLifecycleListeners, 
1, lifecycleListeners.length);
-                newLifecycleListeners[newLifecycleListeners.length - 1] = 
endWebBeansListener;
-                
standardContext.setApplicationLifecycleListeners(newLifecycleListeners);
-            }
+                    newLifecycleListeners[0] = beginWebBeansListener;
+                    System.arraycopy(lifecycleListeners, 0, 
newLifecycleListeners, 1, lifecycleListeners.length);
+                    newLifecycleListeners[newLifecycleListeners.length - 1] = 
endWebBeansListener;
+                    
standardContext.setApplicationLifecycleListeners(newLifecycleListeners);
+                }
 
-            // also add the ThreadBindingListener to clean up async thread 
executions
-            {
-                WebBeansThreadBindingListener webBeansThreadBindingListener = 
new WebBeansThreadBindingListener(webBeansContext, 
standardContext.getThreadBindingListener());
-                
standardContext.setThreadBindingListener(webBeansThreadBindingListener);
-            }
+                // also add the ThreadBindingListener to clean up async thread 
executions
+                {
+                    WebBeansThreadBindingListener 
webBeansThreadBindingListener = new 
WebBeansThreadBindingListener(webBeansContext, 
standardContext.getThreadBindingListener());
+                    
standardContext.setThreadBindingListener(webBeansThreadBindingListener);
+                }
 
-            final ContextsService contextsService = 
webBeansContext.getContextsService();
-            if (CdiAppContextsService.class.isInstance(contextsService)) { // 
here ServletContext is usable
-                
CdiAppContextsService.class.cast(contextsService).applicationStarted(standardContext.getServletContext());
-            }
-        } else {
-            // just add the end listener to be able to stack tasks to execute 
at the request end
-            final EndWebBeansListener endWebBeansListener = new 
EndWebBeansListener(webBeansContext);
+                final ContextsService contextsService = 
webBeansContext.getContextsService();
+                if (CdiAppContextsService.class.isInstance(contextsService)) { 
// here ServletContext is usable
+                    
CdiAppContextsService.class.cast(contextsService).applicationStarted(standardContext.getServletContext());
+                }
+            } else {
+                // just add the end listener to be able to stack tasks to 
execute at the request end
+                final EndWebBeansListener endWebBeansListener = new 
EndWebBeansListener(webBeansContext);
 
-            {
-                final Object[] appEventListeners = 
standardContext.getApplicationEventListeners();
-                final Object[] newEventListeners = new 
Object[appEventListeners.length + 1];
+                {
+                    final Object[] appEventListeners = 
standardContext.getApplicationEventListeners();
+                    final Object[] newEventListeners = new 
Object[appEventListeners.length + 1];
 
-                System.arraycopy(appEventListeners, 0, newEventListeners, 1, 
appEventListeners.length);
-                newEventListeners[newEventListeners.length - 1] = 
endWebBeansListener;
-                
standardContext.setApplicationEventListeners(newEventListeners);
-            }
+                    System.arraycopy(appEventListeners, 0, newEventListeners, 
1, appEventListeners.length);
+                    newEventListeners[newEventListeners.length - 1] = 
endWebBeansListener;
+                    
standardContext.setApplicationEventListeners(newEventListeners);
+                }
 
-            {
-                final Object[] lifecycleListeners = 
standardContext.getApplicationLifecycleListeners();
-                final Object[] newLifecycleListeners = new 
Object[lifecycleListeners.length + 1];
+                {
+                    final Object[] lifecycleListeners = 
standardContext.getApplicationLifecycleListeners();
+                    final Object[] newLifecycleListeners = new 
Object[lifecycleListeners.length + 1];
 
-                System.arraycopy(lifecycleListeners, 0, newLifecycleListeners, 
1, lifecycleListeners.length);
-                newLifecycleListeners[newLifecycleListeners.length - 1] = 
endWebBeansListener;
-                
standardContext.setApplicationLifecycleListeners(newLifecycleListeners);
+                    System.arraycopy(lifecycleListeners, 0, 
newLifecycleListeners, 1, lifecycleListeners.length);
+                    newLifecycleListeners[newLifecycleListeners.length - 1] = 
endWebBeansListener;
+                    
standardContext.setApplicationLifecycleListeners(newLifecycleListeners);
+                }
             }
+        } finally {
+            thread.setContextClassLoader(originalLoader);
         }
 
         LinkageErrorProtection.preload(standardContext);

Reply via email to