]
Scott Marlow commented on WFLY-12535:
-------------------------------------
I added a println to the WildFly JPA container createContainerEntityManagerFactory() call
and confirmed your correct, output from a unit test run with EclipseLink:
{quote}
calling createContainerEntityManagerFactory for pu=toplink_module_test.ear#hibernate3_pc
with:
integration properties={
eclipselink.logging.logger=org.jipijapa.eclipselink.JBossLogger,
eclipselink.archive.factory=org.jipijapa.eclipselink.JBossArchiveFactoryImpl,
eclipselink.target-server=org.jipijapa.eclipselink.WildFlyServerPlatform
}
{quote}
Container does not pass the beanManager when creating eclipselink
EntityManagerFactory
--------------------------------------------------------------------------------------
Key: WFLY-12535
URL:
https://issues.jboss.org/browse/WFLY-12535
Project: WildFly
Issue Type: Bug
Components: JPA / Hibernate
Affects Versions: 16.0.0.Final
Reporter: charles ghislain
Assignee: Scott Marlow
Priority: Major
When creating the entity manager factory for eclipseliknk using
`javax.persistence.spi.PersistenceProvider#createContainerEntityManagerFactory`, wildfly
does not pass the properties required by the jee8 spec, as specified in the javadoc of
this method:
{code}
If a Bean Validation provider is present in the classpath, the container must pass the
ValidatorFactory instance in the map with the key
"javax.persistence.validation.factory". If the containing archive is a bean
archive, the container must pass the BeanManager instance in the map with the key
"javax.persistence.bean.manager"
{code}
Debugging the eclipselink implementation of this method,
`org.eclipse.persistence.jpa.PersistenceProvider#createContainerEntityManagerFactory`, the
properties set by the container contains the following 3 entries:
{code:java}
eclipselink.logging.logger -> org.jipijapa.eclipselink.JBossLogger
eclipselink.archive.factory -> org.jipijapa.eclipselink.JBossArchiveFactoryImpl
eclipselink.target-server -> org.jipijapa.eclipselink.WildFlyServerPlatform
{code}
I think this prevents CDI injection in custom ConstraintValidators, as mentionned on an
old eclipselink thread:
https://www.eclipse.org/lists/eclipselink-users/msg08503.html.
I have a `ConstraintValidator` with an `@Inject`ed EJB, but when validation is triggered
on the call to `javax.persistence.EntityManager#merge`, the injected field is null.
The wildfly installation has been updated to include eclipselink as per documentation:
the org.eclipse.persistence module has been updated to include the eclipselink jar with
the following descriptor:
{code:java}
<module xmlns="urn:jboss:module:1.1"
name="org.eclipse.persistence">
<resources>
<!-- jipijapa line is kept from the original module -->
<resource-root path="eclipselink.jar">
<filter>
<exclude path="javax/**" />
</filter>
</resource-root>
</resources>
<dependencies>
<module name="asm.asm"/>
<module name="javax.api"/>
<module name="javax.annotation.api"/>
<module name="javax.enterprise.api"/>
<module name="javax.persistence.api"/>
<module name="javax.transaction.api"/>
<module name="javax.validation.api"/>
<module name="javax.xml.bind.api"/>
<module name="javax.ws.rs.api"/>
<module name="org.antlr"/>
<module name="org.apache.commons.collections"/>
<module name="org.dom4j"/>
<module name="org.jboss.as.jpa.spi"/>
<module name="org.jboss.logging"/>
<module name="org.jboss.vfs"/>
</dependencies>
</module>
{code}
The persistence unit provider has been set to
`org.eclipse.persistence.jpa.PersistenceProvider` in the persistence.xml file.