Author: rmannibucau
Date: Tue Jul 24 19:16:35 2012
New Revision: 1365233

URL: http://svn.apache.org/viewvc?rev=1365233&view=rev
Log:
TOMEE-339 @Context Providers

Added:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalProviders.java
    
openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RsInjectionTest.java
Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalContextManager.java
    
openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBEJBInvoker.java

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java?rev=1365233&r1=1365232&r2=1365233&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
 Tue Jul 24 19:16:35 2012
@@ -67,6 +67,7 @@ import javax.ws.rs.core.Request;
 import javax.ws.rs.core.SecurityContext;
 import javax.ws.rs.core.UriInfo;
 import javax.ws.rs.ext.ContextResolver;
+import javax.ws.rs.ext.Providers;
 import javax.xml.ws.Service;
 import javax.xml.ws.WebServiceContext;
 import java.io.Serializable;
@@ -291,6 +292,8 @@ public class JndiEncBuilder {
                 reference = new 
ObjectReference(ThreadLocalContextManager.SECURITY_CONTEXT);
             } else if (ContextResolver.class.equals(type)) {
                 reference = new 
ObjectReference(ThreadLocalContextManager.CONTEXT_RESOLVER);
+            } else if (Providers.class.equals(type)) {
+                reference = new 
ObjectReference(ThreadLocalContextManager.PROVIDERS);
             } else if (referenceInfo.resourceID != null) {
                 String jndiName = "openejb/Resource/" + 
referenceInfo.resourceID;
                 reference = new IntraVmJndiReference(jndiName);

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java?rev=1365233&r1=1365232&r2=1365233&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
 Tue Jul 24 19:16:35 2012
@@ -74,6 +74,7 @@ import javax.ws.rs.core.Request;
 import javax.ws.rs.core.SecurityContext;
 import javax.ws.rs.core.UriInfo;
 import javax.ws.rs.ext.ContextResolver;
+import javax.ws.rs.ext.Providers;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -131,6 +132,7 @@ public class AutoConfig implements Dynam
         ignoredReferenceTypes.add(SecurityContext.class.getName());
         ignoredReferenceTypes.add(ContextResolver.class.getName());
         ignoredReferenceTypes.add(Application.class.getName());
+        ignoredReferenceTypes.add(Providers.class.getName());
     }
 
     private final ConfigurationFactory configFactory;

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java?rev=1365233&r1=1365232&r2=1365233&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
 Tue Jul 24 19:16:35 2012
@@ -19,6 +19,9 @@ package org.apache.openejb.junit;
 import org.apache.openejb.AppContext;
 import org.apache.openejb.BeanContext;
 import org.apache.openejb.InjectionProcessor;
+import org.apache.openejb.OpenEJB;
+import org.apache.openejb.OpenEJBRuntimeException;
+import org.apache.openejb.OpenEjbContainer;
 import org.apache.openejb.assembler.classic.AppInfo;
 import org.apache.openejb.assembler.classic.Assembler;
 import org.apache.openejb.config.AppModule;
@@ -45,6 +48,7 @@ import org.apache.openejb.jee.oejb3.Open
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.spi.ContainerSystem;
 import org.apache.openejb.util.Join;
+import org.apache.openejb.util.ServiceManagerProxy;
 import org.apache.webbeans.inject.OWBInjector;
 import org.apache.xbean.finder.AnnotationFinder;
 import org.apache.xbean.finder.archive.ClassesArchive;
@@ -68,6 +72,7 @@ public class ApplicationComposer extends
 
     public static final String OPENEJB_APPLICATION_COMPOSER_CONTEXT = 
"openejb.application.composer.context";
     private final TestClass testClass;
+    private ServiceManagerProxy serviceManager = null;
 
     public ApplicationComposer(Class<?> klass) throws InitializationError {
         super(klass);
@@ -286,6 +291,17 @@ public class ApplicationComposer extends
                 config.init(SystemInstance.get().getProperties());
 
                 Assembler assembler = new Assembler();
+                SystemInstance.get().setComponent(Assembler.class, assembler);
+
+                if 
("true".equals(configuration.getProperty(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE,
 "false"))) {
+                    try {
+                        serviceManager = new ServiceManagerProxy();
+                        serviceManager.start();
+                    } catch (ServiceManagerProxy.AlreadyStartedException e) {
+                        throw new OpenEJBRuntimeException(e);
+                    }
+                }
+
                 
assembler.buildContainerSystem(config.getOpenEjbConfiguration());
 
                 final AppInfo appInfo = config.configureApplication(appModule);
@@ -333,6 +349,14 @@ public class ApplicationComposer extends
                     assembler.destroyApplication(appInfo.path);
                 }
             } finally {
+                if (serviceManager != null) {
+                    try {
+                        serviceManager.stop();
+                    } catch (RuntimeException ignored) {
+                        // no-op
+                    }
+                }
+                OpenEJB.destroy();
                 SystemInstance.reset();
             }
         }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalContextManager.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalContextManager.java?rev=1365233&r1=1365232&r2=1365233&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalContextManager.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalContextManager.java
 Tue Jul 24 19:16:35 2012
@@ -25,6 +25,7 @@ public class ThreadLocalContextManager {
     public static final ThreadLocalHttpHeaders HTTP_HEADERS = new 
ThreadLocalHttpHeaders();
     public static final ThreadLocalSecurityContext SECURITY_CONTEXT = new 
ThreadLocalSecurityContext();
     public static final ThreadLocalContextResolver CONTEXT_RESOLVER = new 
ThreadLocalContextResolver();
+    public static final ThreadLocalProviders PROVIDERS = new 
ThreadLocalProviders();
     public static final ThreadLocal<Application> APPLICATION = new 
ThreadLocal<Application>();
 
     public static void reset() {
@@ -33,6 +34,7 @@ public class ThreadLocalContextManager {
         HTTP_HEADERS.remove();
         SECURITY_CONTEXT.remove();
         CONTEXT_RESOLVER.remove();
+        PROVIDERS.remove();
         APPLICATION.remove();
     }
 }

Added: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalProviders.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalProviders.java?rev=1365233&view=auto
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalProviders.java
 (added)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalProviders.java
 Tue Jul 24 19:16:35 2012
@@ -0,0 +1,34 @@
+package org.apache.openejb.rest;
+
+import org.apache.openejb.core.ivm.naming.AbstractThreadLocalProxy;
+
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.ext.ContextResolver;
+import javax.ws.rs.ext.ExceptionMapper;
+import javax.ws.rs.ext.MessageBodyReader;
+import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Providers;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+
+public class ThreadLocalProviders extends AbstractThreadLocalProxy<Providers> 
implements Providers {
+    @Override
+    public <T> ContextResolver<T> getContextResolver(Class<T> rawType, 
MediaType mediaType) {
+        return get().getContextResolver(rawType, mediaType);
+    }
+
+    @Override
+    public <T extends Throwable> ExceptionMapper<T> 
getExceptionMapper(Class<T> rawType) {
+        return get().getExceptionMapper(rawType);
+    }
+
+    @Override
+    public <T> MessageBodyReader<T> getMessageBodyReader(Class<T> rawType, 
Type genericType, Annotation[] annotations, MediaType mediaType) {
+        return get().getMessageBodyReader(rawType, genericType, annotations, 
mediaType);
+    }
+
+    @Override
+    public <T> MessageBodyWriter<T> getMessageBodyWriter(Class<T> rawType, 
Type genericType, Annotation[] annotations, MediaType mediaType) {
+        return get().getMessageBodyWriter(rawType, genericType, annotations, 
mediaType);
+    }
+}

Modified: 
openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBEJBInvoker.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBEJBInvoker.java?rev=1365233&r1=1365232&r2=1365233&view=diff
==============================================================================
--- 
openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBEJBInvoker.java
 (original)
+++ 
openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBEJBInvoker.java
 Tue Jul 24 19:16:35 2012
@@ -26,6 +26,8 @@ import javax.ws.rs.core.Response;
 import javax.ws.rs.core.SecurityContext;
 import javax.ws.rs.core.UriInfo;
 import javax.ws.rs.ext.ContextResolver;
+import javax.ws.rs.ext.Providers;
+
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.jaxrs.JAXRSInvoker;
 import org.apache.cxf.jaxrs.model.ClassResourceInfo;
@@ -83,6 +85,9 @@ public class OpenEJBEJBInvoker extends J
             } else if (ContextResolver.class.equals(type)) {
                 ContextResolver<?> binding = 
JAXRSUtils.createContextValue(exchange.getInMessage(), type, 
ContextResolver.class);
                 ThreadLocalContextManager.CONTEXT_RESOLVER.set(binding);
+            } else if (Providers.class.equals(type)) {
+                Providers providers = 
JAXRSUtils.createContextValue(exchange.getInMessage(), null, Providers.class);
+                ThreadLocalContextManager.PROVIDERS.set(providers);
             }
         }
 

Added: 
openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RsInjectionTest.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RsInjectionTest.java?rev=1365233&view=auto
==============================================================================
--- 
openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RsInjectionTest.java
 (added)
+++ 
openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RsInjectionTest.java
 Tue Jul 24 19:16:35 2012
@@ -0,0 +1,55 @@
+package org.apache.openejb.server.cxf.rs;
+
+import org.apache.openejb.OpenEjbContainer;
+import org.apache.openejb.jee.SingletonBean;
+import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.junit.Configuration;
+import org.apache.openejb.junit.Module;
+import org.apache.openejb.loader.IO;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.ejb.Singleton;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.ext.Providers;
+import java.io.IOException;
+import java.net.URL;
+import java.util.Properties;
+
+import static org.junit.Assert.assertEquals;
+
+@RunWith(ApplicationComposer.class)
+public class RsInjectionTest {
+    @Module
+    public static SingletonBean service() throws Exception {
+        return (SingletonBean) new 
SingletonBean(RsInjection.class).localBean();
+    }
+
+    @Configuration
+    public static Properties configuration() throws Exception {
+        final Properties properties = new Properties();
+        properties.setProperty(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE, 
"true");
+        return properties;
+    }
+
+    @Test
+    public void rest() throws IOException {
+        final String response = IO.slurp(new 
URL("http://127.0.0.1:4204/RsInjectionTest/injections/check";));
+        assertEquals("true", response);
+    }
+
+    @Singleton
+    @Path("/injections")
+    public static class RsInjection {
+        @Context
+        private Providers providers;
+
+        @GET
+        @Path("/check")
+        public boolean check() {
+            return providers != null;
+        }
+    }
+}


Reply via email to