Author: rmannibucau
Date: Fri Jun  8 02:05:45 2012
New Revision: 1347863

URL: http://svn.apache.org/viewvc?rev=1347863&view=rev
Log:
@ManagedBean for rest services need to be created and destroyed by request - 
probably to work more

Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.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/config/AnnotationDeployer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=1347863&r1=1347862&r2=1347863&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
 Fri Jun  8 02:05:45 2012
@@ -5106,7 +5106,8 @@ public class AnnotationDeployer implemen
     private static boolean isEJB(Class<?> clazz) {
         return clazz.isAnnotationPresent(Stateless.class)
             || clazz.isAnnotationPresent(Singleton.class)
-            || clazz.isAnnotationPresent(Stateful.class); // what a weird idea!
+            || clazz.isAnnotationPresent(ManagedBean.class)  // what a weird 
idea!
+            || clazz.isAnnotationPresent(Stateful.class); // what another 
weird idea!
     }
 
     private static String realClassName(String rawClassName) {

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=1347863&r1=1347862&r2=1347863&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
 Fri Jun  8 02:05:45 2012
@@ -17,6 +17,7 @@
 package org.apache.openejb.server.cxf.rs;
 
 import java.rmi.RemoteException;
+import javax.ejb.EJBLocalHome;
 import javax.xml.ws.WebFault;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.jaxrs.JAXRSInvoker;
@@ -27,8 +28,11 @@ import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.FaultMode;
 import org.apache.cxf.message.MessageContentsList;
 import org.apache.openejb.BeanContext;
+import org.apache.openejb.InterfaceType;
 import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.ProxyInfo;
 import org.apache.openejb.RpcContainer;
+import org.apache.openejb.core.managed.ManagedContainer;
 import org.apache.openejb.rest.ThreadLocalContextManager;
 
 import javax.ws.rs.core.HttpHeaders;
@@ -90,10 +94,34 @@ public class OpenEJBEJBInvoker extends J
         }
 
         // invoking the EJB
+        final boolean  createAndDestroy = container instanceof 
ManagedContainer;
+        Object primKey = null;
         try {
+            if (createAndDestroy) {
+                Method create = null;
+                try {
+                    create = 
BeanContext.BusinessLocalBeanHome.class.getMethod("create");
+                } catch (NoSuchMethodException e) {
+                    // shouldn't occur
+                }
+
+                primKey = ((ProxyInfo) 
container.invoke(context.getDeploymentID(),
+                        InterfaceType.BUSINESS_LOCALBEAN_HOME,
+                        create.getDeclaringClass(), create, null, 
null)).getPrimaryKey();
+            }
+
             Object result = container.invoke(context.getDeploymentID(),
                 context.getInterfaceType(method.getDeclaringClass()),
-                method.getDeclaringClass(), method, parameters, null);
+                method.getDeclaringClass(), method, parameters, primKey);
+
+            if (createAndDestroy && !context.getRemoveMethods().isEmpty()) {
+                // should we cache such information?
+                final Method remove = 
context.getRemoveMethods().iterator().next();
+                container.invoke(context.getDeploymentID(),
+                        context.getInterfaceType(remove.getDeclaringClass()),
+                        remove.getDeclaringClass(), remove, null, primKey);
+            }
+
             return new MessageContentsList(result);
         } catch (OpenEJBException e) {
             Throwable cause = e.getCause();


Reply via email to