[jboss-jira] [JBoss JIRA] (WFLY-10730) Scan for entities in persistence root when using unmanaged JPA persistence unit

Scott Marlow (JIRA) issues at jboss.org
Tue Jul 24 14:40:00 EDT 2018


    [ https://issues.jboss.org/browse/WFLY-10730?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13610025#comment-13610025 ] 

Scott Marlow commented on WFLY-10730:
-------------------------------------

It looks like ORM in this test code, doesn't allow the managed persistence unit to include the scanner by class name:
I tried adding the managedUnit to include:
{code}
<property name="hibernate.archive.scanner" value="org.jboss.as.jpa.hibernate5.HibernateArchiveScanner"/>
{code} and we get exception:
{code}
.service.StartException in service jboss.persistenceunit."javaee-ear-1.0-SNAPSHOT.ear#managedUnit".__FIRST_PHASE__: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: org.jboss.as.jpa.hibernate5.HibernateArchiveScanner
        at org.jboss.as.jpa.service.PhaseOnePersistenceUnitServiceImpl$1$1.run(PhaseOnePersistenceUnitServiceImpl.java:128)
        at org.jboss.as.jpa.service.PhaseOnePersistenceUnitServiceImpl$1$1.run(PhaseOnePersistenceUnitServiceImpl.java:104)
        at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:650)
        at org.jboss.as.jpa.service.PhaseOnePersistenceUnitServiceImpl$1.run(PhaseOnePersistenceUnitServiceImpl.java:137)
        at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
        at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1349)
        at java.lang.Thread.run(Thread.java:748)
        at org.jboss.threads.JBossThread.run(JBossThread.java:485)
Caused by: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: org.jboss.as.jpa.hibernate5.HibernateArchiveScanner
        at org.hibernate.boot.internal.ClassLoaderAccessImpl.classForName(ClassLoaderAccessImpl.java:78)
        at org.hibernate.boot.model.process.internal.ScanningCoordinator.buildScanner(ScanningCoordinator.java:120)
        at org.hibernate.boot.model.process.internal.ScanningCoordinator.coordinateScan(ScanningCoordinator.java:75)
        at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.prepare(MetadataBuildingProcess.java:99)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:232)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:167)
        at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:32)
        at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:89)
        at org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.<init>(TwoPhaseBootstrapImpl.java:39)
        at org.jboss.as.jpa.hibernate5.HibernatePersistenceProviderAdaptor.getBootstrap(HibernatePersistenceProviderAdaptor.java:203)
        at org.jboss.as.jpa.service.PhaseOnePersistenceUnitServiceImpl.createContainerEntityManagerFactoryBuilder(PhaseOnePersistenceUnitServiceImpl.java:254)
        at org.jboss.as.jpa.service.PhaseOnePersistenceUnitServiceImpl.access$900(PhaseOnePersistenceUnitServiceImpl.java:59)
        at org.jboss.as.jpa.service.PhaseOnePersistenceUnitServiceImpl$1$1.run(PhaseOnePersistenceUnitServiceImpl.java:125)
        ... 9 more
{code}

I'm not sure why the unmanaged persistence unit is allowed to use the scanner class (by class name) but the (incorrectly named) "managed" persistence unit is not allowed to specify the scanner class (by class name).

The "managed" persistence unit is incorrectly named because it contains the following settings, which do not set jboss.as.jpa.managed to false, so a more correct name might be "managedANDunmanaged":
{code}
      <persistence-unit name="managedUnit">
                <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
                <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
                <properties>
                        <property name="hibernate.hbm2ddl.auto" value="create-drop" />
                        <property name="hibernate.show_sql" value="true"/>
                        <property name="hibernate.format_sql" value="true"/>

                </properties>
        </persistence-unit>
{code}

> Scan for entities in persistence root when using unmanaged JPA persistence unit
> -------------------------------------------------------------------------------
>
>                 Key: WFLY-10730
>                 URL: https://issues.jboss.org/browse/WFLY-10730
>             Project: WildFly
>          Issue Type: Enhancement
>          Components: JPA / Hibernate
>    Affects Versions: 13.0.0.Final
>            Reporter: Stephen Fikes
>            Assignee: Scott Marlow
>         Attachments: testcase.zip
>
>
> Per the [JPA specification|http://download.oracle.com/otn-pub/jcp/persistence-2_2-mrel-eval-spec/JavaPersistence.pdf#G4.1474790], entities in the root should not need to be explicitly specified (they should be automatically discovered). This works in a managed scenario (using injected entity manager) but doesn't work in an un-managed case (entity manager factory / entity manager created explicitly in application code) when using the same persistence unit.
> Also attempted to work around the limitation by declaring an explicit scanner ({{hibernate.archive.scanner=org.jboss.as.jpa.hibernate5.HibernateArchiveScanner}}) but this requires disabling managed JPA for the unit ({{jboss.as.jpa.managed=false}}) so a single unit cannot be used in both managed and un-managed scenarios.



--
This message was sent by Atlassian JIRA
(v7.5.0#75005)


More information about the jboss-jira mailing list