Skip to content

4.1.10

Latest

Choose a tag to compare

@mojarra-bot mojarra-bot released this 14 Jul 18:45

4.1.10 has been released

What's Changed

  • Fix #5733: fallback using response encoding when request encoding is by @BalusC in #5734
  • Backport of inline js for non-CSP apps by @jasondlee in #5732
  • Add a WildFly profile for testing by @jasondlee in #5738
  • Fix #5735: add MojarraVersion so faces.js gets v= param by @BalusC in #5737
  • Issue 5741 - Fix CSP-related rendering in OutcomeTargetButtonRenderer by @jasondlee in #5742
  • Update feature pack coords for WildFly 40 Final, EE 11 variant by @jasondlee in #5743
  • Update WildFly feature pack version to 40.0.0.Final by @jasondlee in #5744
  • Fix #5750: NPE when extensionless mapping is used without faces config by @BalusC in #5751
  • Fix ui:debug under CSP: drop gratuitous eval in generated script by @BalusC in #5765
  • Fix NPE rendering h:inputText with pt: attribute and f:ajax #5772 by @BalusC in #5773
  • Emit a development-stage warning when a component binding is not request scoped by @BalusC in #5790
  • Treat a declared default as satisfying a required composite attribute by @BalusC in #5820
  • Fix #5837 render event handler attribute once when set via expression by @BalusC in #5839
  • Do not destroy the @ViewScoped beans of a view map which is still in use by @BalusC in #5845

Performance review (#5753)

A large batch of Faces lifecycle performance improvements, developed on 4.1 and 5.0 under the #5753 performance-review effort (the paired 4.0 backports are included in the compare range below):

  • Reduce component tree allocations + cache resolved Renderer to speed up Restore View / Render Response by @BalusC in #5754
  • Cache CDI bean resolution to eliminate per-render BeanManager lookups by @BalusC in #5752
  • Response-writer performance improvements (range-emit + buffer elimination) by @BalusC in #5755
  • Add test/perf benchmark module to compare Faces lifecycle phase timings across mojarra branches by @BalusC in #5756
  • Three small request-hot-path improvements: FacetsMap empty short-circuit, descriptor-map computeIfAbsent, and UIData/UIRepeat restore-state hoist by @BalusC in #5757
  • Reduce request-pipeline overhead (state, traversal, render output, events) by @BalusC in #5759
  • Reduce request-pipeline overhead (state, traversal, render output, events) — 4.0 backport by @BalusC in #5760
  • Fix slow RESTORE_VIEW: replace the descendant-mark-id cache with a refresh-gated direct scan by @BalusC in #5761
  • Fix slow RESTORE_VIEW: replace the descendant-mark-id cache with a refresh-gated direct scan — 4.0 backport by @BalusC in #5762
  • Reduce RESTORE_VIEW overhead: dynamic-add gate, field-backed Facelets markers, ancestor memoization by @BalusC in #5764
  • Backport #5764 to 4.0: reduce RESTORE_VIEW overhead (dynamic-add gate, field-backed Facelets markers, ancestor memoization) by @BalusC in #5766
  • Eliminate nested UIData/UIRepeat per-row state cost; field-back UIInput hot properties by @BalusC in #5767
  • Backport #5767 to 4.0: eliminate nested UIData/UIRepeat per-row state cost; field-back UIInput hot properties by @BalusC in #5768
  • Reduce per-component buildView/render overhead (lazy state map, UIOutput converter, rendererType, AttributesMap getter) by @BalusC in #5770
  • Backport #5770 to 4.0: reduce per-component buildView/render overhead by @BalusC in #5771
  • Backport #5774 into 4.0 by @BalusC in #5775
  • Backport #5774 into 4.1 by @BalusC in #5776
  • Reduce per-component request-pipeline overhead by @BalusC in #5777
  • Partial-state-saving and component-tree-walk performance improvements by @BalusC in #5778
  • Backport #5777 and #5778 into 4.0 by @BalusC in #5779
  • Replace composite-expression cache with guard + per-attribute memoization by @BalusC in #5782
  • Consolidate and calibrate the test/perf benchmark scenarios by @BalusC in #5781
  • Make dynamic component add/remove restore O(N) instead of O(N²) by @BalusC in #5783
  • Backport #5781, #5782, #5783 into 4.0 by @BalusC in #5784
  • Postback/render performance: dynamic-action regression fix + CDI & event-dispatch overhead (#5753) by @BalusC in #5785
  • Backport #5785 into 4.0 by @BalusC in #5786
  • Fix PerfBenchIT ajax scenarios to send faces.js-resolved client ids by @BalusC in #5788
  • Trim per-component overhead on the dynamic add/remove path by @BalusC in #5791
  • Reduce per-component overhead in encode and view build by @BalusC in #5793
  • Backport #5791 and #5793 into 4.0 by @BalusC in #5794
  • Reduce attribute-handling reflective overhead in buildView and render by @BalusC in #5796
  • Backport #5796 to 4.0: reduce attribute-handling reflective overhead by @BalusC in #5797
  • Reduce render/decode StateHelper and reflective overhead by @BalusC in #5798
  • Backport #5798 into 4.0 — reduce render/decode StateHelper and reflective overhead by @BalusC in #5799
  • Cut per-component createComponent overhead in buildView by @BalusC in #5800
  • Cut per-component createComponent overhead in buildView (backport #5800 to 4.0) by @BalusC in #5802
  • Field-back component value expressions to cut Restore View cost by @BalusC in #5805
  • Field-back component value expressions to cut Restore View cost (4.0 backport) by @BalusC in #5806
  • Fix CCE in isRendered() on String-valued rendered expression (regression from #5754) by @BalusC in #5801
  • Render children appended during a parent's own encode by @BalusC in #5807
  • Backport #5807 to 4.0: Render children appended during a parent's own encode by @BalusC in #5808
  • Backport #5811 to 4.0: Skip redundant render-time facelet re-apply for static views by @BalusC in #5812
  • Backport jakartaee/faces#2191 to 4.0: skip redundant composite-flag re-derivation on Restore View walk by @BalusC in #5813
  • Default the render-time facelet re-apply skip; rename its param by @BalusC in #5815
  • Re-apply views with dynamic f:view / f:loadBundle inputs (regression from #5811) by @BalusC in #5816
  • Backport Restore View allocation reductions (#5818, faces#2194) to 4.0 by @BalusC in #5819
  • Backport #5821 to 4.0: three view-lifecycle perf levers by @BalusC in #5822
  • Rework test/perf scenarios: realism, coverage, ~2-3ms sizing by @BalusC in #5823
  • Backport #5824 to 4.0: c:forEach render-reapply skip + ViewScope FacesContext dedup by @BalusC in #5825
  • Restructure perf bench into a component-family x variant matrix by @BalusC in #5827
  • Backport converter + c:forEach caching to 4.0 (#5828, #5829, jakartaee/faces#2199) by @BalusC in #5831
  • Backport #5830 to 4.1: perf bench convertDateTime + form-invalid-ajax by @BalusC in #5832
  • Add missing f:convertDateTime to the shared form-fields date input by @BalusC in #5833
  • Backport to 4.0: Cache the parse formatter in DateTimeConverter.getAsObject by @BalusC in #5834
  • Backport #5835 to 4.0: index the Facelets tag-id lookup on refresh by @BalusC in #5836
  • Backport jakartaee/faces#2201 to 4.0: app-scope java.time formatters by @BalusC in #5838
  • Backport reduce PROCESS_VALIDATIONS overhead (parser/validator/transient-state caching) to 4.0 by @BalusC in #5840
  • test/perf: share one input set across scenarios; per-field messages + typed form fields by @BalusC in #5841
  • Backport EL resolution, composite component and component-id performance to 4.0 by @BalusC in #5843
  • 4.0 backport: validation EL resolution + buildView performance by @BalusC in #5847
  • Backport dynamic-component and state-saving perf improvements to 4.0 (#5848, #5849, #5851, faces#2209) by @BalusC in #5853

Full Changelog: 4.1.9-RELEASE...4.1.10-RELEASE

Notes for upgraders

Changed default behavior

  • The redundant render-time Facelets re-apply is now skipped by default for safe static views (partial state saving, non-transient, no dynamic add/remove, no build-time-dynamic JSTL), the bulk of the render-phase speedup. This matches MyFaces, which already skips by default via its org.apache.myfaces.REFRESH_TRANSIENT_BUILD_ON_PSS=auto default. Restore the legacy always-re-apply with com.sun.faces.refreshTransientBuildOnPSS=true (#5815). Views with dynamic f:view/f:loadBundle inputs are re-applied automatically (#5816).

New / changed context parameters

  • com.sun.faces.refreshTransientBuildOnPSS (boolean, default false) — set true to opt out of the re-apply skip above. Example: a custom or third-party Facelets tag handler that applies per-request state to the tree during the build (as f:view/f:loadBundle do) but does not mark the view build-time-dynamic — its updates would otherwise stay frozen at the initial-build values across postbacks. A view is marked build-time-dynamic automatically when it contains any of c:if, c:forEach, c:choose, c:set, c:catch, or a non-literal ui:include/ui:decorate/ui:composition; there is no portable/spec API to force it (Mojarra's internal hook is the protected TagHandlerImpl.markDynamicTransientBuild). If none of those apply, set this to true to restore the pre-4.1.10 unconditional re-apply.
  • com.sun.faces.disableIdUniquenessCheck — now accepts true|false|auto (was boolean). auto skips the duplicate component-id check when ProjectStage=Production; default false still always checks. The nearest MyFaces counterpart is org.apache.myfaces.CHECK_ID_PRODUCTION_MODE (values true|auto|false, default auto), but its auto is narrower: in Production it still checks on the initial GET request and on postbacks that add components programmatically, skipping only the per-request walk on static postbacks — it does not disable the check outright the way Mojarra's auto does.

Other visible changes

  • The faces.js resource URL now carries a v=<version> cache-busting parameter, and the running build is published to #{applicationScope['com.sun.faces.mojarraVersion']} (specversion / implversion) for EL/script use (#5737).