diff options
author | vamsic007 <vamsic007@13f79535-47bb-0310-9956-ffa450edef68> | 2009-10-07 19:37:13 +0000 |
---|---|---|
committer | vamsic007 <vamsic007@13f79535-47bb-0310-9956-ffa450edef68> | 2009-10-07 19:37:13 +0000 |
commit | dfa48b369187a71c6d2966992bacf74d7017cbc2 (patch) | |
tree | 7cfd8c692116fef14be220e7fdf36d8bc1a7225f /branches/sca-java-1.x/modules | |
parent | 8c9edef79f8c0c8398f6a690c8772690041944a9 (diff) |
Set the context class loader as the module's class loader instead of the temporary class loaders created by OpenEJB to allow SCA annotation processing.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@822871 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'branches/sca-java-1.x/modules')
-rw-r--r-- | branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/JavaEEModuleHelper.java | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/JavaEEModuleHelper.java b/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/JavaEEModuleHelper.java index ccb66e8965..a903f6dbc0 100644 --- a/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/JavaEEModuleHelper.java +++ b/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/JavaEEModuleHelper.java @@ -25,7 +25,9 @@ import org.apache.openejb.OpenEJBException; import org.apache.openejb.config.AnnotationDeployer; import org.apache.openejb.config.AppModule; import org.apache.openejb.config.DeploymentLoader; +import org.apache.openejb.config.EjbModule; import org.apache.openejb.config.ReadDescriptors; +import org.apache.openejb.config.WebModule; import org.apache.tuscany.sca.contribution.service.ContributionReadException; /** @@ -42,6 +44,64 @@ public class JavaEEModuleHelper { throw new ContributionReadException(e); } + // Set the Thread context class loader as the module's class loader and all the Web and EJB modules + // inside. Otherwise, SCA annotations could not be processed + // TODO: Eliminate the use of reflection for setting the class loader + java.lang.reflect.Field field = null; + try { + field = appModule.getClass().getDeclaredField("classLoader"); + } catch (SecurityException e) { + throw new ContributionReadException(e); + } catch (NoSuchFieldException e) { + throw new ContributionReadException(e); + } + field.setAccessible(true); + try{ + field.set(appModule, Thread.currentThread().getContextClassLoader()); + } catch (IllegalArgumentException e) { + throw new ContributionReadException(e); + } catch (IllegalAccessException e) { + throw new ContributionReadException(e); + } + + for(EjbModule ejbModule:appModule.getEjbModules()) { + java.lang.reflect.Field field1 = null; + try { + field1 = ejbModule.getClass().getDeclaredField("classLoader"); + } catch (SecurityException e) { + throw new ContributionReadException(e); + } catch (NoSuchFieldException e) { + throw new ContributionReadException(e); + } + field1.setAccessible(true); + try { + field1.set(ejbModule, Thread.currentThread().getContextClassLoader()); + } catch (IllegalArgumentException e) { + throw new ContributionReadException(e); + } catch (IllegalAccessException e) { + throw new ContributionReadException(e); + } + } + + for(WebModule webModule:appModule.getWebModules()) { + java.lang.reflect.Field field1 = null; + try { + field1 = webModule.getClass().getDeclaredField("classLoader"); + } catch (SecurityException e) { + throw new ContributionReadException(e); + } catch (NoSuchFieldException e) { + throw new ContributionReadException(e); + } + field1.setAccessible(true); + try { + field1.set(webModule, Thread.currentThread().getContextClassLoader()); + } catch (IllegalArgumentException e) { + throw new ContributionReadException(e); + } catch (IllegalAccessException e) { + throw new ContributionReadException(e); + } + } + // Process deployment descriptor files ReadDescriptors readDescriptors = new ReadDescriptors(); try { |