Author: rmannibucau Date: Thu Feb 7 13:13:21 2013 New Revision: 1443448 URL: http://svn.apache.org/viewvc?rev=1443448&view=rev Log: TOMEE-762 TOMEE-761 TOMEE-760 cdiejbbean should be passivation capable + xbean 3.13 + org.apache.cxf.transport.endpoint.address attribute for rest services
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java tomee/tomee/trunk/pom.xml tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/Contexts.java tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java tomee/tomee/trunk/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RsInterceptorInjectionTest.java tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java?rev=1443448&r1=1443447&r2=1443448&view=diff ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java (original) +++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java Thu Feb 7 13:13:21 2013 @@ -41,6 +41,7 @@ import javax.enterprise.inject.spi.Injec import javax.enterprise.inject.spi.SessionBeanType; import javax.persistence.EntityManager; import java.io.Serializable; +import java.lang.annotation.Annotation; import java.lang.reflect.Member; import java.lang.reflect.Method; import java.lang.reflect.UndeclaredThrowableException; @@ -66,6 +67,7 @@ public class CdiEjbBean<T> extends BaseE super(beanClass, toSessionType(beanContext.getComponentType()), webBeansContext); this.beanContext = beanContext; beanContext.set(Bean.class, this); + passivatingId = beanContext.getDeploymentID() + getReturnType().getName(); } @Override // copied to be able to produce EM (should be fixed in OWB for next CDI spec) @@ -153,11 +155,6 @@ public class CdiEjbBean<T> extends BaseE } @Override - public String getId() { - return beanContext.getDeploymentID() + getReturnType().getName(); - } - - @Override protected void afterConstructor(T instance, CreationalContext<T> tCreationalContext) { // no-op } @@ -216,23 +213,6 @@ public class CdiEjbBean<T> extends BaseE @SuppressWarnings("unchecked") protected T getInstance(final CreationalContext<T> creationalContext) { return createEjb(creationalContext); - - /* - final T instance; - if (scopeClass == null || Dependent.class == scopeClass) { // no need to add any layer, null = @New - instance = createEjb(creationalContext); - } else { // only stateful normally - final InstanceBean<T> bean = new InstanceBean<T>(this); - if (webBeansContext.getBeanManagerImpl().isScopeTypeNormal(scopeClass)) { - instance = (T) webBeansContext.getProxyFactory().createNormalScopedBeanProxy(bean, creationalContext); - } else { - final Context context = webBeansContext.getBeanManagerImpl().getContext(scopeClass); - instance = context.get(bean, creationalContext); - } - bean.setOWBProxy(instance); - } - return instance; - */ } @Override @@ -310,8 +290,9 @@ public class CdiEjbBean<T> extends BaseE * @see org.apache.webbeans.component.AbstractBean#isPassivationCapable() */ @Override - public boolean isPassivationCapable() { - return getWebBeansContext().getBeanManagerImpl().isPassivatingScope(getScope()); + public boolean isPassivationCapable() { // dependent means EJB serialization + final Class<? extends Annotation> scope = getScope(); + return Dependent.class.equals(scope) || getWebBeansContext().getBeanManagerImpl().isPassivatingScope(scope); } @SuppressWarnings("unchecked") Modified: tomee/tomee/trunk/pom.xml URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/pom.xml?rev=1443448&r1=1443447&r2=1443448&view=diff ============================================================================== --- tomee/tomee/trunk/pom.xml (original) +++ tomee/tomee/trunk/pom.xml Thu Feb 7 13:13:21 2013 @@ -97,7 +97,7 @@ <maven-bundle-plugin.version>2.3.7</maven-bundle-plugin.version> <!-- This is used by a manifest classpath entry --> - <xbeanVersion>3.12</xbeanVersion> + <xbeanVersion>3.13-SNAPSHOT</xbeanVersion> <!-- OSGi bundles properties --> <openejb.bundle.activator/> Modified: tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/Contexts.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/Contexts.java?rev=1443448&r1=1443447&r2=1443448&view=diff ============================================================================== --- tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/Contexts.java (original) +++ tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/Contexts.java Thu Feb 7 13:13:21 2013 @@ -115,6 +115,9 @@ public final class Contexts { ThreadLocalContextManager.PROVIDERS.set(providers); } else if (ServletRequest.class.equals(type)) { ServletRequest servletRequest = JAXRSUtils.createContextValue(exchange.getInMessage(), null, ServletRequest.class); + if (servletRequest == null) { // probably the case with CXF + servletRequest = JAXRSUtils.createContextValue(exchange.getInMessage(), null, HttpServletRequest.class); + } ThreadLocalContextManager.SERVLET_REQUEST.set(servletRequest); } else if (HttpServletRequest.class.equals(type)) { HttpServletRequest httpServletRequest = JAXRSUtils.createContextValue(exchange.getInMessage(), null, HttpServletRequest.class); Modified: tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java?rev=1443448&r1=1443447&r2=1443448&view=diff ============================================================================== --- tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java (original) +++ tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java Thu Feb 7 13:13:21 2013 @@ -31,6 +31,7 @@ import org.apache.cxf.jaxrs.provider.jso import org.apache.cxf.service.invoker.Invoker; import org.apache.cxf.transport.http.AbstractHTTPDestination; import org.apache.cxf.transport.http.HTTPTransportFactory; +import org.apache.cxf.transport.servlet.BaseUrlHelper; import org.apache.openejb.BeanContext; import org.apache.openejb.Injection; import org.apache.openejb.assembler.classic.ServiceInfo; @@ -111,6 +112,13 @@ public class CxfRsHttpListener implement return; } + // fix the address (to manage multiple connectors) + if (httpRequest instanceof HttpRequestImpl) { + ((HttpRequestImpl) httpRequest).initPathFromContext(context); + } + httpRequest.setAttribute("org.apache.cxf.transport.endpoint.address", BaseUrlHelper.getBaseURL(httpRequest) + "/"); + + // delegate invocation destination.invoke(null, httpRequest.getServletContext(), new HttpServletRequestWrapper(httpRequest) { // see org.apache.cxf.jaxrs.utils.HttpUtils.getPathToMatch() // cxf uses implicitly getRawPath() from the endpoint but not for the request URI Modified: tomee/tomee/trunk/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RsInterceptorInjectionTest.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RsInterceptorInjectionTest.java?rev=1443448&r1=1443447&r2=1443448&view=diff ============================================================================== --- tomee/tomee/trunk/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RsInterceptorInjectionTest.java (original) +++ tomee/tomee/trunk/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RsInterceptorInjectionTest.java Thu Feb 7 13:13:21 2013 @@ -31,6 +31,7 @@ import javax.ejb.Singleton; import javax.interceptor.AroundInvoke; import javax.interceptor.Interceptors; import javax.interceptor.InvocationContext; +import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.GET; @@ -100,10 +101,9 @@ public class RsInterceptorInjectionTest @Context private HttpServletRequest httpServletRequest; -// TODO TOMEE-684 -// @Context -// private ServletRequest servletRequest; -// + @Context + private ServletRequest servletRequest; + @Context private UriInfo uriInfo; @@ -113,7 +113,7 @@ public class RsInterceptorInjectionTest @Context private ContextResolver contextResolver; -// TODO TOMEE-685 +// TODO TOMEE-685 - does it make sense since we don't define a strict servlet? // @Context // private ServletConfig servletConfig; Modified: tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java?rev=1443448&r1=1443447&r2=1443448&view=diff ============================================================================== --- tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java (original) +++ tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java Thu Feb 7 13:13:21 2013 @@ -143,6 +143,7 @@ public class HttpRequestImpl implements private HttpSession session; private String encoding = "UTF-8"; private ServletContext context = null; + private String contextPath = ""; public HttpRequestImpl(URI socketURI) { this.socketURI = socketURI; @@ -721,7 +722,7 @@ public class HttpRequestImpl implements @Override public String getContextPath() { - return path; + return contextPath; } public String extractContextPath() { @@ -1022,7 +1023,14 @@ public class HttpRequestImpl implements final String rawPath = requestRawPath(); if (context != null) { - setPath(rawPath.substring(1 + context.length(), rawPath.length())); // 1 because of the first / + if (context.endsWith("/")) { + final int endIndex = context.length() - 1; + path = rawPath.substring(endIndex, rawPath.length()); + contextPath = context.substring(0, endIndex); + } else { + path = rawPath.substring(context.length(), rawPath.length()); // 1 because of the first / + contextPath = context; + } } }