Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 3499C200BCE for ; Mon, 24 Oct 2016 17:06:49 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 31B22160B00; Mon, 24 Oct 2016 15:06:49 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id E1774160B1A for ; Mon, 24 Oct 2016 16:26:22 +0200 (CEST) Received: (qmail 75138 invoked by uid 500); 24 Oct 2016 14:26:22 -0000 Mailing-List: contact commits-help@openwebbeans.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@openwebbeans.apache.org Delivered-To: mailing list commits@openwebbeans.apache.org Received: (qmail 75126 invoked by uid 99); 24 Oct 2016 14:26:22 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 24 Oct 2016 14:26:22 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id A9EB51A021B for ; Mon, 24 Oct 2016 14:26:21 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -1.199 X-Spam-Level: X-Spam-Status: No, score=-1.199 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RP_MATCHES_RCVD=-2.999] autolearn=disabled Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id a0Q7r33Ryxkd for ; Mon, 24 Oct 2016 14:26:19 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with ESMTP id D37FE5FC49 for ; Mon, 24 Oct 2016 14:26:18 +0000 (UTC) Received: from svn01-us-west.apache.org (svn.apache.org [10.41.0.6]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id 479E1E017A for ; Mon, 24 Oct 2016 14:26:16 +0000 (UTC) Received: from svn01-us-west.apache.org (localhost [127.0.0.1]) by svn01-us-west.apache.org (ASF Mail Server at svn01-us-west.apache.org) with ESMTP id 2C0493A0386 for ; Mon, 24 Oct 2016 14:26:16 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1766411 - in /openwebbeans/trunk: webbeans-impl/src/main/java/org/apache/webbeans/component/ webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/ webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/test/ webbeans-web/src/... Date: Mon, 24 Oct 2016 14:26:15 -0000 To: commits@openwebbeans.apache.org From: rmannibucau@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20161024142616.2C0493A0386@svn01-us-west.apache.org> archived-at: Mon, 24 Oct 2016 15:06:49 -0000 Author: rmannibucau Date: Mon Oct 24 14:26:15 2016 New Revision: 1766411 URL: http://svn.apache.org/viewvc?rev=1766411&view=rev Log: OWB-1159 exposing http servlet request bean Added: openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/ServletRequestBean.java - copied, changed from r1766409, openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/ServletContextBean.java openwebbeans/trunk/webbeans-web/src/test/java/org/apache/webbeans/web/tests/WebBeansTest.java Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/WebBeansType.java openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/test/MockServletContext.java Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/WebBeansType.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/WebBeansType.java?rev=1766411&r1=1766410&r2=1766411&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/WebBeansType.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/WebBeansType.java Mon Oct 24 14:26:15 2016 @@ -71,5 +71,6 @@ public enum WebBeansType VALIDATIONFACT, VALIDATION, METADATA, - SERVLET_CONTEXT + SERVLET_CONTEXT, + SERVLET_REQUEST } \ No newline at end of file Copied: openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/ServletRequestBean.java (from r1766409, openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/ServletContextBean.java) URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/ServletRequestBean.java?p2=openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/ServletRequestBean.java&p1=openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/ServletContextBean.java&r1=1766409&r2=1766411&rev=1766411&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/ServletContextBean.java (original) +++ openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/ServletRequestBean.java Mon Oct 24 14:26:15 2016 @@ -23,21 +23,24 @@ import org.apache.webbeans.component.Sim import org.apache.webbeans.component.WebBeansType; import org.apache.webbeans.config.WebBeansContext; import org.apache.webbeans.portable.ProviderBasedProducer; +import org.apache.webbeans.web.context.ServletRequestContext; +import org.apache.webbeans.web.context.WebContextsService; import javax.inject.Provider; -import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; -class ServletContextBean extends BuiltInOwbBean +class ServletRequestBean extends BuiltInOwbBean { - ServletContextBean(final WebBeansContext ctx, final ServletContext context) + ServletRequestBean(final WebBeansContext ctx, final WebContextsService contexts) { - super(ctx, WebBeansType.SERVLET_CONTEXT, ServletContext.class, new SimpleProducerFactory( - new ProviderBasedProducer<>(ctx, ServletContext.class, new Provider() + super(ctx, WebBeansType.SERVLET_REQUEST, HttpServletRequest.class, new SimpleProducerFactory( + new ProviderBasedProducer<>(ctx, HttpServletRequest.class, new Provider() { @Override - public ServletContext get() + public HttpServletRequest get() { - return context; + final ServletRequestContext requestContext = contexts.getRequestContext(false); + return requestContext == null ? null : requestContext.getServletRequest(); } }, true))); } @@ -45,6 +48,6 @@ class ServletContextBean extends BuiltIn @Override public Class proxyableType() { - return ServletContext.class; + return HttpServletRequest.class; } } Modified: openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java?rev=1766411&r1=1766410&r2=1766411&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java (original) +++ openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java Mon Oct 24 14:26:15 2016 @@ -25,8 +25,10 @@ import org.apache.webbeans.el.ELContextS import org.apache.webbeans.exception.WebBeansException; import org.apache.webbeans.lifecycle.AbstractLifeCycle; import org.apache.webbeans.logger.WebBeansLoggerFacade; +import org.apache.webbeans.spi.ContextsService; import org.apache.webbeans.spi.ResourceInjectionService; import org.apache.webbeans.spi.adaptor.ELAdaptor; +import org.apache.webbeans.web.context.WebContextsService; import org.apache.webbeans.web.util.ServletCompatibilityUtil; import javax.enterprise.context.ApplicationScoped; @@ -86,6 +88,12 @@ public final class WebContainerLifecycle if ("true".equalsIgnoreCase(getWebBeansContext().getOpenWebBeansConfiguration().getProperty("org.apache.webbeans.web.add-beans", "true"))) { webBeansContext.getBeanManagerImpl().addInternalBean(new ServletContextBean(webBeansContext, servletContext)); + + final ContextsService contextsService = webBeansContext.getContextsService(); + if (WebContextsService.class.isInstance(contextsService)) + { + webBeansContext.getBeanManagerImpl().addInternalBean(new ServletRequestBean(webBeansContext, WebContextsService.class.cast(contextsService))); + } } super.startApplication(servletContext); } Modified: openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/test/MockServletContext.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/test/MockServletContext.java?rev=1766411&r1=1766410&r2=1766411&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/test/MockServletContext.java (original) +++ openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/test/MockServletContext.java Mon Oct 24 14:26:15 2016 @@ -23,6 +23,7 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.Enumeration; import java.util.EventListener; +import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -37,12 +38,16 @@ import javax.servlet.SessionCookieConfig import javax.servlet.SessionTrackingMode; import javax.servlet.descriptor.JspConfigDescriptor; +import static java.util.Collections.enumeration; + /** * Implement the ServletContext interface for testing. */ public class MockServletContext implements ServletContext { + private Map attributes = new HashMap<>(); + @Override public String getContextPath() { @@ -172,19 +177,19 @@ public class MockServletContext implemen @Override public Object getAttribute(String name) { - return null; + return attributes.get(name); } @Override public Enumeration getAttributeNames() { - return null; + return enumeration(attributes.keySet()); } @Override public void setAttribute(String name, Object object) { - + attributes.put(name, object); } @Override Added: openwebbeans/trunk/webbeans-web/src/test/java/org/apache/webbeans/web/tests/WebBeansTest.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/test/java/org/apache/webbeans/web/tests/WebBeansTest.java?rev=1766411&view=auto ============================================================================== --- openwebbeans/trunk/webbeans-web/src/test/java/org/apache/webbeans/web/tests/WebBeansTest.java (added) +++ openwebbeans/trunk/webbeans-web/src/test/java/org/apache/webbeans/web/tests/WebBeansTest.java Mon Oct 24 14:26:15 2016 @@ -0,0 +1,86 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.webbeans.web.tests; + +import org.apache.webbeans.config.WebBeansContext; +import org.apache.webbeans.corespi.scanner.xbean.CdiArchive; +import org.apache.webbeans.corespi.scanner.xbean.OwbAnnotationFinder; +import org.apache.webbeans.corespi.se.DefaultScannerService; +import org.apache.webbeans.spi.ContainerLifecycle; +import org.apache.webbeans.spi.ContextsService; +import org.apache.webbeans.spi.ScannerService; +import org.apache.webbeans.web.context.WebContextsService; +import org.apache.webbeans.web.lifecycle.test.MockServletContext; +import org.apache.webbeans.xml.DefaultBeanArchiveService; +import org.apache.xbean.finder.archive.ClassesArchive; +import org.junit.Test; + +import javax.enterprise.inject.spi.Bean; +import javax.enterprise.inject.spi.BeanManager; +import javax.servlet.ServletContext; +import javax.servlet.ServletContextEvent; +import javax.servlet.http.HttpServletRequest; +import java.net.URL; +import java.util.HashMap; +import java.util.Properties; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +public class WebBeansTest { + @Test + public void implicitBeans() + { + final WebBeansContext webBeansContext = new WebBeansContext(new HashMap, Object>(), new Properties() + {{ + setProperty(ContextsService.class.getName(), WebContextsService.class.getName()); + setProperty(ScannerService.class.getName(), NoScan.class.getName()); + }}); + + final ServletContextEvent ctx = new ServletContextEvent(new MockServletContext() + { + { + setAttribute("test", "ok"); + } + }); + webBeansContext.getService(ContainerLifecycle.class).startApplication(ctx); + try + { + final BeanManager mgr = webBeansContext.getBeanManagerImpl(); + final Bean context = mgr.resolve(mgr.getBeans(ServletContext.class)); + assertEquals("ok", ServletContext.class.cast(mgr.getReference(context, ServletContext.class, null)).getAttribute("test")); + assertNotNull(context); + assertNotNull(mgr.resolve(mgr.getBeans(HttpServletRequest.class))); + } + finally + { + webBeansContext.getService(ContainerLifecycle.class).stopApplication(ctx); + } + } + + public static class NoScan extends DefaultScannerService + { + @Override + public void scan() + { + archive = new CdiArchive(new DefaultBeanArchiveService(), Thread.currentThread().getContextClassLoader(), new HashMap(), null); + finder = new OwbAnnotationFinder(new ClassesArchive()); + } + } +}