Author: rmannibucau
Date: Sat Mar 16 18:42:14 2013
New Revision: 1457289

URL: http://svn.apache.org/r1457289
Log:
TOMEE-833 tolerating a bit more classloader of server event

Modified:
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/EventHelper.java
    
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java?rev=1457289&r1=1457288&r2=1457289&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java
 Sat Mar 16 18:42:14 2013
@@ -53,5 +53,6 @@ public class AppInfo extends InfoObject 
     public final Properties jmx = new Properties();
     public final Set<String> mbeans = new TreeSet<String>();
     public final Set<String> jaxRsProviders = new TreeSet<String>();
+    public final Set<String> eventClassesNeedingAppClassloader = new 
TreeSet<String>();
     public boolean webAppAlone;
 }

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1457289&r1=1457288&r2=1457289&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
 Sat Mar 16 18:42:14 2013
@@ -579,6 +579,8 @@ public class Assembler extends Assembler
             appInfo.path = appInfo.appId;
         }
 
+        EventHelper.addEventClasses(classLoader, 
appInfo.eventClassesNeedingAppClassloader);
+
         logger.info("createApplication.start", appInfo.path);
 
         //        try {

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java?rev=1457289&r1=1457288&r2=1457289&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
 Sat Mar 16 18:42:14 2013
@@ -105,6 +105,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -866,9 +867,14 @@ public class ConfigurationFactory implem
     }
 
     public AppInfo configureApplication(final AppModule appModule) throws 
OpenEJBException {
+        final Collection<Class<?>> extensions = new HashSet<Class<?>>();
+        final Collection<String> notLoaded = new HashSet<String>();
+
         final List<URL> libs = appModule.getAdditionalLibraries();
         if (libs != null && libs.size() > 0) {
-            EventHelper.installExtensions(new ResourceFinder("META-INF", 
libs.toArray(new URL[libs.size()])));
+            final ResourceFinder finder = new ResourceFinder("META-INF", 
libs.toArray(new URL[libs.size()]));
+            extensions.addAll(EventHelper.findExtensions(finder));
+            notLoaded.addAll(finder.getResourcesNotLoaded());
         }
         for (final EjbModule ejb : appModule.getEjbModules()) {
             try {
@@ -876,7 +882,9 @@ public class ConfigurationFactory implem
                 if (uri.isAbsolute()) {
                     final URL url = uri.toURL();
                     if (libs != null && !libs.contains(url)) {
-                        EventHelper.installExtensions(new 
ResourceFinder("META-INF", url));
+                        final ResourceFinder finder = new 
ResourceFinder("META-INF", url);
+                        extensions.addAll(EventHelper.findExtensions(finder));
+                        notLoaded.addAll(finder.getResourcesNotLoaded());
                     }
                 }
             } catch (IllegalArgumentException iae) {
@@ -890,16 +898,24 @@ public class ConfigurationFactory implem
         for (final WebModule web : appModule.getWebModules()) {
             final List<URL> webLibs = web.getScannableUrls();
             if (webLibs != null && webLibs.size() > 0) {
-                EventHelper.installExtensions(new ResourceFinder("META-INF", 
webLibs.toArray(new URL[webLibs.size()])));
+                final ResourceFinder finder = new ResourceFinder("META-INF", 
webLibs.toArray(new URL[webLibs.size()]));
+                extensions.addAll(EventHelper.findExtensions(finder));
+                notLoaded.addAll(finder.getResourcesNotLoaded());
             }
         }
 
+        // add it as early as possible, the ones needing the app classloader 
will be added later
+        EventHelper.addEventClasses(extensions);
+
         final String location = appModule.getJarLocation();
         logger.info("config.configApp", null != location ? location : 
appModule.getModuleId());
         deployer.deploy(appModule);
         final AppInfoBuilder appInfoBuilder = new AppInfoBuilder(this);
 
-        return appInfoBuilder.build(appModule);
+        final AppInfo info = appInfoBuilder.build(appModule);
+        info.eventClassesNeedingAppClassloader.addAll(notLoaded);
+
+        return info;
     }
 
     private static class DefaultService {

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/EventHelper.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/EventHelper.java?rev=1457289&r1=1457288&r2=1457289&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/EventHelper.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/EventHelper.java
 Sat Mar 16 18:42:14 2013
@@ -20,6 +20,8 @@ import org.apache.openejb.loader.SystemI
 import org.apache.xbean.finder.ResourceFinder;
 
 import java.io.IOException;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 
 public final class EventHelper {
@@ -30,19 +32,43 @@ public final class EventHelper {
         // no-op
     }
 
+    public static Collection<Class<?>> findExtensions(final ResourceFinder 
finder) {
+        try {
+            return finder.findAvailableClasses("org.apache.openejb.extension");
+        } catch (IOException e) {
+            LOGGER.error("Extension scanning of 
'META-INF/org.apache.openejb.extension' files failed", e);
+            return Collections.emptySet();
+        }
+    }
+
     public static void installExtensions(final ResourceFinder finder) {
         try {
             final List<Class<?>> classes = 
finder.findAvailableClasses("org.apache.openejb.extension");
-            for (final Class<?> clazz : classes) {
-                try {
-                    final Object object = clazz.newInstance();
-                    SystemInstance.get().addObserver(object);
-                } catch (Throwable t) {
-                    LOGGER.error("Extension construction failed" + 
clazz.getName(), t);
-                }
-            }
+            addEventClasses(classes);
         } catch (IOException e) {
             LOGGER.error("Extension scanning of 
'META-INF/org.apache.openejb.extension' files failed", e);
         }
     }
+
+    public static void addEventClasses(final ClassLoader loader, final 
Collection<String> classes) {
+        for (final String clazz : classes) {
+            try {
+                final Object object = loader.loadClass(clazz).newInstance();
+                SystemInstance.get().addObserver(object);
+            } catch (final Throwable t) {
+                LOGGER.error("Extension construction failed" + clazz, t);
+            }
+        }
+    }
+
+    public static void addEventClasses(final Collection<Class<?>> classes) {
+        for (final Class<?> clazz : classes) {
+            try {
+                final Object object = clazz.newInstance();
+                SystemInstance.get().addObserver(object);
+            } catch (final Throwable t) {
+                LOGGER.error("Extension construction failed" + 
clazz.getName(), t);
+            }
+        }
+    }
 }

Modified: 
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java?rev=1457289&r1=1457288&r2=1457289&view=diff
==============================================================================
--- 
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
 (original)
+++ 
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
 Sat Mar 16 18:42:14 2013
@@ -88,7 +88,6 @@ import org.apache.openejb.config.Configu
 import org.apache.openejb.config.DeploymentLoader;
 import org.apache.openejb.config.TldScanner;
 import org.apache.openejb.config.WebModule;
-import org.apache.openejb.config.event.BeforeDeploymentEvent;
 import org.apache.openejb.config.sys.Resource;
 import org.apache.openejb.core.CoreContainerSystem;
 import org.apache.openejb.core.ParentClassLoaderFinder;
@@ -739,10 +738,6 @@ public class TomcatWebAppBuilder impleme
             }
         }
 
-        if (warFile.exists()) {
-            SystemInstance.get().fireEvent(new 
BeforeDeploymentEvent(DeploymentLoader.getWebappUrls(warFile)));
-        }
-
         
standardContext.setCrossContext(SystemInstance.get().getOptions().get(OPENEJB_CROSSCONTEXT_PROPERTY,
 false));
         standardContext.setNamingResources(new 
OpenEJBNamingResource(standardContext.getNamingResources()));
 
@@ -1858,7 +1853,7 @@ public class TomcatWebAppBuilder impleme
      *
      * @param standardContext tomcat context instance
      */
-    private void loadWebModule(final AppModule appModule, final 
StandardContext standardContext) {
+    private void    loadWebModule(final AppModule appModule, final 
StandardContext standardContext) {
         final WebModule webModule = appModule.getWebModules().get(0);
         final WebApp webApp = webModule.getWebApp();
 


Reply via email to