Author: vamsic007
Date: Wed Oct  7 19:37:13 2009
New Revision: 822871

URL: http://svn.apache.org/viewvc?rev=822871&view=rev
Log:
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.

Modified:
    
tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/JavaEEModuleHelper.java

Modified: 
tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/JavaEEModuleHelper.java
URL: 
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/JavaEEModuleHelper.java?rev=822871&r1=822870&r2=822871&view=diff
==============================================================================
--- 
tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/JavaEEModuleHelper.java
 (original)
+++ 
tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/JavaEEModuleHelper.java
 Wed Oct  7 19:37:13 2009
@@ -25,7 +25,9 @@
 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 @@
             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 {


Reply via email to