You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ta...@apache.org on 2020/02/26 12:10:26 UTC
[myfaces] branch master updated: first step to Quarkus native
This is an automated email from the ASF dual-hosted git repository.
tandraschko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces.git
The following commit(s) were added to refs/heads/master by this push:
new a3c40e4 first step to Quarkus native
a3c40e4 is described below
commit a3c40e493bd623ce342c2f3bdf0e5d438952ab71
Author: Thomas Andraschko <ta...@apache.org>
AuthorDate: Wed Feb 26 13:10:17 2020 +0100
first step to Quarkus native
---
.../quarkus/deployment/MyFacesProcessor.java | 261 +++++++++++++++++++++
extensions/quarkus/pom.xml | 2 +-
extensions/quarkus/showcase/pom.xml | 4 +-
3 files changed, 264 insertions(+), 3 deletions(-)
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 5e76db9..f584560 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,6 +18,9 @@
*/
package org.apache.myfaces.core.extensions.quarkus.deployment;
+import com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl;
+import com.sun.org.apache.xpath.internal.functions.FuncLocalPart;
+import com.sun.org.apache.xpath.internal.functions.FuncNot;
import java.io.IOException;
import java.util.Optional;
@@ -72,8 +75,12 @@ 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;
@@ -86,6 +93,49 @@ 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 java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.el.ELResolver;
+import javax.faces.FactoryFinder;
+import javax.faces.component.UIComponent;
+import javax.faces.component.behavior.Behavior;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.event.ExceptionQueuedEventContext;
+import javax.faces.event.SystemEvent;
+import javax.faces.render.ClientBehaviorRenderer;
+import javax.faces.render.Renderer;
+import javax.faces.validator.Validator;
+import javax.faces.view.facelets.ComponentHandler;
+import javax.faces.view.facelets.ConverterHandler;
+import javax.faces.view.facelets.MetaRuleset;
+import javax.faces.view.facelets.TagHandler;
+import javax.faces.view.facelets.ValidatorHandler;
+import org.apache.el.ValueExpressionImpl;
+import org.apache.myfaces.application.ApplicationImpl;
+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.extensions.quarkus.runtime.spi.QuarkusFactoryFinderProvider;
+import org.apache.myfaces.el.ELResolverBuilderForFaces;
+import org.apache.myfaces.el.resolver.ImportHandlerResolver;
+import org.apache.myfaces.lifecycle.RestoreViewSupport;
+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.ClassInfo;
class MyFacesProcessor
{
@@ -126,6 +176,25 @@ class MyFacesProcessor
FaceletsResourceResolver.class.getName(),
FlowDefinition.class.getName()
};
+
+ private static final String[] FACTORIES =
+ {
+ FactoryFinder.APPLICATION_FACTORY,
+ FactoryFinder.EXCEPTION_HANDLER_FACTORY,
+ FactoryFinder.EXTERNAL_CONTEXT_FACTORY,
+ FactoryFinder.FACES_CONTEXT_FACTORY,
+ FactoryFinder.LIFECYCLE_FACTORY,
+ FactoryFinder.PARTIAL_VIEW_CONTEXT_FACTORY,
+ FactoryFinder.RENDER_KIT_FACTORY,
+ FactoryFinder.TAG_HANDLER_DELEGATE_FACTORY,
+ FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY,
+ FactoryFinder.VISIT_CONTEXT_FACTORY,
+ FactoryFinder.FACELET_CACHE_FACTORY,
+ FactoryFinder.FLASH_FACTORY,
+ FactoryFinder.FLOW_HANDLER_FACTORY,
+ FactoryFinder.CLIENT_WINDOW_FACTORY,
+ FactoryFinder.SEARCH_EXPRESSION_CONTEXT_FACTORY
+ };
@BuildStep
void buildFeature(BuildProducer<FeatureBuildItem> feature) throws IOException
@@ -334,4 +403,196 @@ class MyFacesProcessor
}
}
}
+
+ @BuildStep
+ void produceApplicationArchiveMarker(
+ BuildProducer<AdditionalApplicationArchiveMarkerBuildItem> additionalArchiveMarkers)
+ {
+ additionalArchiveMarkers.produce(new AdditionalApplicationArchiveMarkerBuildItem("org/primefaces/component"));
+ additionalArchiveMarkers.produce(new AdditionalApplicationArchiveMarkerBuildItem("javax/faces/component"));
+ additionalArchiveMarkers.produce(new AdditionalApplicationArchiveMarkerBuildItem("org/apache/myfaces/view"));
+ }
+
+ @BuildStep
+ @Record(ExecutionTime.STATIC_INIT)
+ void registerForLimitedReflection(MyFacesRecorder recorder,
+ BuildProducer<ReflectiveClassBuildItem> reflectiveClass,
+ CombinedIndexBuildItem combinedIndex)
+ {
+ List<String> classNames = new ArrayList<>();
+ List<Class<?>> classes = new ArrayList<>();
+
+ classNames.addAll(collectClassAndSubclasses(combinedIndex, Renderer.class.getName()));
+ classNames.addAll(collectClassAndSubclasses(combinedIndex, javax.el.ValueExpression.class.getName()));
+ classNames.addAll(collectClassAndSubclasses(combinedIndex, "org.primefaces.component.api.Widget"));
+ classNames.addAll(collectClassAndSubclasses(combinedIndex, ClientBehaviorRenderer.class.getName()));
+ classNames.addAll(collectClassAndSubclasses(combinedIndex, SystemEvent.class.getName()));
+ classNames.addAll(collectClassAndSubclasses(combinedIndex, FacesContext.class.getName()));
+
+ for (String factory : FACTORIES)
+ {
+ classNames.addAll(collectClassAndSubclasses(combinedIndex, factory));
+ }
+
+ classNames.addAll(Arrays.asList(
+ "org.primefaces.behavior.ajax.AjaxBehavior",
+ "org.primefaces.config.PrimeEnvironment",
+ "com.lowagie.text.pdf.MappedRandomAccessFile",
+ "org.apache.myfaces.application._ApplicationUtils",
+ "com.sun.el.util.ReflectionUtil",
+ "com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl",
+ "org.primefaces.util.MessageFactory",
+ "javax.faces.component._DeltaStateHelper",
+ "javax.faces.component._DeltaStateHelper$InternalMap"));
+
+ classes.addAll(Arrays.asList(
+ DefaultWebConfigProviderFactory.class,
+ ErrorPageWriter.class,
+ DocumentBuilderFactoryImpl.class,
+ FuncLocalPart.class,
+ FuncNot.class,
+ MyFacesContainerInitializer.class,
+ RestoreViewSupport.class,
+ ExceptionQueuedEventContext.class,
+ FacesConfigurator.class,
+ FaceletsInitilializer.class,
+ ImportHandlerResolver.class,
+ TagLibraryConfig.class,
+ String.class,
+ ValueExpressionImpl.class,
+ ViewScopeProxyMap.class,
+ SAXCompiler.class,
+ StateUtils.class,
+ ApplicationImpl.class));
+
+ reflectiveClass.produce(
+ new ReflectiveClassBuildItem(false, false, classNames.toArray(new String[classNames.size()])));
+ reflectiveClass.produce(
+ new ReflectiveClassBuildItem(false, false, classes.toArray(new Class[classes.size()])));
+ }
+
+ @BuildStep
+ @Record(ExecutionTime.STATIC_INIT)
+ void registerForMethodReflection(MyFacesRecorder recorder, BuildProducer<ReflectiveClassBuildItem> reflectiveClass,
+ CombinedIndexBuildItem combinedIndex)
+ {
+ List<String> classNames = new ArrayList<>();
+ List<Class<?>> classes = new ArrayList<>();
+
+ classNames.addAll(collectClassAndSubclasses(combinedIndex, TagHandler.class.getName()));
+ classNames.addAll(collectClassAndSubclasses(combinedIndex, ConverterHandler.class.getName()));
+ classNames.addAll(collectClassAndSubclasses(combinedIndex, ComponentHandler.class.getName()));
+ classNames.addAll(collectClassAndSubclasses(combinedIndex, ValidatorHandler.class.getName()));
+ classNames.addAll(collectClassAndSubclasses(combinedIndex, UIComponent.class.getName()));
+ classNames.addAll(collectClassAndSubclasses(combinedIndex, Converter.class.getName()));
+ classNames.addAll(collectClassAndSubclasses(combinedIndex, Validator.class.getName()));
+ classNames.addAll(collectClassAndSubclasses(combinedIndex, Behavior.class.getName()));
+ classNames.addAll(collectClassAndSubclasses(combinedIndex, ELResolver.class.getName()));
+ classNames.addAll(collectClassAndSubclasses(combinedIndex, MethodRule.class.getName()));
+ classNames.addAll(collectClassAndSubclasses(combinedIndex, MetaRuleset.class.getName()));
+ classNames.addAll(Arrays.asList(
+ "org.primefaces.util.ComponentUtils",
+ "org.primefaces.expression.SearchExpressionUtils",
+ "org.primefaces.util.SecurityUtils",
+ "org.primefaces.util.LangUtils",
+ "javax.faces._FactoryFinderProviderFactory",
+ "io.quarkus.myfaces.showcase.view.LazyView",
+ "io.quarkus.myfaces.showcase.view.LazyView_ClientProxy",
+ "io.quarkus.myfaces.showcase.view.Car",
+ "io.quarkus.myfaces.showcase.view.LazyCarDataModel",
+ "io.quarkus.myfaces.showcase.view.CarService",
+ "io.quarkus.myfaces.showcase.view.LazySorter"));
+
+ classes.addAll(Arrays.asList(
+ ClassUtils.class,
+ FactoryFinderProviderFactory.class,
+ ComponentSupport.class,
+ QuarkusFactoryFinderProvider.class,
+ ELResolverBuilderForFaces.class,
+ AbstractFacesInitializer.class,
+ ExternalContextUtils.class,
+ BeanEntry.class));
+
+ reflectiveClass.produce(
+ new ReflectiveClassBuildItem(true, false, classNames.toArray(new String[classNames.size()])));
+ reflectiveClass.produce(
+ new ReflectiveClassBuildItem(true, false, classes.toArray(new Class[classes.size()])));
+ }
+
+
+ @BuildStep
+ @Record(ExecutionTime.STATIC_INIT)
+ void registerForFieldReflection(MyFacesRecorder recorder, BuildProducer<ReflectiveClassBuildItem> reflectiveClass,
+ CombinedIndexBuildItem combinedIndex)
+ {
+ reflectiveClass.produce(new ReflectiveClassBuildItem(true, true,
+ "javax.faces.context_MyFacesExternalContextHelper",
+ "org.apache.myfaces.core.extensions.quarkus.showcase.view.LazyView_ClientProxy"));
+ }
+
+ @BuildStep
+ void substrateResourceBuildItems(BuildProducer<NativeImageResourceBuildItem> nativeImageResourceProducer,
+ BuildProducer<NativeImageResourceBundleBuildItem> resourceBundleBuildItem)
+ {
+ nativeImageResourceProducer
+ .produce(new NativeImageResourceBuildItem("META-INF/maven/org.primefaces/primefaces/pom.properties"));
+ nativeImageResourceProducer.produce(new NativeImageResourceBuildItem(
+ "META-INF/rsc/myfaces-dev-error.xml",
+ "META-INF/rsc/myfaces-dev-debug.xml",
+ "org/apache/myfaces/resource/default.dtd",
+ "org/apache/myfaces/resource/datatypes.dtd",
+ "META-INF/web-fragment.xml",
+ "META-INF/resources/org/apache/myfaces/windowId/windowhandler.html",
+ "org/apache/myfaces/resource/facelet-taglib_1_0.dtd",
+ "org/apache/myfaces/resource/javaee_5.xsd",
+ "org/apache/myfaces/resource/web-facelettaglibrary_2_0.xsd",
+ "org/apache/myfaces/resource/XMLSchema.dtd",
+ "org/apache/myfaces/resource/facesconfig_1_0.dtd",
+ "org/apache/myfaces/resource/web-facesconfig_1_1.dtd",
+ "org/apache/myfaces/resource/web-facesconfig_1_2.dtd",
+ "org/apache/myfaces/resource/web-facesconfig_2_0.dtd",
+ "org/apache/myfaces/resource/web-facesconfig_2_1.dtd",
+ "org/apache/myfaces/resource/web-facesconfig_2_2.dtd",
+ "org/apache/myfaces/resource/web-facesconfig_2_3.dtd",
+ "org/apache/myfaces/resource/web-facesconfig_3_0.dtd",
+ "org/apache/myfaces/resource/xml.xsd",
+ "META-INF/rsc/myfaces-dev-error-include.xml",
+ "META-INF/services/javax.servlet.ServletContainerInitializer"));
+
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.faces.Messages"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.faces.Messages_ar"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.faces.Messages_ca"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.faces.Messages_cs"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.faces.Messages_de"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.faces.Messages_en"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.faces.Messages_es"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.faces.Messages_fr"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.faces.Messages_it"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.faces.Messages_ja"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.faces.Messages_mt"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.faces.Messages_nl"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.faces.Messages_pl"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.faces.Messages_pt_PR"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.faces.Messages_ru"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.faces.Messages_sk"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.faces.Messages_zh_CN"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.faces.Messages_zh_HK"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.faces.Messages_zh_TW"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.el.PrivateMessages"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.servlet.LocalStrings"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("javax.el.LocalStrings"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("org.primefaces.Messages"));
+ resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("org.primefaces.Messages_en"));
+ }
+
+ public List<String> collectClassAndSubclasses(CombinedIndexBuildItem combinedIndex, String className)
+ {
+ List<String> classes = combinedIndex.getIndex()
+ .getAllKnownSubclasses(DotName.createSimple(className))
+ .stream()
+ .map(ClassInfo::toString)
+ .collect(Collectors.toList());
+ classes.add(className);
+ return classes;
+ }
}
diff --git a/extensions/quarkus/pom.xml b/extensions/quarkus/pom.xml
index 121a90f..f1dd76c 100644
--- a/extensions/quarkus/pom.xml
+++ b/extensions/quarkus/pom.xml
@@ -40,7 +40,7 @@
</modules>
<properties>
- <quarkus.version>1.1.0.CR1</quarkus.version>
+ <quarkus.version>1.2.1.Final</quarkus.version>
</properties>
<build>
diff --git a/extensions/quarkus/showcase/pom.xml b/extensions/quarkus/showcase/pom.xml
index 0d3b5ee..57abf1b 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.1.0.CR1</quarkus.version>
- <myfaces.version>2.3-next-M1</myfaces.version>
+ <quarkus.version>1.2.1.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>