zhaowenxishi (
https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=5ebe12e...
) *created* an issue
Hibernate Validator (
https://hibernate.atlassian.net/browse/HV?atlOrigin=eyJpIjoiOWFiZjE3N2M2Y...
) / Bug (
https://hibernate.atlassian.net/browse/HV-1779?atlOrigin=eyJpIjoiOWFiZjE3...
) HV-1779 (
https://hibernate.atlassian.net/browse/HV-1779?atlOrigin=eyJpIjoiOWFiZjE3...
) hibernate-validator unnecessarily calls the thread-unsafe
CachingJPATraversableResolverForSingleValidation in hibernate-core when validating (
https://hibernate.atlassian.net/browse/HV-1779?atlOrigin=eyJpIjoiOWFiZjE3...
)
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=5ebe12e...
)
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=eyJp...
) Add Comment (
https://hibernate.atlassian.net/browse/HV-1779#add-comment?atlOrigin=eyJp...
)
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....
) or iOS (
https://itunes.apple.com/app/apple-store/id1006972087?pt=696495&ct=Em...
) This message was sent by Atlassian Jira (v1001.0.0-SNAPSHOT#100126- sha1:82783e0 )