Author: rmannibucau
Date: Tue Mar 19 07:43:55 2013
New Revision: 1458169

URL: http://svn.apache.org/r1458169
Log:
ensuring creation of rest service is not through the rest class classloader to 
be sure to use the right initialcontext

Modified:
    
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java

Modified: 
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java?rev=1458169&r1=1458168&r2=1458169&view=diff
==============================================================================
--- 
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java
 (original)
+++ 
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java
 Tue Mar 19 07:43:55 2013
@@ -60,6 +60,7 @@ public class OpenEJBPerRequestPojoResour
     protected final Constructor<?> constructor;
     protected final Method postConstructMethod;
     protected final Method preDestroyMethod;
+    protected final ClassLoader classLoader;
 
     private BeanCreator creator;
     private final Collection<Class<?>> contextTypes = new HashSet<Class<?>>();
@@ -67,7 +68,8 @@ public class OpenEJBPerRequestPojoResour
     public OpenEJBPerRequestPojoResourceProvider(final Class<?> clazz, final 
Collection<Injection> injectionCollection, final Context initialContext, final 
WebBeansContext owbCtx) {
         injections = injectionCollection;
         webbeansContext = owbCtx;
-        context = (Context) Proxy.newProxyInstance(clazz.getClassLoader(), new 
Class<?>[]{Context.class}, new InitialContextWrapper(initialContext));
+        classLoader = clazz.getClassLoader();
+        context = (Context) Proxy.newProxyInstance(classLoader, new 
Class<?>[]{Context.class}, new InitialContextWrapper(initialContext));
 
         constructor = ResourceUtils.findResourceConstructor(clazz, true);
         if (constructor == null) {
@@ -120,11 +122,16 @@ public class OpenEJBPerRequestPojoResour
             creator = new DefaultBeanCreator(m);
         }
 
+        // important to switch of classloader to get the right InitialContext
+        final ClassLoader oldLoader = 
Thread.currentThread().getContextClassLoader();
+        Thread.currentThread().setContextClassLoader(classLoader);
         try {
             return creator.create();
         } catch (NoBeanFoundException nbfe) {
             creator = new DefaultBeanCreator(m);
             return creator.create();
+        } finally {
+            Thread.currentThread().setContextClassLoader(oldLoader);
         }
     }
 


Reply via email to