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 {