Changes since 25.3.0-alpha2
New features
-
Reuse shared metadata cache when scanning
Commit · Pull request · IssueClass and annotation scanning at startup runs many passes (routes, error handlers, web components, lookup, ...), each building a new
ClassPathScanner. BecauseCustomResourceLoaderdoes not extendDefaultResourceLoader, Spring'sCachingMetadataReaderFactoryfalls back to a per-scan cache bounded to 256 entries instead of the application context's shared, unbounded resource cache. Parsed class metadata is therefore discarded and re-computed on every pass, slowing down startup on large classpaths. Keep the filteringCustomResourceLoaderas the scanner's pattern resolver so package and JAR filtering is preserved, and override the scanner'sMetadataReaderFactorywith a single sharedCachingMetadataReaderFactorybacked by the application context. As the context is aDefaultResourceLoader, the factory now stores metadata in the context's shared cache and reuses it across all scan passes.
Fixes
-
Support gradle 9 in plugin
Commit · Pull request · IssueBump kotlin and dokka versions. Add tests for 9.0.0 and 9.5.0
-
Make URL_SAFE_SCHEMES init parameter name consistent
Commit · Pull requestInitParameters.URL_SAFE_SCHEMESused the valuecom.vaadin.safeUrlSchemes, which is inconsistent with every other parameter in the class — none of them carry acom.vaadin.prefix. Since the parameter already shipped in 25.2.1, the old name must keep working to avoid breaking existing configurations. Change the canonical value tosafeUrlSchemesand add a deprecatedURL_SAFE_SCHEMES_LEGACYconstant holding the previous value.AbstractDeploymentConfiguration#getUrlSafeSchemesnow reads the new name first and falls back to the legacy name, with the new name taking precedence when both are present. -
Prevent refreshViewport from reloading data from data provider
Commit · Pull requestDataCommunicator#refreshViewportused to set the same flag asreset(), which made the flush re-query the item count and re-fetch the viewport range from the data provider. Now it only regenerates and resends data for the items that are already active, matching the behavior ofHierarchicalDataCommunicator#refreshViewport. Changes: - The formerresendEntireRangeflag is renamed toreloadViewportRange(it reloads the viewport range from the data provider and resends it). - A newresendViewportRangeflag drives the resend-only path used byrefreshViewport: the active range is regenerated through the data generators and resent viaupdate.setwithout any data provider queries, using the same wire format as before. - If the viewport range changes in the same roundtrip, newly visible items are still fetched from the data provider as they were never loaded. -
Clean up countInstances
Commit · Pull request · IssueMake count instances more effective by not using split that compiles a pattern and generates an array for each invocation.