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