DeploymentLoader loader = new DeploymentLoader();
AppModule appModule = null;
try {
appModule = loader.load(new File(jarFilePath));
} catch (OpenEJBException e) {
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 {
readDescriptors.deploy(appModule);
} catch (OpenEJBException e) {
throw new ContributionReadException(e);
}
// Process annotations
AnnotationDeployer annDeployer = new AnnotationDeployer();
try {
annDeployer.deploy(appModule);
} catch (OpenEJBException e) {
throw new ContributionReadException(e);
}
return appModule;
}