eclipse-ee4j / mojarra

Mojarra, a Jakarta Faces implementation
Other
163 stars 111 forks source link

Automatic Extensionless Mapping - Startup Performance Issues #5510

Open RohdeSchwarz-SDC opened 1 month ago

RohdeSchwarz-SDC commented 1 month ago

Problem

As soon as I enable the feature jakarta.faces.AUTOMATIC_EXTENSIONLESS_MAPPING the webserver starts really slowly! \ Maybe there is something you (or we) could do?

Setup

Logs

AUTOMATIC_EXTENSIONLESS_MAPPING = false

08-Oct-2024 16:19:37.224 INFORMATION [main] org.apache.tomcat.util.net.AbstractEndpoint.logCertificate Connector [https-openssl-nio-8443], TLS virtual host [_default_], certificate type [RSA] configured from keystore [conf/certificate.p12] using alias [tomcat] with trust store [null]
08-Oct-2024 16:19:37.230 INFORMATION [main] org.apache.catalina.startup.Catalina.load Server initialization in [976] milliseconds
08-Oct-2024 16:19:37.287 INFORMATION [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
08-Oct-2024 16:19:37.288 INFORMATION [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/10.1.24]
08-Oct-2024 16:19:39.670 INFORMATION [main] org.apache.webbeans.lifecycle.AbstractLifeCycle.bootstrapApplication OpenWebBeans Container is starting...
08-Oct-2024 16:19:39.699 INFORMATION [main] org.apache.webbeans.corespi.scanner.AbstractMetaDataDiscovery.addWebBeansXmlLocation added beans archive URL: file:/W:/tools/web/apache-tomcat/v10/lib/
08-Oct-2024 16:19:39.700 INFORMATION [main] org.apache.webbeans.corespi.scanner.AbstractMetaDataDiscovery.addWebBeansXmlLocation added beans archive URL: file:/W:/eclipse/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/myWebApp/WEB-INF/classes/
08-Oct-2024 16:19:41.639 INFORMATION [main] org.apache.webbeans.config.BeansDeployer.validateInjectionPoints All injection points were validated successfully.
08-Oct-2024 16:19:41.642 INFORMATION [main] org.apache.webbeans.lifecycle.AbstractLifeCycle.bootstrapApplication OpenWebBeans Container has started, it took [1969] ms.
08-Oct-2024 16:19:41.691 INFORMATION [main] com.sun.faces.config.ConfigureListener.contextInitialized Mojarra 4.0.8 für Kontext '/myWebApp' wird initialisiert.
08-Oct-2024 16:19:42.478 INFORMATION [main] com.sun.faces.spi.InjectionProviderFactory.createInstance JSF1048: PostConstruct/PreDestroy-Annotationen vorhanden.  Verwaltete Bean-Methoden, die mit diesen Annotationen markiert sind, lassen die entsprechenden Annotationen verarbeiten.
08-Oct-2024 16:19:44.450 INFORMATION [main] org.primefaces.webapp.PostConstructApplicationEventListener.processEvent Running on PrimeFaces 14.0.5
08-Oct-2024 16:19:44.451 INFORMATION [main] org.primefaces.extensions.application.PostConstructApplicationEventListener.processEvent Running on PrimeFaces Extensions 14.0.5
08-Oct-2024 16:19:47.315 INFORMATION [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
08-Oct-2024 16:19:47.365 INFORMATION [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["https-openssl-nio-8443"]
08-Oct-2024 16:19:47.377 INFORMATION [main] org.apache.catalina.startup.Catalina.start Server startup in [10145] milliseconds

AUTOMATIC_EXTENSIONLESS_MAPPING = true

08-Oct-2024 16:20:52.731 INFORMATION [main] org.apache.catalina.startup.Catalina.load Server initialization in [1001] milliseconds
08-Oct-2024 16:20:52.773 INFORMATION [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
08-Oct-2024 16:20:52.773 INFORMATION [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/10.1.24]
08-Oct-2024 16:20:55.103 INFORMATION [main] org.apache.webbeans.lifecycle.AbstractLifeCycle.bootstrapApplication OpenWebBeans Container is starting...
08-Oct-2024 16:20:55.146 INFORMATION [main] org.apache.webbeans.corespi.scanner.AbstractMetaDataDiscovery.addWebBeansXmlLocation added beans archive URL: file:/W:/tools/web/apache-tomcat/v10/lib/
08-Oct-2024 16:20:55.149 INFORMATION [main] org.apache.webbeans.corespi.scanner.AbstractMetaDataDiscovery.addWebBeansXmlLocation added beans archive URL: file:/W:/eclipse/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/myWebApp/WEB-INF/classes/
08-Oct-2024 16:20:57.299 INFORMATION [main] org.apache.webbeans.config.BeansDeployer.validateInjectionPoints All injection points were validated successfully.
08-Oct-2024 16:20:57.302 INFORMATION [main] org.apache.webbeans.lifecycle.AbstractLifeCycle.bootstrapApplication OpenWebBeans Container has started, it took [2197] ms.
08-Oct-2024 16:20:57.356 INFORMATION [main] com.sun.faces.config.ConfigureListener.contextInitialized Mojarra 4.0.8 für Kontext '/myWebApp' wird initialisiert.
08-Oct-2024 16:20:58.137 INFORMATION [main] com.sun.faces.spi.InjectionProviderFactory.createInstance JSF1048: PostConstruct/PreDestroy-Annotationen vorhanden.  Verwaltete Bean-Methoden, die mit diesen Annotationen markiert sind, lassen die entsprechenden Annotationen verarbeiten.
08-Oct-2024 16:21:05.289 INFORMATION [main] org.primefaces.webapp.PostConstructApplicationEventListener.processEvent Running on PrimeFaces 14.0.5
08-Oct-2024 16:21:05.303 INFORMATION [main] org.primefaces.extensions.application.PostConstructApplicationEventListener.processEvent Running on PrimeFaces Extensions 14.0.5
08-Oct-2024 16:21:08.176 INFORMATION [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
08-Oct-2024 16:21:08.223 INFORMATION [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["https-openssl-nio-8443"]
08-Oct-2024 16:21:08.236 INFORMATION [main] org.apache.catalina.startup.Catalina.start Server startup in [15506] milliseconds
pizzi80 commented 1 month ago

I'm not an OpenWebBeans user but as far as I can see on their github repository you should use OpenWebBeans 4.0.2

How big is your webapp?

BalusC commented 1 month ago

How big is your webapp?

It's a good question. How many XHTML files are there? Biggest bottleneck is in the ServletRegistration#addMapping() and the performance is servletcontainer impl dependent.

OWB has got nothing to do with this. Under the covers ServletContext#getResourcePaths() and ServletRegistration#addMapping() are being used which are part of the Servlet API.

RohdeSchwarz-SDC commented 3 weeks ago

How big is your webapp?

It contains ~ 100 *.xhtml files, but only ~5 are "toplevel" files, the rest are <ui:composition> to be included via <ui:include>. I tried to rename those ~95 to *.xhtml.composition but it did not improve the procession performance of PostConstruct/PreDestroy annotations.

My impression is that com.sun.faces.spi.InjectionProviderFactory.createInstance scans the webapp's classpath twice for bean annotations like @Named?