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); } }