openwebbeans-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From strub...@apache.org
Subject svn commit: r1858225 [2/2] - in /openwebbeans/trunk: ./ webbeans-jetty9/ webbeans-jetty9/src/ webbeans-jetty9/src/it/ webbeans-jetty9/src/it/fatwar/ webbeans-jetty9/src/it/fatwar/src/ webbeans-jetty9/src/it/fatwar/src/main/ webbeans-jetty9/src/it/fatwa...
Date Fri, 26 Apr 2019 20:15:56 GMT
Propchange: openwebbeans/trunk/webbeans-jetty9/src/main/java/org/apache/webbeans/web/jetty9/JettySecurityService.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openwebbeans/trunk/webbeans-jetty9/src/main/java/org/apache/webbeans/web/jetty9/JettyUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-jetty9/src/main/java/org/apache/webbeans/web/jetty9/JettyUtil.java?rev=1858225&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-jetty9/src/main/java/org/apache/webbeans/web/jetty9/JettyUtil.java
(added)
+++ openwebbeans/trunk/webbeans-jetty9/src/main/java/org/apache/webbeans/web/jetty9/JettyUtil.java
Fri Apr 26 20:15:55 2019
@@ -0,0 +1,87 @@
+/*
+ * 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.jetty9;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.Producer;
+
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.container.BeanManagerImpl;
+import org.apache.webbeans.inject.OWBInjector;
+
+/**
+ * Helper class for assisting injection.
+ */
+public class JettyUtil
+{
+    public static Object inject(Object object, ClassLoader loader)
+    {
+        ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
+        Thread.currentThread().setContextClassLoader(loader);
+        CreationalContext<?> context = null;
+        try
+        {
+            BeanManager beanManager = WebBeansContext.currentInstance().getBeanManagerImpl();
+            context = beanManager.createCreationalContext(null);
+            OWBInjector.inject(beanManager, object, context);
+        }
+        finally
+        {
+            Thread.currentThread().setContextClassLoader(oldLoader);
+        }
+        return new Instance(object, context);
+    }
+
+    public static void destroy(Object injectorInstance, ClassLoader loader)
+    {
+        Instance instance = (JettyUtil.Instance) injectorInstance;
+        ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
+        Thread.currentThread().setContextClassLoader(loader);
+        try
+        {
+            BeanManagerImpl beanManager = WebBeansContext.currentInstance().getBeanManagerImpl();
+            Producer producer = beanManager.getProducerForJavaEeComponent(instance.object.getClass());
+            if (producer != null)
+            {
+                producer.dispose(instance.object);
+            }
+            else if (instance.context != null)
+            {
+                instance.context.release();
+            }
+        }
+        finally
+        {
+            Thread.currentThread().setContextClassLoader(oldLoader);
+        }
+    }
+
+    private static final class Instance
+    {
+        private Object object;
+        private CreationalContext<?> context;
+
+        private Instance(Object object, CreationalContext<?> context)
+        {
+            this.object = object;
+            this.context = context;
+        }
+    }
+}

Propchange: openwebbeans/trunk/webbeans-jetty9/src/main/java/org/apache/webbeans/web/jetty9/JettyUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openwebbeans/trunk/webbeans-jetty9/src/main/java/org/apache/webbeans/web/jetty9/JettyWebPlugin.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-jetty9/src/main/java/org/apache/webbeans/web/jetty9/JettyWebPlugin.java?rev=1858225&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-jetty9/src/main/java/org/apache/webbeans/web/jetty9/JettyWebPlugin.java
(added)
+++ openwebbeans/trunk/webbeans-jetty9/src/main/java/org/apache/webbeans/web/jetty9/JettyWebPlugin.java
Fri Apr 26 20:15:55 2019
@@ -0,0 +1,132 @@
+/*
+ * 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.jetty9;
+
+import java.util.EventListener;
+
+import javax.servlet.Filter;
+import javax.servlet.Servlet;
+import javax.servlet.ServletContextAttributeListener;
+import javax.servlet.ServletContextListener;
+import javax.servlet.ServletRequestAttributeListener;
+import javax.servlet.ServletRequestListener;
+import javax.servlet.http.HttpSessionActivationListener;
+import javax.servlet.http.HttpSessionAttributeListener;
+import javax.servlet.http.HttpSessionBindingListener;
+import javax.servlet.http.HttpSessionListener;
+
+import org.apache.webbeans.exception.WebBeansConfigurationException;
+import org.apache.webbeans.spi.SecurityService;
+import org.apache.webbeans.spi.plugins.AbstractOwbPlugin;
+
+/**
+ * Jetty plugin for OWB.
+ */
+public class JettyWebPlugin extends AbstractOwbPlugin
+{
+    //Security service implementation.
+    private final JettySecurityService securityService = new JettySecurityService();
+
+    /**
+     * Default constructor.
+     */
+    public JettyWebPlugin()
+    {
+
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public <T> T getSupportedService(Class<T> serviceClass)
+    {
+        if(serviceClass.equals(SecurityService.class))
+        {
+            return serviceClass.cast(this.securityService);
+        }
+
+        return null;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void isManagedBean(Class<?> clazz)
+    {
+        if (isServletSpecClass(clazz))
+        {
+            throw new WebBeansConfigurationException("Given class  : " + clazz.getName()
+ " is not managed bean");
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean supportsJavaEeComponentInjections(Class<?> clazz)
+    {
+        if (isServletSpecClass(clazz))
+        {
+            return true;
+        }
+
+        return false;
+    }
+
+    private boolean isServletSpecClass(Class<?> clazz)
+    {
+        if (Servlet.class.isAssignableFrom(clazz) ||
+                Filter.class.isAssignableFrom(clazz))
+        {
+            return true;
+        }
+
+        if (EventListener.class.isAssignableFrom(clazz))
+        {
+            return ServletContextListener.class.isAssignableFrom(clazz) ||
+                    ServletContextAttributeListener.class.isAssignableFrom(clazz) ||
+                    HttpSessionActivationListener.class.isAssignableFrom(clazz) ||
+                    HttpSessionAttributeListener.class.isAssignableFrom(clazz) ||
+                    HttpSessionBindingListener.class.isAssignableFrom(clazz) ||
+                    HttpSessionListener.class.isAssignableFrom(clazz) ||
+                    ServletRequestListener.class.isAssignableFrom(clazz) ||
+                    ServletRequestAttributeListener.class.isAssignableFrom(clazz);
+        }
+        return false;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean supportService(Class<?> serviceClass)
+    {
+        if (serviceClass.equals(SecurityService.class))
+        {
+            return true;
+        }
+
+        return false;
+    }
+
+}

Propchange: openwebbeans/trunk/webbeans-jetty9/src/main/java/org/apache/webbeans/web/jetty9/JettyWebPlugin.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openwebbeans/trunk/webbeans-jetty9/src/main/java/org/apache/webbeans/web/jetty9/OwbConfiguration.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-jetty9/src/main/java/org/apache/webbeans/web/jetty9/OwbConfiguration.java?rev=1858225&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-jetty9/src/main/java/org/apache/webbeans/web/jetty9/OwbConfiguration.java
(added)
+++ openwebbeans/trunk/webbeans-jetty9/src/main/java/org/apache/webbeans/web/jetty9/OwbConfiguration.java
Fri Apr 26 20:15:55 2019
@@ -0,0 +1,133 @@
+/*
+ * 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.jetty9;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.EventListener;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+
+import org.eclipse.jetty.server.handler.ContextHandler;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.util.DecoratedObjectFactory;
+import org.eclipse.jetty.webapp.ClasspathPattern;
+import org.eclipse.jetty.webapp.Configuration;
+import org.eclipse.jetty.webapp.WebAppContext;
+
+/**
+ * A Jetty module configurator for use in embedded mode or a Jetty module.
+ */
+public class OwbConfiguration implements Configuration
+{
+    private static final String LISTENER_CLASS_NAME = "org.apache.webbeans.servlet.WebBeansConfigurationListener";
+
+    static void addOwb(WebAppContext ctx) throws ServletException
+    {
+        URL url = getBeansXml(ctx.getServletContext());
+        if (url != null)
+        {
+            //Registering ELResolver with JSP container
+            System.setProperty("org.apache.webbeans.application.jsp", "true");
+            addOwbListeners((ServletContextHandler.Context) ctx.getServletContext());
+            addOwbFilters(ctx.getServletContext());
+            DecoratedObjectFactory decObjFact = ctx.getObjectFactory();
+            decObjFact.addDecorator(new JettyDecorator(ctx.getClassLoader()));
+        }
+    }
+
+    private static void addOwbListeners(ServletContextHandler.Context context) throws ServletException
+    {
+        for (EventListener eventListener : context.getContextHandler().getEventListeners())
+            {
+                if (eventListener.getClass().getName().equals(LISTENER_CLASS_NAME))
+                {
+                    return;
+                }
+            }
+        context.addListener(LISTENER_CLASS_NAME);
+    }
+
+    private static void addOwbFilters(ContextHandler.Context context)
+    {
+        // we currently add all other filters via web-fragment.xml
+    }
+
+    private static URL getBeansXml(ServletContext ctx) throws ServletException
+    {
+        try
+        {
+            URL url = ctx.getResource("/WEB-INF/beans.xml");
+            if (url == null)
+            {
+                url = ctx.getResource("/WEB-INF/classes/META-INF/beans.xml");
+            }
+            return url;
+        }
+        catch (MalformedURLException e)
+        {
+            throw new ServletException(e);
+        }
+    }
+
+    @Override
+    public void preConfigure(WebAppContext ctx) throws Exception
+    {
+        final ClasspathPattern classpathPattern = ctx.getServerClasspathPattern();
+        classpathPattern.add("-org.eclipse.jetty.util.Decorator");
+        classpathPattern.add("-org.eclipse.jetty.util.DecoratedObjectFactory");
+        classpathPattern.add("-org.eclipse.jetty.server.handler.ContextHandler");
+        classpathPattern.add("-org.eclipse.jetty.servlet.ServletContextHandler$Context");
+        classpathPattern.add("-org.eclipse.jetty.servlet.ServletContextHandler");
+        classpathPattern.add("-org.eclipse.jetty.webapp.WebAppContext");
+    }
+
+    @Override
+    public void configure(WebAppContext ctx) throws Exception
+    {
+       addOwb(ctx);
+    }
+
+    @Override
+    public void postConfigure(WebAppContext ctx) throws Exception
+    {
+
+    }
+
+    @Override
+    public void deconfigure(WebAppContext ctx) throws Exception
+    {
+
+    }
+
+    @Override
+    public void destroy(WebAppContext ctx) throws Exception
+    {
+
+    }
+
+    @Override
+    public void cloneConfigure(WebAppContext template, WebAppContext ctx) throws Exception
+    {
+
+    }
+
+
+}

Propchange: openwebbeans/trunk/webbeans-jetty9/src/main/java/org/apache/webbeans/web/jetty9/OwbConfiguration.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openwebbeans/trunk/webbeans-jetty9/src/main/resources/META-INF/services/org.apache.webbeans.spi.plugins.OpenWebBeansPlugin
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-jetty9/src/main/resources/META-INF/services/org.apache.webbeans.spi.plugins.OpenWebBeansPlugin?rev=1858225&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-jetty9/src/main/resources/META-INF/services/org.apache.webbeans.spi.plugins.OpenWebBeansPlugin
(added)
+++ openwebbeans/trunk/webbeans-jetty9/src/main/resources/META-INF/services/org.apache.webbeans.spi.plugins.OpenWebBeansPlugin
Fri Apr 26 20:15:55 2019
@@ -0,0 +1,17 @@
+# 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.
+org.apache.webbeans.web.jetty9.JettyWebPlugin

Added: openwebbeans/trunk/webbeans-jetty9/src/main/resources/META-INF/web-fragment.xml
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-jetty9/src/main/resources/META-INF/web-fragment.xml?rev=1858225&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-jetty9/src/main/resources/META-INF/web-fragment.xml (added)
+++ openwebbeans/trunk/webbeans-jetty9/src/main/resources/META-INF/web-fragment.xml Fri Apr
26 20:15:55 2019
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+-->
+<web-fragment metadata-complete="true" version="3.0"
+              xmlns="http://java.sun.com/xml/ns/javaee"
+              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd">
+    <name>OwbTomcat7</name>
+    <ordering>
+        <before>others</before>
+    </ordering>
+    <filter>
+        <icon/>
+        <filter-name>OwbSecurityFilter</filter-name>
+        <filter-class>org.apache.webbeans.web.jetty9.JettySecurityFilter</filter-class>
+    </filter>
+    <filter-mapping>
+        <filter-name>OwbSecurityFilter</filter-name>
+        <url-pattern>*</url-pattern>
+        <dispatcher>REQUEST</dispatcher>
+    </filter-mapping>
+</web-fragment>

Propchange: openwebbeans/trunk/webbeans-jetty9/src/main/resources/META-INF/web-fragment.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openwebbeans/trunk/webbeans-jetty9/src/site/site.xml
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-jetty9/src/site/site.xml?rev=1858225&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-jetty9/src/site/site.xml (added)
+++ openwebbeans/trunk/webbeans-jetty9/src/site/site.xml Fri Apr 26 20:15:55 2019
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<!--
+    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.
+-->
+
+<project name="OpenWebBeans">
+    <bannerLeft>
+        <name>Apache OpenWebBeans</name>
+        <src>http://openwebbeans.apache.org/owb/images/logos/openwebbeans_hor.png</src>
+        <href>http://openwebbeans.apache.org</href>
+    </bannerLeft>
+    
+    <bannerRight>
+        <name>Apache Banner</name>
+        <src>http://www.apache.org/images/asf-logo.gif</src>
+        <href>http://www.apache.org</href>
+    </bannerRight>
+    
+    <publishDate format="dd MMM yyyy" />
+    <version position="left"/>
+    
+    <body>
+        <breadcrumbs>
+            <item name="Apache" href="http://www.apache.org"/>
+            <item name="OpenWebBeans" href="http://openwebbeans.apache.org"/>
+            <item name="OWB-Jetty-9" href="http://openwebbeans.apache.org/${project.version}/openwebbeans-jetty9"/>
+        </breadcrumbs>
+
+        <menu ref="reports"/>
+    </body>
+</project>
+

Propchange: openwebbeans/trunk/webbeans-jetty9/src/site/site.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openwebbeans/trunk/webbeans-jetty9/src/test/java/org/apache/webbeans/web/jetty9/test/JettyNormalScopeProxyFactoryTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-jetty9/src/test/java/org/apache/webbeans/web/jetty9/test/JettyNormalScopeProxyFactoryTest.java?rev=1858225&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-jetty9/src/test/java/org/apache/webbeans/web/jetty9/test/JettyNormalScopeProxyFactoryTest.java
(added)
+++ openwebbeans/trunk/webbeans-jetty9/src/test/java/org/apache/webbeans/web/jetty9/test/JettyNormalScopeProxyFactoryTest.java
Fri Apr 26 20:15:55 2019
@@ -0,0 +1,202 @@
+/*
+ * 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.jetty9.test;
+
+import java.io.*;
+import java.lang.reflect.Method;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.enterprise.context.RequestScoped;
+import javax.enterprise.context.SessionScoped;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.CDI;
+import javax.servlet.ServletRequestEvent;
+import javax.servlet.http.HttpSession;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.spi.ContextsService;
+import org.apache.webbeans.web.jetty9.OwbConfiguration;
+import org.eclipse.jetty.server.*;
+import org.eclipse.jetty.server.session.*;
+import org.eclipse.jetty.webapp.Configuration;
+import org.eclipse.jetty.webapp.WebAppContext;
+import org.junit.Test;
+
+import static java.util.Arrays.asList;
+import static org.junit.Assert.assertEquals;
+
+public class JettyNormalScopeProxyFactoryTest
+{
+    private static final Logger log = Logger.getLogger(JettyNormalScopeProxyFactoryTest.class.getName());
+
+    @Test
+    public void checkDeserialisation() throws Exception
+    {
+        final File base = dir(new File("target/JettyNormalScopeProxyFactoryTest-" + System.nanoTime()));
+        final File war = createWar(dir(new File(base, "test")), MyWrapper.class, MySessionScoped.class);
+
+        String sessionId = null;
+        FileSessionDataStore sessionDataStore = new FileSessionDataStore();
+        sessionDataStore.setStoreDir(new File(base, "sessions"));
+        for (final String expected : asList("init", "new"))
+        {
+            final Server jetty = new Server(0);
+            Configuration.ClassList classList = Configuration.ClassList.serverDefault(jetty);
+            classList.addBefore(
+                    "org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
+                    "org.eclipse.jetty.annotations.AnnotationConfiguration",
+                    OwbConfiguration.class.getName()
+            );
+            WebAppContext ctx = new WebAppContext();
+            ctx.setWar(war.getAbsolutePath());
+            ctx.setContextPath("/test");
+            ctx.setLogUrlOnStart(true);
+            ctx.setConfigurationClasses(classList);
+            SessionIdManager idmanager = new DefaultSessionIdManager(jetty);
+            jetty.setSessionIdManager(idmanager);
+            final SessionHandler sessionHandler = new SessionHandler();
+            final SessionCache sessionCache = new DefaultSessionCache(sessionHandler);
+            sessionCache.setSessionDataStore(sessionDataStore);
+            sessionCache.setEvictionPolicy(900);
+            sessionHandler.setSessionCache(sessionCache);
+            ctx.setSessionHandler(sessionHandler);
+            jetty.setHandler(ctx);
+
+            jetty.start();
+
+            try
+            {
+                Thread thread = Thread.currentThread();
+                ClassLoader old = thread.getContextClassLoader();
+                final ClassLoader webappLoader = ctx.getClassLoader();
+                thread.setContextClassLoader(webappLoader);
+                try
+                {
+                    // we don't want test type but webapp one...even if named the same
+                    final Class<?> webapptype = webappLoader.loadClass(MySessionScoped.class.getName());
+                    final Method setValue = webapptype.getMethod("setValue", String.class);
+                    final Method getValue = webapptype.getMethod("getValue");
+
+                    final Class<?> wrapperType = webappLoader.loadClass(MyWrapper.class.getName());
+                    final Method m = wrapperType.getMethod("getProxy");
+
+                    final BeanManager bm = CDI.current().getBeanManager();
+
+                    HttpChannel channel = new HttpChannel(jetty.getConnectors()[0], new HttpConfiguration(),
null, null)
+                    {
+                        @Override
+                        public Server getServer()
+                        {
+                            return jetty;
+                        }
+                    };
+                    Request request = new Request(channel, null);
+                    request.setPathInfo("/test");
+                    request.setContext(ctx.getServletContext());
+                    request.setRequestedSessionId(sessionId);
+                    request.setSessionHandler(ctx.getSessionHandler());
+                    if (sessionId != null) {
+                        // need to load the session into the request because we have a fake
request
+                        request.setSession(ctx.getSessionHandler().getSession(sessionId));
+                    }
+
+                    final ContextsService contextsService = WebBeansContext.currentInstance().getContextsService();
+                    final ServletRequestEvent startParameter = new ServletRequestEvent(ctx.getServletContext(),
request);
+                    contextsService.startContext(RequestScoped.class, startParameter);
+
+                    final HttpSession session = request.getSession();
+                    if (request.getSession() != null)
+                    {
+                        contextsService.startContext(SessionScoped.class, request.getSession());
+                    }
+
+                    {
+                        //final Object bean = bm.getReference(bm.resolve(bm.getBeans(webapptype)),
webapptype, null);
+                        final Object bean = m.invoke(bm.getReference(bm.resolve(bm.getBeans(wrapperType)),
wrapperType, null));
+                        assertEquals(expected, getValue.invoke(bean));
+                        setValue.invoke(bean, "new");
+                        assertEquals("new", getValue.invoke(bean));
+                    }
+
+                    sessionId = session.getId();
+                    contextsService.endContext(RequestScoped.class, startParameter);
+
+                    // don't do to not destroy the instance
+                    // contextsService.endContext(SessionScoped.class, request.getSession());
+                }
+                catch (AssertionError e)
+                {
+                    throw e;
+                }
+                catch (Exception e)
+                {
+                    log.log(Level.SEVERE, "Exception during test execution", e);
+//                    throw e;
+                }
+                finally
+                {
+                    thread.setContextClassLoader(old);
+                }
+            }
+            finally
+            {
+                try
+                {
+                    jetty.stop();
+                }
+                catch (Exception e)
+                {
+                    log.log(Level.SEVERE, "This _might_ happen on Java9 currently. I hope
it gets soon fixed.", e);
+                }
+
+            }
+        }
+    }
+
+    private static File createWar(final File test, final Class<?>... classes) throws
IOException
+    {
+        for (final Class<?> clazz : classes)
+        {
+            final String name = clazz.getName().replace('.', '/') + ".class";
+            final InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(name);
+            if (is == null)
+            {
+                throw new IllegalArgumentException(name);
+            }
+            final File out = new File(test, "WEB-INF/classes/" + name);
+            dir(out.getParentFile());
+            final OutputStream os = new FileOutputStream(out);
+            IOUtils.copy(is, os);
+            is.close();
+            os.close();
+        }
+        final Writer w = new FileWriter(new File(test, "WEB-INF/beans.xml"));
+        w.write("<beans />");
+        w.close();
+        return test;
+    }
+
+    private static File dir(final File file)
+    {
+        file.mkdirs();
+        return file;
+    }
+}

Propchange: openwebbeans/trunk/webbeans-jetty9/src/test/java/org/apache/webbeans/web/jetty9/test/JettyNormalScopeProxyFactoryTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openwebbeans/trunk/webbeans-jetty9/src/test/java/org/apache/webbeans/web/jetty9/test/MySessionScoped.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-jetty9/src/test/java/org/apache/webbeans/web/jetty9/test/MySessionScoped.java?rev=1858225&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-jetty9/src/test/java/org/apache/webbeans/web/jetty9/test/MySessionScoped.java
(added)
+++ openwebbeans/trunk/webbeans-jetty9/src/test/java/org/apache/webbeans/web/jetty9/test/MySessionScoped.java
Fri Apr 26 20:15:55 2019
@@ -0,0 +1,39 @@
+/*
+ * 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.jetty9.test;
+
+import java.io.Serializable;
+
+import javax.enterprise.context.SessionScoped;
+
+@SessionScoped
+public class MySessionScoped implements Serializable
+{
+    private String value = "init";
+
+    public String getValue()
+    {
+        return value;
+    }
+
+    public void setValue(final String value)
+    {
+        this.value = value;
+    }
+}

Propchange: openwebbeans/trunk/webbeans-jetty9/src/test/java/org/apache/webbeans/web/jetty9/test/MySessionScoped.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openwebbeans/trunk/webbeans-jetty9/src/test/java/org/apache/webbeans/web/jetty9/test/MyWrapper.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-jetty9/src/test/java/org/apache/webbeans/web/jetty9/test/MyWrapper.java?rev=1858225&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-jetty9/src/test/java/org/apache/webbeans/web/jetty9/test/MyWrapper.java
(added)
+++ openwebbeans/trunk/webbeans-jetty9/src/test/java/org/apache/webbeans/web/jetty9/test/MyWrapper.java
Fri Apr 26 20:15:55 2019
@@ -0,0 +1,35 @@
+/*
+ * 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.jetty9.test;
+
+import java.io.Serializable;
+
+import javax.enterprise.context.SessionScoped;
+import javax.inject.Inject;
+
+@SessionScoped
+public class MyWrapper implements Serializable {
+    @Inject
+    private MySessionScoped proxy;
+
+    public MySessionScoped getProxy()
+    {
+        return proxy;
+    }
+}

Propchange: openwebbeans/trunk/webbeans-jetty9/src/test/java/org/apache/webbeans/web/jetty9/test/MyWrapper.java
------------------------------------------------------------------------------
    svn:eol-style = native



Mime
View raw message