You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by bo...@apache.org on 2021/04/04 07:58:12 UTC

[myfaces] branch 2.3-next updated: feat(quarkus): update to quarkus 1.13.0.Final (#192)

This is an automated email from the ASF dual-hosted git repository.

bommel pushed a commit to branch 2.3-next
in repository https://gitbox.apache.org/repos/asf/myfaces.git


The following commit(s) were added to refs/heads/2.3-next by this push:
     new ef413a7  feat(quarkus): update to quarkus 1.13.0.Final (#192)
ef413a7 is described below

commit ef413a77ad406c9b6db75d8f4e0bef40e1958569
Author: Bernd Bohmann <bo...@apache.org>
AuthorDate: Sun Apr 4 09:58:04 2021 +0200

    feat(quarkus): update to quarkus 1.13.0.Final (#192)
---
 extensions/quarkus/deployment/pom.xml              |   7 +-
 .../quarkus/deployment/MyFacesProcessor.java       | 234 ++++++++++++---------
 extensions/quarkus/pom.xml                         |   2 +-
 extensions/quarkus/showcase/README.md              |   4 +-
 extensions/quarkus/showcase/pom.xml                |   4 +-
 .../showcase/src/main/resources/META-INF/web.xml   |  86 ++++----
 6 files changed, 188 insertions(+), 149 deletions(-)

diff --git a/extensions/quarkus/deployment/pom.xml b/extensions/quarkus/deployment/pom.xml
index 315112c..d6cc8fe 100644
--- a/extensions/quarkus/deployment/pom.xml
+++ b/extensions/quarkus/deployment/pom.xml
@@ -36,7 +36,12 @@
     <dependencies>
         <dependency>
             <groupId>io.quarkus</groupId>
-            <artifactId>quarkus-undertow-websockets-deployment</artifactId>
+            <artifactId>quarkus-undertow-deployment</artifactId>
+            <version>${quarkus.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-websockets-deployment</artifactId>
             <version>${quarkus.version}</version>
         </dependency>
         <dependency>
diff --git a/extensions/quarkus/deployment/src/main/java/org/apache/myfaces/core/extensions/quarkus/deployment/MyFacesProcessor.java b/extensions/quarkus/deployment/src/main/java/org/apache/myfaces/core/extensions/quarkus/deployment/MyFacesProcessor.java
index e712a03..4fcc986 100644
--- a/extensions/quarkus/deployment/src/main/java/org/apache/myfaces/core/extensions/quarkus/deployment/MyFacesProcessor.java
+++ b/extensions/quarkus/deployment/src/main/java/org/apache/myfaces/core/extensions/quarkus/deployment/MyFacesProcessor.java
@@ -18,37 +18,56 @@
  */
 package org.apache.myfaces.core.extensions.quarkus.deployment;
 
-import java.io.IOException;
-import java.util.Optional;
-
-import javax.faces.application.ProjectStage;
-import javax.faces.application.StateManager;
-import javax.faces.application.ViewHandler;
-import javax.faces.component.FacesComponent;
-import javax.faces.component.behavior.FacesBehavior;
-import javax.faces.convert.FacesConverter;
-import javax.faces.flow.FlowScoped;
-import javax.faces.flow.builder.FlowDefinition;
-import javax.faces.model.FacesDataModel;
-import javax.faces.render.FacesBehaviorRenderer;
-import javax.faces.render.FacesRenderer;
-import javax.faces.validator.FacesValidator;
-import javax.faces.view.ViewScoped;
-import javax.faces.view.facelets.FaceletsResourceResolver;
-import javax.faces.webapp.FacesServlet;
-
+import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
+import io.quarkus.arc.deployment.BeanDefiningAnnotationBuildItem;
+import io.quarkus.arc.deployment.BeanRegistrationPhaseBuildItem;
+import io.quarkus.arc.deployment.ContextRegistrationPhaseBuildItem;
+import io.quarkus.arc.deployment.ContextRegistrationPhaseBuildItem.ContextConfiguratorBuildItem;
+import io.quarkus.arc.deployment.CustomScopeBuildItem;
+import io.quarkus.arc.deployment.SyntheticBeanBuildItem;
+import io.quarkus.deployment.annotations.BuildProducer;
+import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.annotations.ExecutionTime;
+import io.quarkus.deployment.annotations.Record;
+import io.quarkus.deployment.builditem.AdditionalApplicationArchiveMarkerBuildItem;
+import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
+import io.quarkus.deployment.builditem.FeatureBuildItem;
+import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem;
+import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBundleBuildItem;
+import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.RuntimeInitializedClassBuildItem;
+import io.quarkus.runtime.LaunchMode;
+import io.quarkus.runtime.configuration.ProfileManager;
+import io.quarkus.undertow.deployment.ListenerBuildItem;
+import io.quarkus.undertow.deployment.ServletBuildItem;
+import io.quarkus.undertow.deployment.ServletInitParamBuildItem;
+import io.quarkus.undertow.deployment.WebMetadataBuildItem;
+import org.apache.el.ExpressionFactoryImpl;
+import org.apache.myfaces.application.ApplicationImplEventManager;
+import org.apache.myfaces.application.viewstate.StateUtils;
 import org.apache.myfaces.cdi.FacesScoped;
 import org.apache.myfaces.cdi.JsfApplicationArtifactHolder;
 import org.apache.myfaces.cdi.JsfArtifactProducer;
 import org.apache.myfaces.cdi.config.FacesConfigBeanHolder;
 import org.apache.myfaces.cdi.model.FacesDataModelManager;
+import org.apache.myfaces.cdi.util.BeanEntry;
 import org.apache.myfaces.cdi.view.ViewScopeBeanHolder;
 import org.apache.myfaces.cdi.view.ViewTransientScoped;
+import org.apache.myfaces.config.FacesConfigurator;
 import org.apache.myfaces.config.MyfacesConfig;
 import org.apache.myfaces.config.annotation.CdiAnnotationProviderExtension;
 import org.apache.myfaces.config.element.NamedEvent;
+import org.apache.myfaces.core.api.shared.lang.PropertyDescriptorUtils;
+import org.apache.myfaces.core.extensions.quarkus.runtime.MyFacesRecorder;
+import org.apache.myfaces.core.extensions.quarkus.runtime.QuarkusFacesInitilializer;
 import org.apache.myfaces.core.extensions.quarkus.runtime.exception.QuarkusExceptionHandlerFactory;
+import org.apache.myfaces.core.extensions.quarkus.runtime.scopes.QuarkusFacesScopeContext;
+import org.apache.myfaces.core.extensions.quarkus.runtime.scopes.QuarkusFlowScopedContext;
+import org.apache.myfaces.core.extensions.quarkus.runtime.scopes.QuarkusViewScopeContext;
+import org.apache.myfaces.core.extensions.quarkus.runtime.scopes.QuarkusViewTransientScopeContext;
+import org.apache.myfaces.core.extensions.quarkus.runtime.spi.QuarkusFactoryFinderProvider;
+import org.apache.myfaces.core.extensions.quarkus.runtime.spi.QuarkusInjectionProvider;
+import org.apache.myfaces.el.ELResolverBuilderForFaces;
 import org.apache.myfaces.el.resolver.LambdaBeanELResolver;
 import org.apache.myfaces.flow.cdi.FlowBuilderFactoryBean;
 import org.apache.myfaces.flow.cdi.FlowScopeBeanHolder;
@@ -57,97 +76,77 @@ import org.apache.myfaces.push.cdi.WebsocketApplicationBean;
 import org.apache.myfaces.push.cdi.WebsocketChannelTokenBuilderBean;
 import org.apache.myfaces.push.cdi.WebsocketSessionBean;
 import org.apache.myfaces.push.cdi.WebsocketViewBean;
+import org.apache.myfaces.renderkit.ErrorPageWriter;
+import org.apache.myfaces.spi.FactoryFinderProviderFactory;
+import org.apache.myfaces.spi.impl.DefaultWebConfigProviderFactory;
+import org.apache.myfaces.util.ExternalContextUtils;
+import org.apache.myfaces.util.lang.ClassUtils;
+import org.apache.myfaces.view.ViewScopeProxyMap;
+import org.apache.myfaces.view.facelets.compiler.SAXCompiler;
+import org.apache.myfaces.view.facelets.compiler.TagLibraryConfig;
 import org.apache.myfaces.view.facelets.tag.LambdaMetadataTargetImpl;
+import org.apache.myfaces.view.facelets.tag.MethodRule;
+import org.apache.myfaces.view.facelets.tag.jsf.ComponentSupport;
+import org.apache.myfaces.webapp.AbstractFacesInitializer;
+import org.apache.myfaces.webapp.FaceletsInitilializer;
+import org.apache.myfaces.webapp.MyFacesContainerInitializer;
 import org.apache.myfaces.webapp.StartupServletContextListener;
 import org.eclipse.microprofile.config.Config;
 import org.eclipse.microprofile.config.ConfigProvider;
 import org.jboss.jandex.AnnotationInstance;
+import org.jboss.jandex.AnnotationTarget;
 import org.jboss.jandex.AnnotationValue;
+import org.jboss.jandex.ClassInfo;
 import org.jboss.jandex.DotName;
+import org.jboss.jandex.FieldInfo;
+import org.jboss.jandex.MethodInfo;
+import org.jboss.jandex.Type;
+import org.jboss.metadata.web.spec.ServletMetaData;
+import org.jboss.metadata.web.spec.WebMetaData;
 
-import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
-import io.quarkus.arc.deployment.BeanDefiningAnnotationBuildItem;
-import io.quarkus.arc.deployment.BeanRegistrarBuildItem;
-import io.quarkus.arc.deployment.BeanRegistrationPhaseBuildItem;
-import io.quarkus.arc.deployment.ContextRegistrarBuildItem;
-import io.quarkus.deployment.annotations.BuildProducer;
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.annotations.ExecutionTime;
-import io.quarkus.deployment.annotations.Record;
-import io.quarkus.deployment.builditem.AdditionalApplicationArchiveMarkerBuildItem;
-import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
-import io.quarkus.deployment.builditem.FeatureBuildItem;
-import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem;
-import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBundleBuildItem;
-import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
-import org.apache.myfaces.core.extensions.quarkus.runtime.MyFacesRecorder;
-import org.apache.myfaces.core.extensions.quarkus.runtime.QuarkusFacesInitilializer;
-import org.apache.myfaces.core.extensions.quarkus.runtime.scopes.QuarkusFacesScopeContext;
-import org.apache.myfaces.core.extensions.quarkus.runtime.scopes.QuarkusFlowScopedContext;
-import org.apache.myfaces.core.extensions.quarkus.runtime.scopes.QuarkusViewScopeContext;
-import org.apache.myfaces.core.extensions.quarkus.runtime.scopes.QuarkusViewTransientScopeContext;
-import org.apache.myfaces.core.extensions.quarkus.runtime.spi.QuarkusInjectionProvider;
-import io.quarkus.runtime.LaunchMode;
-import io.quarkus.runtime.configuration.ProfileManager;
-import io.quarkus.undertow.deployment.ListenerBuildItem;
-import io.quarkus.undertow.deployment.ServletBuildItem;
-import io.quarkus.undertow.deployment.ServletInitParamBuildItem;
-import io.quarkus.undertow.deployment.WebMetadataBuildItem;
-
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.Collectors;
 import javax.el.ELResolver;
 import javax.enterprise.inject.Produces;
 import javax.faces.FactoryFinder;
 import javax.faces.application.Application;
+import javax.faces.application.ProjectStage;
+import javax.faces.application.StateManager;
+import javax.faces.application.ViewHandler;
+import javax.faces.component.FacesComponent;
 import javax.faces.component.UIComponent;
 import javax.faces.component.behavior.Behavior;
+import javax.faces.component.behavior.FacesBehavior;
 import javax.faces.context.FacesContext;
 import javax.faces.convert.Converter;
+import javax.faces.convert.FacesConverter;
 import javax.faces.event.ExceptionQueuedEventContext;
 import javax.faces.event.SystemEvent;
+import javax.faces.flow.FlowScoped;
+import javax.faces.flow.builder.FlowDefinition;
+import javax.faces.model.FacesDataModel;
 import javax.faces.render.ClientBehaviorRenderer;
+import javax.faces.render.FacesBehaviorRenderer;
+import javax.faces.render.FacesRenderer;
 import javax.faces.render.Renderer;
+import javax.faces.validator.FacesValidator;
 import javax.faces.validator.Validator;
+import javax.faces.view.ViewScoped;
 import javax.faces.view.facelets.ComponentHandler;
 import javax.faces.view.facelets.ConverterHandler;
+import javax.faces.view.facelets.FaceletsResourceResolver;
 import javax.faces.view.facelets.MetaRuleset;
 import javax.faces.view.facelets.TagHandler;
 import javax.faces.view.facelets.ValidatorHandler;
+import javax.faces.webapp.FacesServlet;
 import javax.inject.Named;
 import javax.servlet.MultipartConfigElement;
 import javax.xml.parsers.DocumentBuilderFactory;
-import org.apache.el.ExpressionFactoryImpl;
-import org.apache.myfaces.application.ApplicationImplEventManager;
-import org.apache.myfaces.application.viewstate.StateUtils;
-import org.apache.myfaces.cdi.util.BeanEntry;
-import org.apache.myfaces.config.FacesConfigurator;
-import org.apache.myfaces.core.api.shared.lang.PropertyDescriptorUtils;
-import org.apache.myfaces.core.extensions.quarkus.runtime.spi.QuarkusFactoryFinderProvider;
-import org.apache.myfaces.el.ELResolverBuilderForFaces;
-import org.apache.myfaces.renderkit.ErrorPageWriter;
-import org.apache.myfaces.spi.FactoryFinderProviderFactory;
-import org.apache.myfaces.spi.impl.DefaultWebConfigProviderFactory;
-import org.apache.myfaces.util.ExternalContextUtils;
-import org.apache.myfaces.util.lang.ClassUtils;
-import org.apache.myfaces.view.ViewScopeProxyMap;
-import org.apache.myfaces.view.facelets.compiler.SAXCompiler;
-import org.apache.myfaces.view.facelets.compiler.TagLibraryConfig;
-import org.apache.myfaces.view.facelets.tag.MethodRule;
-import org.apache.myfaces.view.facelets.tag.jsf.ComponentSupport;
-import org.apache.myfaces.webapp.AbstractFacesInitializer;
-import org.apache.myfaces.webapp.FaceletsInitilializer;
-import org.apache.myfaces.webapp.MyFacesContainerInitializer;
-import org.jboss.jandex.AnnotationTarget;
-import org.jboss.jandex.ClassInfo;
-import org.jboss.jandex.FieldInfo;
-import org.jboss.jandex.MethodInfo;
-import org.jboss.jandex.Type;
-import org.jboss.metadata.web.spec.ServletMetaData;
-import org.jboss.metadata.web.spec.WebMetaData;
+import java.io.IOException;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
 
 class MyFacesProcessor
 {
@@ -254,26 +253,57 @@ class MyFacesProcessor
     }
 
     @BuildStep
-    void buildCdiScopes(BuildProducer<ContextRegistrarBuildItem> contextRegistrar) throws IOException
-    {
-        contextRegistrar.produce(new ContextRegistrarBuildItem(registrationContext -> {
-            registrationContext.configure(ViewScoped.class)
-                    .normal()
-                    .contextClass(QuarkusViewScopeContext.class)
-                    .done();
-            registrationContext.configure(FacesScoped.class)
-                    .normal()
-                    .contextClass(QuarkusFacesScopeContext.class)
-                    .done();
-            registrationContext.configure(ViewTransientScoped.class)
-                    .normal()
-                    .contextClass(QuarkusViewTransientScopeContext.class)
-                    .done();
-            registrationContext.configure(FlowScoped.class)
-                    .normal()
-                    .contextClass(QuarkusFlowScopedContext.class)
-                    .done();
-        }, ViewScoped.class, FacesScoped.class, ViewTransientScoped.class, FlowScoped.class));
+    ContextConfiguratorBuildItem registerViewScopeContext(ContextRegistrationPhaseBuildItem phase)
+    {
+        return new ContextConfiguratorBuildItem(
+                phase.getContext().configure(ViewScoped.class).normal().contextClass(QuarkusViewScopeContext.class));
+    }
+
+    @BuildStep
+    CustomScopeBuildItem viewScoped()
+    {
+        return new CustomScopeBuildItem(DotName.createSimple(ViewScoped.class.getName()));
+    }
+
+    @BuildStep
+    ContextConfiguratorBuildItem registerViewTransientScopeContext(ContextRegistrationPhaseBuildItem phase)
+    {
+        return new ContextConfiguratorBuildItem(
+                phase.getContext().configure(ViewTransientScoped.class)
+                        .normal().contextClass(QuarkusViewTransientScopeContext.class));
+    }
+
+    @BuildStep
+    CustomScopeBuildItem viewTransientScoped()
+    {
+        return new CustomScopeBuildItem(DotName.createSimple(ViewTransientScoped.class.getName()));
+    }
+
+    @BuildStep
+    ContextConfiguratorBuildItem registerFacesScopeContext(ContextRegistrationPhaseBuildItem phase)
+    {
+        return new ContextConfiguratorBuildItem(
+                phase.getContext().configure(FacesScoped.class).normal().contextClass(QuarkusFacesScopeContext.class));
+    }
+
+    @BuildStep
+    CustomScopeBuildItem facesScoped()
+    {
+        return new CustomScopeBuildItem(DotName.createSimple(FacesScoped.class.getName()));
+
+    }
+
+    @BuildStep
+    ContextConfiguratorBuildItem registerFlowScopedContext(ContextRegistrationPhaseBuildItem phase)
+    {
+        return new ContextConfiguratorBuildItem(
+                phase.getContext().configure(FlowScoped.class).normal().contextClass(QuarkusFlowScopedContext.class));
+    }
+
+    @BuildStep
+    CustomScopeBuildItem flowScoped()
+    {
+        return new CustomScopeBuildItem(DotName.createSimple(FlowScoped.class.getName()));
     }
 
     @BuildStep
@@ -375,7 +405,7 @@ class MyFacesProcessor
     @BuildStep
     @Record(ExecutionTime.STATIC_INIT)
     void buildFacesDataModels(MyFacesRecorder recorder,
-            BuildProducer<BeanRegistrarBuildItem> beanConfigurators,
+            BuildProducer<SyntheticBeanBuildItem> beanConfigurators,
             CombinedIndexBuildItem combinedIndex) throws IOException
     {
         for (AnnotationInstance ai : combinedIndex.getIndex()
diff --git a/extensions/quarkus/pom.xml b/extensions/quarkus/pom.xml
index 874edbf..2a4056c 100644
--- a/extensions/quarkus/pom.xml
+++ b/extensions/quarkus/pom.xml
@@ -43,7 +43,7 @@
     </modules>
 
     <properties>
-        <quarkus.version>1.7.0.Final</quarkus.version>
+        <quarkus.version>1.13.0.Final</quarkus.version>
     </properties>
 
     <build>
diff --git a/extensions/quarkus/showcase/README.md b/extensions/quarkus/showcase/README.md
index 8f7d88c..3e103d0 100644
--- a/extensions/quarkus/showcase/README.md
+++ b/extensions/quarkus/showcase/README.md
@@ -4,7 +4,7 @@ This sample application shows Quarkus Myfaces extension usage
 
 ## Running
 
-`mvn clean package -DskipTests && java -jar ./target/quarkus-myfaces-showcase-1.0-SNAPSHOT-runner.jar`
+`mvn clean package -DskipTests && java -jar ./target/quarkus-app/quarkus-run.jar`
 
 ## Dev mode
 
@@ -22,7 +22,7 @@ For native mode you need [graalvm 19.3.1](https://github.com/graalvm/graalvm-ce-
 
 Following is how to `build and run` the native image:
 
-`mvn clean package -Pnative && ./target/quarkus-myfaces-showcase-1.0-SNAPSHOT-runner`
+`mvn clean package -Pnative && java -jar ./target/quarkus-app/quarkus-run.jar`
 
 ## Testing 
 
diff --git a/extensions/quarkus/showcase/pom.xml b/extensions/quarkus/showcase/pom.xml
index 7250218..cc5ee2e 100644
--- a/extensions/quarkus/showcase/pom.xml
+++ b/extensions/quarkus/showcase/pom.xml
@@ -25,8 +25,8 @@
     <name>Apache MyFaces Core 2.3-next - Extensions - Quarkus - Showcase</name>
 
     <properties>
-        <quarkus.version>1.7.0.Final</quarkus.version>
-        <myfaces.version>2.3-next-M4</myfaces.version>
+        <quarkus.version>1.13.0.Final</quarkus.version>
+        <myfaces.version>2.3-next-SNAPSHOT</myfaces.version>
         <failsafe.version>2.22.0</failsafe.version>
         <surefire.version>2.22.0</surefire.version>
 
diff --git a/extensions/quarkus/showcase/src/main/resources/META-INF/web.xml b/extensions/quarkus/showcase/src/main/resources/META-INF/web.xml
index f4e2e8a..e17facf 100644
--- a/extensions/quarkus/showcase/src/main/resources/META-INF/web.xml
+++ b/extensions/quarkus/showcase/src/main/resources/META-INF/web.xml
@@ -1,42 +1,46 @@
-<?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-app version="4.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
-
-    <context-param>
-        <param-name>javax.faces.ENABLE_WEBSOCKET_ENDPOINT</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
-        <param-value>true</param-value>
-    </context-param>
-
-    <context-param>
-        <param-name>primefaces.THEME</param-name>
-        <param-value>luna-amber</param-value>
-    </context-param>
-    <context-param>
-        <param-name>org.apache.myfaces.AUTOMATIC_EXTENSIONLESS_MAPPING</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    
+<?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-app version="4.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
+
+    <context-param>
+        <param-name>javax.faces.ENABLE_WEBSOCKET_ENDPOINT</param-name>
+        <param-value>true</param-value>
+    </context-param>
+    <context-param>
+        <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
+        <param-value>true</param-value>
+    </context-param>
+
+    <context-param>
+        <param-name>primefaces.THEME</param-name>
+        <param-value>luna-amber</param-value>
+    </context-param>
+    <context-param>
+        <param-name>org.apache.myfaces.AUTOMATIC_EXTENSIONLESS_MAPPING</param-name>
+        <param-value>true</param-value>
+    </context-param>
+
+    <welcome-file-list>
+        <welcome-file>index.xhtml</welcome-file>
+    </welcome-file-list>
+
 </web-app>
\ No newline at end of file