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