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);
