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