dependabot[bot] opened a new pull request, #20930: URL: https://github.com/apache/camel/pull/20930
Bumps [com.cedarsoftware:java-util](https://github.com/jdereg/java-util) from 4.83.0 to 4.84.0. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/jdereg/java-util/blob/master/changelog.md">com.cedarsoftware:java-util's changelog</a>.</em></p> <blockquote> <h4>4.84.0 - 2025-01-19</h4> <ul> <li><strong>BUG FIX</strong>: <code>ClassValueMap</code> - Fixed race condition in <code>putIfAbsent(null, value)</code> for null key handling <ul> <li>Previously used separate <code>volatile boolean hasNullKeyMapping</code> + <code>AtomicReference<V> nullKeyValue</code> fields</li> <li>Race: thread A could see <code>hasNullKeyMapping=true</code> but read stale <code>nullKeyValue</code> before thread B's write completed</li> <li>Fix: Combined into single <code>AtomicReference<Object> nullKeyStore</code> with sentinel values (<code>NO_NULL_KEY_MAPPING</code>, <code>NULL_FOR_NULL_KEY</code>)</li> <li>Eliminates volatile read on common <code>get()</code> path - now pure AtomicReference.get()</li> </ul> </li> <li><strong>BUG FIX</strong>: <code>TTLCache</code> - Fixed thread-safety issue in <code>put()</code> that could corrupt LRU chain <ul> <li>Previously used <code>tryLock()</code> and skipped LRU updates if lock unavailable</li> <li>Under contention, cache map and LRU chain could become inconsistent</li> <li>Fix: Now acquires lock for entire put operation; moves cache map update inside lock</li> <li>Added safety check in <code>moveToTail()</code> to skip already-evicted nodes</li> </ul> </li> <li><strong>BUG FIX</strong>: <code>UniversalConversions</code> - Fixed NPE in bridge methods when source value is null <ul> <li><code>integerToAtomicInteger()</code>, <code>longToAtomicLong()</code>, <code>booleanToAtomicBoolean()</code> now return null for null input</li> <li>Previously threw NullPointerException on <code>new AtomicXxx(null)</code></li> </ul> </li> <li><strong>PERFORMANCE</strong>: <code>LRUCache</code> (THREADED strategy) - Removed unnecessary volatile from <code>Node.value</code> and <code>Node.timestamp</code> <ul> <li><code>value</code> is never modified after construction</li> <li><code>timestamp</code> is used for approximate LRU only - stale reads acceptable given existing approximations</li> <li>ConcurrentHashMap publish provides necessary memory barriers for initial visibility</li> </ul> </li> <li><strong>PERFORMANCE</strong>: <code>LRUCache</code> (LOCKING strategy) - GC improvements <ul> <li>Made <code>Node.key</code> final</li> <li>Null out <code>node.prev</code>/<code>node.next</code> links on removal to avoid GC nepotism</li> <li>Null out <code>node.value</code> on eviction to release value reference promptly</li> </ul> </li> <li><strong>PERFORMANCE</strong>: <code>StringUtilities.hashCodeIgnoreCase()</code> - Single-pass algorithm optimization <ul> <li>Previously made two passes: first to check ASCII, then to compute hash</li> <li>Now computes hash while checking for non-ASCII, falling back only when non-ASCII detected</li> </ul> </li> <li><strong>PERFORMANCE</strong>: <code>Converter</code> - Removed ~50 redundant conversion entries now handled by surrogate system <ul> <li>Entries like <code>Byte → AtomicBoolean</code>, <code>String → AtomicInteger</code>, etc. are now automatic via surrogate bridges</li> <li>Example: <code>String → AtomicInteger</code> now goes <code>String → Integer → AtomicInteger</code> via surrogate system</li> <li>Reduces CONVERSION_DB size and maintenance burden without losing any functionality</li> </ul> </li> <li><strong>NEW</strong>: <code>Converter</code> - Added <code>Boolean ↔ BitSet</code> conversions <ul> <li><code>BitSet → Boolean</code>: returns <code>true</code> if any bit set, <code>false</code> if empty</li> <li><code>Boolean → BitSet</code>: <code>true</code> creates BitSet with bit 0 set, <code>false</code> creates empty BitSet</li> <li>Primitive <code>boolean ↔ BitSet</code> works automatically via surrogate system</li> </ul> </li> <li><strong>IMPROVED</strong>: <code>LRUCache</code> (THREADED strategy) - Fixed scheduler shutdown to properly clear reference <ul> <li><code>shutdownScheduler()</code> now sets <code>scheduler = null</code> after shutdown to allow recreation</li> <li>Previously, shutdown scheduler reference remained, preventing new cache instances from starting cleanup</li> </ul> </li> <li><strong>BUILD</strong>: Updated json-io test dependency from 4.81.0 to 4.83.0</li> <li><strong>BUILD</strong>: Re-enabled <code>ConverterEverythingTest</code> (was temporarily excluded)</li> <li><strong>DOCS</strong>: Updated README to reflect 1600+ conversions (was 1000+)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/jdereg/java-util/commit/c20abd1659c403976f54904edf84b4f1bb8cce71"><code>c20abd1</code></a> Release 4.84.0</li> <li><a href="https://github.com/jdereg/java-util/commit/266d36829f738773a0f0c1c152226e24ae1c1925"><code>266d368</code></a> Bug fixes, performance improvements, and Converter cleanup</li> <li><a href="https://github.com/jdereg/java-util/commit/db2b31a6be366b51660f19d2245921902957861c"><code>db2b31a</code></a> Performance: Remove volatile from CompactMap templateBytecode</li> <li><a href="https://github.com/jdereg/java-util/commit/b42d97c797f8c459b54756e6a7c23d484a9ddfcf"><code>b42d97c</code></a> Performance: Remove volatile from CaseInsensitiveMap cache settings</li> <li><a href="https://github.com/jdereg/java-util/commit/cb38f24d810528bf63c37755fe4e6ee9cea1de64"><code>cb38f24</code></a> Performance: Remove volatile from TypeUtilities.TYPE_RESOLVE_CACHE</li> <li>See full diff in <a href="https://github.com/jdereg/java-util/compare/v4.83.0...4.84.0">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
