You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/03/28 11:02:27 UTC

svn commit: r1306220 - in /openejb/trunk/openejb: container/openejb-core/src/main/java/org/apache/openejb/core/ server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/ server/openejb-rest/src/main/java/org/apache/openejb/server/rest/

Author: rmannibucau
Date: Wed Mar 28 09:02:27 2012
New Revision: 1306220

URL: http://svn.apache.org/viewvc?rev=1306220&view=rev
Log:
managing injections in pojo rest services

Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java
    openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
    openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java
    openejb/trunk/openejb/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java
    openejb/trunk/openejb/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsHttpListener.java

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java?rev=1306220&r1=1306219&r2=1306220&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java Wed Mar 28 09:02:27 2012
@@ -16,6 +16,13 @@
  */
 package org.apache.openejb.core;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Map;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
 import org.apache.openejb.AppContext;
 import org.apache.openejb.Injection;
 import org.apache.openejb.InjectionProcessor;
@@ -25,19 +32,6 @@ import org.apache.webbeans.component.Inj
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.inject.AbstractInjectable;
 
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.enterprise.context.spi.CreationalContext;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Map;
-
 public class WebContext {
     private String id;
     private ClassLoader classLoader;

Modified: openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java?rev=1306220&r1=1306219&r2=1306220&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java (original)
+++ openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java Wed Mar 28 09:02:27 2012
@@ -46,6 +46,7 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import org.apache.webbeans.config.WebBeansContext;
 
 /**
  * System property:
@@ -92,8 +93,8 @@ public class CxfRsHttpListener implement
         deploy(o.getClass(), fullContext, new SingletonResourceProvider(o), o, appInstance, null);
     }
 
-    @Override public void deployPojo(String fullContext, Class<?> loadedClazz, Application app, Collection<Injection> injections, Context context) {
-        deploy(loadedClazz, fullContext, new OpenEJBPerRequestPojoResourceProvider(loadedClazz, injections, context), null, app, null);
+    @Override public void deployPojo(String fullContext, Class<?> loadedClazz, Application app, Collection<Injection> injections, Context context, WebBeansContext owbCtx) {
+        deploy(loadedClazz, fullContext, new OpenEJBPerRequestPojoResourceProvider(loadedClazz, injections, context, owbCtx), null, app, null);
     }
 
     @Override public void deployEJB(String fullContext, BeanContext beanContext) {

Modified: openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java?rev=1306220&r1=1306219&r2=1306220&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java (original)
+++ openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java Wed Mar 28 09:02:27 2012
@@ -29,14 +29,18 @@ import org.apache.cxf.jaxrs.lifecycle.Pe
 import org.apache.cxf.message.Message;
 import org.apache.openejb.Injection;
 import org.apache.openejb.InjectionProcessor;
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.inject.OWBInjector;
 
 public class OpenEJBPerRequestPojoResourceProvider extends PerRequestResourceProvider {
     protected Collection<Injection> injections;
     protected Context context;
+    protected WebBeansContext webbeansContext;
 
-    public OpenEJBPerRequestPojoResourceProvider(Class<?> clazz, Collection<Injection> injectionCollection, Context ctx) {
+    public OpenEJBPerRequestPojoResourceProvider(Class<?> clazz, Collection<Injection> injectionCollection, Context ctx, WebBeansContext owbCtx) {
         super(clazz);
         injections = injectionCollection;
+        webbeansContext = owbCtx;
         context = ctx;
         if (ctx == null) {
             // TODO: context shouldn't be null here so it should be removed
@@ -61,8 +65,14 @@ public class OpenEJBPerRequestPojoResour
     protected Object createInstance(Message m) {
         Object o = super.createInstance(m);
         try {
-            InjectionProcessor<?> injector = new InjectionProcessor<Object>(o, new ArrayList<Injection>(injections), InjectionProcessor.unwrap(context));
+            final InjectionProcessor<?> injector = new InjectionProcessor<Object>(o, new ArrayList<Injection>(injections), InjectionProcessor.unwrap(context));
             injector.createInstance();
+            try {
+                final OWBInjector beanInjector = new OWBInjector(webbeansContext);
+                beanInjector.inject(injector.getInstance());
+            } catch (Throwable t) {
+                // ignored
+            }
             injector.postConstruct();
             return injector.getInstance();
         } catch (Exception e) {

Modified: openejb/trunk/openejb/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java?rev=1306220&r1=1306219&r2=1306220&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java (original)
+++ openejb/trunk/openejb/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java Wed Mar 28 09:02:27 2012
@@ -57,6 +57,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
+import org.apache.webbeans.config.WebBeansContext;
 
 public abstract class RESTService implements ServerService, SelfManaging, DeploymentListener {
     public static final Logger LOGGER = Logger.getInstance(LogCategory.OPENEJB_RS, RESTService.class);
@@ -88,7 +89,11 @@ public abstract class RESTService implem
 
         final ClassLoader classLoader = getClassLoader(webContext.getClassLoader());
         final Collection<Injection> injections = webContext.getInjections();
-        final Context context = webContext.getJndiEnc();
+        final WebBeansContext owbCtx = webContext.getAppContext().getWebBeansContext();
+        Context context = webContext.getJndiEnc();
+        if (context == null) { // usually true since it is set in org.apache.tomee.catalina.TomcatWebAppBuilder.afterStart() and lookup(comp) fails
+            context = webContext.getAppContext().getAppJndiContext();
+        }
 
         // The spec says:
         //
@@ -147,7 +152,7 @@ public abstract class RESTService implem
                 if (restEjbs.containsKey(clazz.getName())) {
                     deployEJB(appPrefix, restEjbs.get(clazz.getName()).context);
                 } else {
-                    deployPojo(appPrefix, clazz, appInstance, classLoader, injections, context);
+                    deployPojo(appPrefix, clazz, appInstance, classLoader, injections, context, owbCtx);
                 }
             }
 
@@ -162,7 +167,7 @@ public abstract class RESTService implem
                 } else {
                     try {
                         Class<?> loadedClazz = classLoader.loadClass(clazz);
-                        deployPojo(appPrefix, loadedClazz, null, classLoader, injections, context);
+                        deployPojo(appPrefix, loadedClazz, null, classLoader, injections, context, owbCtx);
                     } catch (ClassNotFoundException e) {
                         throw new OpenEJBRestRuntimeException("can't find class " + clazz, e);
                     }
@@ -249,7 +254,7 @@ public abstract class RESTService implem
         return address.substring(0, idx) + contextRoot;
     }
 
-    private void deployPojo(String contextRoot, Class<?> loadedClazz, Application app, ClassLoader classLoader, Collection<Injection> injections, Context context) {
+    private void deployPojo(String contextRoot, Class<?> loadedClazz, Application app, ClassLoader classLoader, Collection<Injection> injections, Context context, WebBeansContext owbCtx) {
         if (loadedClazz.isInterface()) {
             return;
         }
@@ -259,7 +264,7 @@ public abstract class RESTService implem
         final RsRegistry.AddressInfo address = rsRegistry.createRsHttpListener(contextRoot, listener, classLoader, nopath.substring(NOPATH_PREFIX.length() - 1), virtualHost);
 
         services.add(address.complete);
-        listener.deployPojo(getFullContext(address.base, contextRoot), loadedClazz, app, injections, context);
+        listener.deployPojo(getFullContext(address.base, contextRoot), loadedClazz, app, injections, context, owbCtx);
 
         LOGGER.info("REST Service: " + address.complete + "  -> Pojo " + loadedClazz.getName());
     }

Modified: openejb/trunk/openejb/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsHttpListener.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsHttpListener.java?rev=1306220&r1=1306219&r2=1306220&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsHttpListener.java (original)
+++ openejb/trunk/openejb/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsHttpListener.java Wed Mar 28 09:02:27 2012
@@ -23,11 +23,12 @@ import javax.ws.rs.core.Application;
 import org.apache.openejb.BeanContext;
 import org.apache.openejb.Injection;
 import org.apache.openejb.server.httpd.HttpListener;
+import org.apache.webbeans.config.WebBeansContext;
 
 public interface RsHttpListener extends HttpListener {
     void deploySingleton(String fullContext, Object o, Application appInstance);
 
-    void deployPojo(String fullContext, Class<?> loadedClazz, Application app, Collection<Injection> injections, Context context);
+    void deployPojo(String fullContext, Class<?> loadedClazz, Application app, Collection<Injection> injections, Context context, WebBeansContext owbCtx);
 
     void deployEJB(String fullContext, BeanContext beanContext);