[hibernate-issues] [JIRA] (HV-1779) hibernate-validator unnecessarily calls the thread-unsafe CachingJPATraversableResolverForSingleValidation in hibernate-core when validating

zhaowenxishi (JIRA) jira at hibernate.atlassian.net
Sun May 17 23:03:05 EDT 2020


zhaowenxishi ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=5ebe12e3e3c0900b93a29b65 ) *created* an issue

Hibernate Validator ( https://hibernate.atlassian.net/browse/HV?atlOrigin=eyJpIjoiOWFiZjE3N2M2YTZiNGVkNmIxODI3Nzc0NzdmMDRlNjQiLCJwIjoiaiJ9 ) / Bug ( https://hibernate.atlassian.net/browse/HV-1779?atlOrigin=eyJpIjoiOWFiZjE3N2M2YTZiNGVkNmIxODI3Nzc0NzdmMDRlNjQiLCJwIjoiaiJ9 ) HV-1779 ( https://hibernate.atlassian.net/browse/HV-1779?atlOrigin=eyJpIjoiOWFiZjE3N2M2YTZiNGVkNmIxODI3Nzc0NzdmMDRlNjQiLCJwIjoiaiJ9 ) hibernate-validator unnecessarily calls the thread-unsafe CachingJPATraversableResolverForSingleValidation in hibernate-core when validating ( https://hibernate.atlassian.net/browse/HV-1779?atlOrigin=eyJpIjoiOWFiZjE3N2M2YTZiNGVkNmIxODI3Nzc0NzdmMDRlNjQiLCJwIjoiaiJ9 )

Issue Type: Bug Affects Versions: 6.0.17.Final Assignee: Unassigned Created: 17/May/2020 20:03 PM Environment: jdk8,linux
tomcat 7.x Priority: Major Reporter: zhaowenxishi ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=5ebe12e3e3c0900b93a29b65 )

We use hibernate-validator to validate REST request body param。And it has nothind deal with hibernate-core. But recently we add new component "hibernate-core" into our project to do something about data persistence. Then we accidently found that our service threads were permanently fall into a "while" loop.
The stack is here:
--------------- stack begin -------------------------------------------------------------------------------
"auth-catalina-exec-3" #98 daemon prio=5 os_prio=0 tid=0x000055cf9c4de7c0 nid=0x25067 runnable [0x00007f77d6bfb000]
java.lang.Thread.State: RUNNABLE
at java.util.WeakHashMap.get(WeakHashMap.java:403)
at org.hibernate.jpa.internal.util.PersistenceUtilHelper$MetadataCache.getClassMetadata(PersistenceUtilHelper.java:422)
at org.hibernate.jpa.internal.util.PersistenceUtilHelper.isLoadedWithReference(PersistenceUtilHelper.java:214)
at org.hibernate.jpa.HibernatePersistenceProvider$1.isLoadedWithReference(HibernatePersistenceProvider.java:186)
at javax.persistence.Persistence$PersistenceUtilImpl.isLoaded(Persistence.java:155)
at org.hibernate.validator.internal.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:52)
at org.hibernate.validator.internal.engine.resolver.CachingJPATraversableResolverForSingleValidation.lambda$isReachable$0(CachingJPATraversableResolverForSingleValidation.java:43)
at org.hibernate.validator.internal.engine.resolver.CachingJPATraversableResolverForSingleValidation$$Lambda$844/2026713638.apply(Unknown Source)
at java.util.HashMap.computeIfAbsent(HashMap.java:1127)
at org.hibernate.validator.internal.engine.resolver.CachingJPATraversableResolverForSingleValidation.isReachable(CachingJPATraversableResolverForSingleValidation.java:43)
at org.hibernate.validator.internal.engine.ValidatorImpl.isReachable(ValidatorImpl.java:1323)
at org.hibernate.validator.internal.engine.ValidatorImpl.isCascadeRequired(ValidatorImpl.java:1352)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateCascadedConstraints(ValidatorImpl.java:578)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:406)
at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:173)
--------------- stack begin --------------------------------------------------------------------------------

We check the code and find the class "CachingJPATraversableResolverForSingleValidation" has a java doc notification: "It works only for a single validate* call and should not be used if

{@code TraversableResolver}

is accessed concurrently." We do have to call "ValidatorImpl.validate" concurrently, but we just use hibernate-validator to validating only, and didn't mean to use CachingJPATraversableResolverForSingleValidation.

My question is: Are there any way to use hibernate-validator only and don't let it to call anything about hibernate-core when validating params?

( https://hibernate.atlassian.net/browse/HV-1779#add-comment?atlOrigin=eyJpIjoiOWFiZjE3N2M2YTZiNGVkNmIxODI3Nzc0NzdmMDRlNjQiLCJwIjoiaiJ9 ) Add Comment ( https://hibernate.atlassian.net/browse/HV-1779#add-comment?atlOrigin=eyJpIjoiOWFiZjE3N2M2YTZiNGVkNmIxODI3Nzc0NzdmMDRlNjQiLCJwIjoiaiJ9 )

Get Jira notifications on your phone! Download the Jira Cloud app for Android ( https://play.google.com/store/apps/details?id=com.atlassian.android.jira.core&referrer=utm_source%3DNotificationLink%26utm_medium%3DEmail ) or iOS ( https://itunes.apple.com/app/apple-store/id1006972087?pt=696495&ct=EmailNotificationLink&mt=8 ) This message was sent by Atlassian Jira (v1001.0.0-SNAPSHOT#100126- sha1:82783e0 )
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/hibernate-issues/attachments/20200518/9f8e4ae8/attachment.html 


More information about the hibernate-issues mailing list