You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/12/03 08:57:09 UTC
svn commit: r1416371 - in
/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config:
AppValidator.java rules/CheckRestMethodArePublic.java
rules/ValidationBase.java
Author: rmannibucau
Date: Mon Dec 3 07:57:08 2012
New Revision: 1416371
URL: http://svn.apache.org/viewvc?rev=1416371&view=rev
Log:
TOMEE-617 trying to ensure validations are done with tempclassloader - note: AppValidator update should be useless but try to avoid side effect if a validator is added and not well coded
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppValidator.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckRestMethodArePublic.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/rules/ValidationBase.java
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppValidator.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppValidator.java?rev=1416371&r1=1416370&r2=1416371&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppValidator.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppValidator.java Mon Dec 3 07:57:08 2012
@@ -91,6 +91,8 @@ public class AppValidator {
// START SNIPPET : code2
public AppModule validate(final AppModule appModule) {
+ final ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(appModule.getClassLoader()); // be sure to not mix classloaders
try {
ValidationRule[] rules = getValidationRules();
for (int i = 0; i < rules.length; i++) {
@@ -102,6 +104,8 @@ public class AppValidator {
err.setCause(e);
err.setDetails(e.getMessage());
appModule.getValidation().addError(err);
+ } finally {
+ Thread.currentThread().setContextClassLoader(loader);
}
return appModule;
}
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckRestMethodArePublic.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckRestMethodArePublic.java?rev=1416371&r1=1416370&r2=1416371&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckRestMethodArePublic.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckRestMethodArePublic.java Mon Dec 3 07:57:08 2012
@@ -37,59 +37,69 @@ public class CheckRestMethodArePublic im
public void validate(final AppModule appModule) {
// valid standalone classes
final Collection<String> standAloneClasses = new ArrayList<String>();
- for (EjbModule ejb : appModule.getEjbModules()) {
- for (EnterpriseBean bean : ejb.getEjbJar().getEnterpriseBeans()) {
- if (bean instanceof SessionBean && ((SessionBean) bean).isRestService()) {
- standAloneClasses.add(bean.getEjbClass());
- valid(ejb.getValidation(), ejb.getClassLoader(), bean.getEjbClass());
- }
- }
- }
- for (WebModule web : appModule.getWebModules()) {
- // build the list of classes to validate
- final Collection<String> classes = new ArrayList<String>();
- classes.addAll(web.getRestClasses());
- classes.addAll(web.getEjbRestServices());
-
- for (String app : web.getRestApplications()) {
- Class<?> clazz;
- try {
- clazz = web.getClassLoader().loadClass(app);
- } catch (ClassNotFoundException e) {
- continue; // managed elsewhere, here we just check methods
- }
-
- final Application appInstance;
- try {
- appInstance = (Application) clazz.newInstance();
- } catch (Exception e) {
- continue; // managed elsewhere
- }
+ final ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ try {
+ for (EjbModule ejb : appModule.getEjbModules()) {
+ Thread.currentThread().setContextClassLoader(ejb.getClassLoader());
- for (Class<?> rsClass : appInstance.getClasses()) {
- classes.add(rsClass.getName());
- }
- for (Object rsSingleton : appInstance.getSingletons()) {
- classes.add(rsSingleton.getClass().getName());
+ for (EnterpriseBean bean : ejb.getEjbJar().getEnterpriseBeans()) {
+ if (bean instanceof SessionBean && ((SessionBean) bean).isRestService()) {
+ standAloneClasses.add(bean.getEjbClass());
+ valid(ejb.getValidation(), ejb.getClassLoader(), bean.getEjbClass());
+ }
}
}
- // try to avoid to valid twice the same classes
- final Iterator<String> it = classes.iterator();
- while (it.hasNext()) {
- final String current = it.next();
- if (standAloneClasses.contains(current)) {
- it.remove();
+ for (WebModule web : appModule.getWebModules()) {
+ Thread.currentThread().setContextClassLoader(web.getClassLoader());
+
+ // build the list of classes to validate
+ final Collection<String> classes = new ArrayList<String>();
+ classes.addAll(web.getRestClasses());
+ classes.addAll(web.getEjbRestServices());
+
+ for (String app : web.getRestApplications()) {
+ Class<?> clazz;
+ try {
+ clazz = web.getClassLoader().loadClass(app);
+ } catch (ClassNotFoundException e) {
+ continue; // managed elsewhere, here we just check methods
+ }
+
+ final Application appInstance;
+ try {
+ appInstance = (Application) clazz.newInstance();
+ } catch (Exception e) {
+ continue; // managed elsewhere
+ }
+
+ for (Class<?> rsClass : appInstance.getClasses()) {
+ classes.add(rsClass.getName());
+ }
+ for (Object rsSingleton : appInstance.getSingletons()) {
+ classes.add(rsSingleton.getClass().getName());
+ }
+ }
+
+ // try to avoid to valid twice the same classes
+ final Iterator<String> it = classes.iterator();
+ while (it.hasNext()) {
+ final String current = it.next();
+ if (standAloneClasses.contains(current)) {
+ it.remove();
+ }
+ }
+
+ // valid
+ for (String classname : classes) {
+ valid(web.getValidation(), web.getClassLoader(), classname);
}
- }
- // valid
- for (String classname : classes) {
- valid(web.getValidation(), web.getClassLoader(), classname);
+ classes.clear();
}
-
- classes.clear();
+ } finally {
+ Thread.currentThread().setContextClassLoader(loader);
}
standAloneClasses.clear();
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/rules/ValidationBase.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/rules/ValidationBase.java?rev=1416371&r1=1416370&r2=1416371&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/rules/ValidationBase.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/rules/ValidationBase.java Mon Dec 3 07:57:08 2012
@@ -40,13 +40,22 @@ public abstract class ValidationBase imp
DeploymentModule module;
public void validate(AppModule appModule) {
- for (EjbModule ejbModule : appModule.getEjbModules()) {
- module = ejbModule;
- validate(ejbModule);
- }
- for (ClientModule clientModule : appModule.getClientModules()) {
- module = clientModule;
- validate(clientModule);
+ final ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ try {
+ for (EjbModule ejbModule : appModule.getEjbModules()) {
+ Thread.currentThread().setContextClassLoader(ejbModule.getClassLoader());
+
+ module = ejbModule;
+ validate(ejbModule);
+ }
+ for (ClientModule clientModule : appModule.getClientModules()) {
+ Thread.currentThread().setContextClassLoader(clientModule.getClassLoader());
+
+ module = clientModule;
+ validate(clientModule);
+ }
+ } finally {
+ Thread.currentThread().setContextClassLoader(loader);
}
}