[jboss-jira] [JBoss JIRA] (WFLY-11956) @PostConstruct on @ApplicationScoped bean called too late in case @Valid is annotated on a business method
Guillaume Smet (Jira)
issues at jboss.org
Thu Apr 25 13:01:00 EDT 2019
[ https://issues.jboss.org/browse/WFLY-11956?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13726792#comment-13726792 ]
Guillaume Smet commented on WFLY-11956:
---------------------------------------
Well, as demonstrated in the attached log file, the two calls are from completely different paths. It is not a bug per se.
The first call comes from:
{code}
javax.persistence.Persistence$PersistenceUtilImpl.isLoaded(Persistence.java:154)
org.hibernate.validator.internal.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:52)
org.hibernate.validator.internal.engine.resolver.CachingJPATraversableResolverForSingleValidation.lambda$isReachable$0(CachingJPATraversableResolverForSingleValidation.java:43)
{code}
As you have a {{@Valid}} on the property, we have to check if the value is reachable from a JPA perspective. Unfortunately, we don't have a way to easily check if an object is a possible entity so right now, for each class, we ask Hibernate ORM if the value of the property is an initialized value or some sort of lazy proxy. I will try to ask Steve if he sees a better way to do that and if we could somehow determine if the object is an entity.
The second call is the validation itself, for which you obviously need the value.
As for adding an additional SPI, why not but I'm not a big fan of including it in a micro release so it will have to wait for 6.1.
> @PostConstruct on @ApplicationScoped bean called too late in case @Valid is annotated on a business method
> ----------------------------------------------------------------------------------------------------------
>
> Key: WFLY-11956
> URL: https://issues.jboss.org/browse/WFLY-11956
> Project: WildFly
> Issue Type: Bug
> Components: Bean Validation, REST
> Affects Versions: 16.0.0.Final
> Reporter: Joerg Baesner
> Assignee: Ronald Sigal
> Priority: Major
> Attachments: logging.txt, playground.zip
>
>
> Having a bean class with {{@ApplicationScoped}}, which has a {{@PostConstruct}} and is implementing the following _Interface_:
> {code}
> @Path("/validated")
> public interface ValidatedJaxRsInterface {
>
> @GET
> @Valid
> @Produces(MediaType.APPLICATION_JSON)
> GreetingModel getHelloGreeting();
> }
> {code}
> will result in calling the {{getHelloGreeting}} method of the implementation class twice *_before_* the {{@PostConstruct}} is getting executed.
> This can be reproduced with the attached reproducer application...
--
This message was sent by Atlassian Jira
(v7.12.1#712002)
More information about the jboss-jira
mailing list