Author: rmannibucau
Date: Wed May 30 15:58:53 2012
New Revision: 1344319

URL: http://svn.apache.org/viewvc?rev=1344319&view=rev
Log:
TOMEE-207 oops some code was missing in last commit

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

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=1344319&r1=1344318&r2=1344319&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 May 30 15:58:53 2012
@@ -27,7 +27,7 @@ import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.Response;
-import org.apache.cxf.jaxrs.lifecycle.PerRequestResourceProvider;
+import org.apache.cxf.jaxrs.lifecycle.ResourceProvider;
 import org.apache.cxf.jaxrs.utils.InjectionUtils;
 import org.apache.cxf.jaxrs.utils.ResourceUtils;
 import org.apache.cxf.message.Message;
@@ -37,18 +37,20 @@ import org.apache.openejb.OpenEJBExcepti
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.inject.OWBInjector;
 
-// the constructor part is mainly copied from the parent since all is private
+// the constructor part is mainly copied from the PerrequestResourceProvider 
since all is private
 // and we want to invoke postconstrut ourself
-public class OpenEJBPerRequestPojoResourceProvider extends 
PerRequestResourceProvider {
+public class OpenEJBPerRequestPojoResourceProvider implements ResourceProvider 
{
     protected Collection<Injection> injections;
     protected Context context;
     protected WebBeansContext webbeansContext;
     protected InjectionProcessor<Object> injector;
     protected OWBInjector beanInjector;
     protected Constructor<?> constructor;
+    protected Method postConstructMethod;
+    protected Method preDestroyMethod;
+
 
     public OpenEJBPerRequestPojoResourceProvider(final Class<?> clazz, final 
Collection<Injection> injectionCollection, final Context initialContext, final 
WebBeansContext owbCtx) {
-        super(clazz);
         injections = injectionCollection;
         webbeansContext = owbCtx;
         context = (Context) Proxy.newProxyInstance(clazz.getClassLoader(), new 
Class<?>[]{Context.class}, new InitialContextWrapper(initialContext));
@@ -58,10 +60,12 @@ public class OpenEJBPerRequestPojoResour
             throw new RuntimeException("Resource class " + clazz
                     + " has no valid constructor");
         }
+        postConstructMethod = ResourceUtils.findPostConstructMethod(clazz);
+        preDestroyMethod = ResourceUtils.findPreDestroyMethod(clazz);
     }
 
     @Override
-    protected Object createInstance(Message m) {
+    public Object getInstance(Message m) {
         Object[] values = 
ResourceUtils.createConstructorArguments(constructor, m);
         try {
             final Object instance = values.length > 0 ? 
constructor.newInstance(values) : constructor.newInstance(new Object[]{});
@@ -73,7 +77,8 @@ public class OpenEJBPerRequestPojoResour
             } catch (Throwable t) {
                 // ignored
             }
-            injector.postConstruct();
+            // injector.postConstruct(); // he doesn't know it
+            InjectionUtils.invokeLifeCycleMethod(instance, 
postConstructMethod);
             return injector.getInstance();
         } catch (InstantiationException ex) {
             final String msg = "Resource class " + 
constructor.getDeclaringClass().getName() + " can not be instantiated";
@@ -95,18 +100,33 @@ public class OpenEJBPerRequestPojoResour
 
     @Override
     public void releaseInstance(Message m, Object o) {
+        // we can't give it to the injector so let's do it manually
         try {
-            if (beanInjector != null) {
-                beanInjector.destroy();
+            InjectionUtils.invokeLifeCycleMethod(o, preDestroyMethod);
+        } finally {
+            try {
+                if (beanInjector != null) {
+                    beanInjector.destroy();
+                }
+            } catch (Throwable t) {
+                // ignored
+            }
+            if (injector != null) {
+                injector.preDestroy();
             }
-        } catch (Throwable t) {
-            // ignored
-        }
-        if (injector != null) {
-            injector.preDestroy();
         }
     }
 
+    @Override
+    public Class<?> getResourceClass() {
+        return constructor.getDeclaringClass();
+    }
+
+    @Override
+    public boolean isSingleton() {
+        return false;
+    }
+
     private static class InitialContextWrapper implements InvocationHandler {
         private Context ctx;
 

Modified: 
openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/HookedRest.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/HookedRest.java?rev=1344319&r1=1344318&r2=1344319&view=diff
==============================================================================
--- 
openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/HookedRest.java
 (original)
+++ 
openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/HookedRest.java
 Wed May 30 15:58:53 2012
@@ -17,15 +17,17 @@
 package org.apache.openejb.server.cxf.rs.beans;
 
 import javax.annotation.PostConstruct;
+import javax.inject.Inject;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 
 @Path("/hooked")
 public class HookedRest {
     private boolean post = false;
+    @Inject private SimpleEJB ejb;
 
     @PostConstruct public void post() {
-        post  = true;
+        post  = true && ejb != null;
     }
 
     @Path("/post") @GET public boolean wasPosted() {


Reply via email to