Aries JPA: The persistence unit has incomplete configuration and cannot be created.

classic Classic list List threaded Threaded
19 messages Options
Reply | Threaded
Open this post in threaded view
|

Aries JPA: The persistence unit has incomplete configuration and cannot be created.

Alex Soto
Hello,  

I am using Aries JPA 2.7.0, I am trying provide the JPA persistence configuration using configuration file.  So my persistence.xml.

<persistence version="2.0"

<persistence-unit name="responderPersistenUnit" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
</persistence-unit>
</persistence>

I deploy config file as part of my feature:

<config name="org.apache.aries.jpa.responderPersistenUnit">
    hibernate.dialect=org.hibernate.dialect.MariaDBDialect
    hibernate.show_sql=false
    hibernate.format_sql=true
    hibernate.hbm2ddl.auto=none
    jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)
    non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)    
</config>

When I run, the following exception is thrown:

java.lang.IllegalArgumentException: The persistence unit responderPersistenUnit has incomplete configuration and cannot be created. The configuration is{non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder), hibernate.format_sql=true, hibernate.hbm2ddl.auto=none, hibernate.dialect=org.hibernate.dialect.MariaDBDialect, jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder), felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/dist/target/encryptedquery-responder-dist-1.0.0-SNAPSHOT/etc/org.apache.aries.jpa.responderPersistenUnit.cfg, hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA, service.pid=org.apache.aries.jpa.responderPersistenUnit}
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365) ~[?:?]
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183) ~[?:?]
at org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75) ~[?:?]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189) ~[8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
at java.lang.Thread.run(Thread.java:748) [?:?]



So Aries JPA is finding the configuration properties I am providing, but still missing something.  What else is needed as configuration properties? Why is it not complete the persistent unit?


Best regards,
Alex soto




Reply | Threaded
Open this post in threaded view
|

Re: Aries JPA: The persistence unit has incomplete configuration and cannot be created.

Alex Soto
If I change my persistence.xml to this:


<persistence-unit name="responderPersistenUnit" transaction-type="JTA">
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)</jta-data-source>
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)</jta-data-source>    
</persistence-unit>

And the configuration entries to:

<config name="org.apache.aries.jpa.responderPersistenUnit">
     javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
     javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver
     hibernate.dialect=org.hibernate.dialect.MariaDBDialect
     hibernate.show_sql=false
     hibernate.format_sql=true
     hibernate.hbm2ddl.auto=none
</config>

Then the error Is:


java.lang.IllegalArgumentException: Cannot rebind to a different database driver, as per the JPA service specification
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.processProperties(AriesEntityManagerFactoryBuilder.java:225) ~[?:?]
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:173) ~[?:?]
at org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75) ~[?:?]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189) ~[8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
at java.lang.Thread.run(Thread.java:748) [?:?]


If I remove the line javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver from the config file above, then I get the previous error about configuration not being completed.  What I am trying to do is to not  hard code  the hibernate.dialect inside the bundle, so I can switch to a different database without having to rebuild.

Also, my DataSource is already created by PAX JDBC Config and this I don’t want to change, since I am using PreHook facility there to run LiquiBase migrations.
Any hints or examples appreciated.


Best regards,
Alex soto




On May 24, 2018, at 1:41 PM, Alex Soto <[hidden email]> wrote:

Hello,  

I am using Aries JPA 2.7.0, I am trying provide the JPA persistence configuration using configuration file.  So my persistence.xml.

<persistence version="2.0"

<persistence-unit name="responderPersistenUnit" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
</persistence-unit>
</persistence>

I deploy config file as part of my feature:

<config name="org.apache.aries.jpa.responderPersistenUnit">
    hibernate.dialect=org.hibernate.dialect.MariaDBDialect
    hibernate.show_sql=false
    hibernate.format_sql=true
    hibernate.hbm2ddl.auto=none
    jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)
    non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)    
</config>

When I run, the following exception is thrown:

java.lang.IllegalArgumentException: The persistence unit responderPersistenUnit has incomplete configuration and cannot be created. The configuration is{non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder), hibernate.format_sql=true, hibernate.hbm2ddl.auto=none, hibernate.dialect=org.hibernate.dialect.MariaDBDialect, jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder), felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/dist/target/encryptedquery-responder-dist-1.0.0-SNAPSHOT/etc/org.apache.aries.jpa.responderPersistenUnit.cfg, hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA, service.pid=org.apache.aries.jpa.responderPersistenUnit}
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365) ~[?:?]
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183) ~[?:?]
at org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75) ~[?:?]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189) ~[8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
at java.lang.Thread.run(Thread.java:748) [?:?]



So Aries JPA is finding the configuration properties I am providing, but still missing something.  What else is needed as configuration properties? Why is it not complete the persistent unit?


Best regards,
Alex soto





Reply | Threaded
Open this post in threaded view
|

Re: Aries JPA: The persistence unit has incomplete configuration and cannot be created.

fpapon

Hi Alex,

Where is configured your JDBC url ? Can you share it ?

François


Le 24/05/2018 à 23:26, Alex Soto a écrit :
If I change my persistence.xml to this:


<persistence-unit name="responderPersistenUnit" transaction-type="JTA">
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)</jta-data-source>
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)</jta-data-source>    
</persistence-unit>

And the configuration entries to:

<config name="org.apache.aries.jpa.responderPersistenUnit">
     javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
     javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver
     hibernate.dialect=org.hibernate.dialect.MariaDBDialect
     hibernate.show_sql=false
     hibernate.format_sql=true
     hibernate.hbm2ddl.auto=none
</config>

Then the error Is:


java.lang.IllegalArgumentException: Cannot rebind to a different database driver, as per the JPA service specification
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.processProperties(AriesEntityManagerFactoryBuilder.java:225) ~[?:?]
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:173) ~[?:?]
at org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75) ~[?:?]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189) ~[8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
at java.lang.Thread.run(Thread.java:748) [?:?]


If I remove the line javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver from the config file above, then I get the previous error about configuration not being completed.  What I am trying to do is to not  hard code  the hibernate.dialect inside the bundle, so I can switch to a different database without having to rebuild.

Also, my DataSource is already created by PAX JDBC Config and this I don’t want to change, since I am using PreHook facility there to run LiquiBase migrations.
Any hints or examples appreciated.


Best regards,
Alex soto




On May 24, 2018, at 1:41 PM, Alex Soto <[hidden email]> wrote:

Hello,  

I am using Aries JPA 2.7.0, I am trying provide the JPA persistence configuration using configuration file.  So my persistence.xml.

<persistence version="2.0"

<persistence-unit name="responderPersistenUnit" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
</persistence-unit>
</persistence>

I deploy config file as part of my feature:

<config name="org.apache.aries.jpa.responderPersistenUnit">
    hibernate.dialect=org.hibernate.dialect.MariaDBDialect
    hibernate.show_sql=false
    hibernate.format_sql=true
    hibernate.hbm2ddl.auto=none
    jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)
    non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)    
</config>

When I run, the following exception is thrown:

java.lang.IllegalArgumentException: The persistence unit responderPersistenUnit has incomplete configuration and cannot be created. The configuration is{non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder), hibernate.format_sql=true, hibernate.hbm2ddl.auto=none, hibernate.dialect=org.hibernate.dialect.MariaDBDialect, jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder), felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/dist/target/encryptedquery-responder-dist-1.0.0-SNAPSHOT/etc/org.apache.aries.jpa.responderPersistenUnit.cfg, hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA, service.pid=org.apache.aries.jpa.responderPersistenUnit}
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365) ~[?:?]
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183) ~[?:?]
at org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75) ~[?:?]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189) ~[8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
at java.lang.Thread.run(Thread.java:748) [?:?]



So Aries JPA is finding the configuration properties I am providing, but still missing something.  What else is needed as configuration properties? Why is it not complete the persistent unit?


Best regards,
Alex soto






Francois Papon
Openrun : https://www.openrun.re
Reply | Threaded
Open this post in threaded view
|

Re: Aries JPA: The persistence unit has incomplete configuration and cannot be created.

Alex Soto
File:  org.ops4j.datasource-responder.cfg


osgi.jdbc.driver.name = mariadb
dataSourceName=responder
url = jdbc:<a href="mariadb://localhost:3306/responder?characterEncoding=UTF-8&amp;useServerPrepStmts=true" class="">mariadb://localhost:3306/responder?characterEncoding=UTF-8&useServerPrepStmts=true

user=XXXXX
password=XXXXX
databaseName=responder

ops4j.preHook=responderDB


This is picked up by PAX-JDBC and registered as a service:  osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)
I want the persistence unit  to use this DataSource.

Best regards,
Alex soto




On May 24, 2018, at 3:31 PM, Francois Papon <[hidden email]> wrote:

Hi Alex,

Where is configured your JDBC url ? Can you share it ?

François


Le 24/05/2018 à 23:26, Alex Soto a écrit :
If I change my persistence.xml to this:


<persistence-unit name="responderPersistenUnit" transaction-type="JTA">
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)</jta-data-source>
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)</jta-data-source>    
</persistence-unit>

And the configuration entries to:

<config name="org.apache.aries.jpa.responderPersistenUnit">
     javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
     javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver
     hibernate.dialect=org.hibernate.dialect.MariaDBDialect
     hibernate.show_sql=false
     hibernate.format_sql=true
     hibernate.hbm2ddl.auto=none
</config>

Then the error Is:


java.lang.IllegalArgumentException: Cannot rebind to a different database driver, as per the JPA service specification
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.processProperties(AriesEntityManagerFactoryBuilder.java:225) ~[?:?]
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:173) ~[?:?]
at org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75) ~[?:?]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189) ~[8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
at java.lang.Thread.run(Thread.java:748) [?:?]


If I remove the line javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver from the config file above, then I get the previous error about configuration not being completed.  What I am trying to do is to not  hard code  the hibernate.dialect inside the bundle, so I can switch to a different database without having to rebuild.

Also, my DataSource is already created by PAX JDBC Config and this I don’t want to change, since I am using PreHook facility there to run LiquiBase migrations.
Any hints or examples appreciated.


Best regards,
Alex soto




On May 24, 2018, at 1:41 PM, Alex Soto <[hidden email]> wrote:

Hello,  

I am using Aries JPA 2.7.0, I am trying provide the JPA persistence configuration using configuration file.  So my persistence.xml.

<persistence version="2.0"

<persistence-unit name="responderPersistenUnit" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
</persistence-unit>
</persistence>

I deploy config file as part of my feature:

<config name="org.apache.aries.jpa.responderPersistenUnit">
    hibernate.dialect=org.hibernate.dialect.MariaDBDialect
    hibernate.show_sql=false
    hibernate.format_sql=true
    hibernate.hbm2ddl.auto=none
    jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)
    non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)    
</config>

When I run, the following exception is thrown:

java.lang.IllegalArgumentException: The persistence unit responderPersistenUnit has incomplete configuration and cannot be created. The configuration is{non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder), hibernate.format_sql=true, hibernate.hbm2ddl.auto=none, hibernate.dialect=org.hibernate.dialect.MariaDBDialect, jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder), felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/dist/target/encryptedquery-responder-dist-1.0.0-SNAPSHOT/etc/org.apache.aries.jpa.responderPersistenUnit.cfg, hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA, service.pid=org.apache.aries.jpa.responderPersistenUnit}
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365) ~[?:?]
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183) ~[?:?]
at org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75) ~[?:?]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189) ~[8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
at java.lang.Thread.run(Thread.java:748) [?:?]



So Aries JPA is finding the configuration properties I am providing, but still missing something.  What else is needed as configuration properties? Why is it not complete the persistent unit?


Best regards,
Alex soto







Reply | Threaded
Open this post in threaded view
|

Re: Aries JPA: The persistence unit has incomplete configuration and cannot be created.

fpapon

Hi,

I have a project using JPA and EclipseLink that is working :

org.ops4j.datasource-myapp.cfg :

osgi.jdbc.driver.class=org.postgresql.Driver
dataSourceName=myapp
databaseName=db_myapp
serverName=127.0.0.1
portNumber=5432
user=xxxx
password=xxxx

persistence.xml :

    <persistence-unit name="my-persistence-unit" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=myapp)</jta-data-source>

...

This is the only parameters I'm using.

François



Le 24/05/2018 à 23:41, Alex Soto a écrit :
File:  org.ops4j.datasource-responder.cfg


osgi.jdbc.driver.name = mariadb
dataSourceName=responder
url = jdbc:<a href="mariadb://localhost:3306/responder?characterEncoding=UTF-8&amp;useServerPrepStmts=true" class="" moz-do-not-send="true">mariadb://localhost:3306/responder?characterEncoding=UTF-8&useServerPrepStmts=true

user=XXXXX
password=XXXXX
databaseName=responder

ops4j.preHook=responderDB


This is picked up by PAX-JDBC and registered as a service:  osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)
I want the persistence unit  to use this DataSource.

Best regards,
Alex soto




On May 24, 2018, at 3:31 PM, Francois Papon <[hidden email]> wrote:

Hi Alex,

Where is configured your JDBC url ? Can you share it ?

François


Le 24/05/2018 à 23:26, Alex Soto a écrit :
If I change my persistence.xml to this:


<persistence-unit name="responderPersistenUnit" transaction-type="JTA">
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)</jta-data-source>
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)</jta-data-source>    
</persistence-unit>

And the configuration entries to:

<config name="org.apache.aries.jpa.responderPersistenUnit">
     javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
     javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver
     hibernate.dialect=org.hibernate.dialect.MariaDBDialect
     hibernate.show_sql=false
     hibernate.format_sql=true
     hibernate.hbm2ddl.auto=none
</config>

Then the error Is:


java.lang.IllegalArgumentException: Cannot rebind to a different database driver, as per the JPA service specification
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.processProperties(AriesEntityManagerFactoryBuilder.java:225) ~[?:?]
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:173) ~[?:?]
at org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75) ~[?:?]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189) ~[8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
at java.lang.Thread.run(Thread.java:748) [?:?]


If I remove the line javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver from the config file above, then I get the previous error about configuration not being completed.  What I am trying to do is to not  hard code  the hibernate.dialect inside the bundle, so I can switch to a different database without having to rebuild.

Also, my DataSource is already created by PAX JDBC Config and this I don’t want to change, since I am using PreHook facility there to run LiquiBase migrations.
Any hints or examples appreciated.


Best regards,
Alex soto




On May 24, 2018, at 1:41 PM, Alex Soto <[hidden email]> wrote:

Hello,  

I am using Aries JPA 2.7.0, I am trying provide the JPA persistence configuration using configuration file.  So my persistence.xml.

<persistence version="2.0"

<persistence-unit name="responderPersistenUnit" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
</persistence-unit>
</persistence>

I deploy config file as part of my feature:

<config name="org.apache.aries.jpa.responderPersistenUnit">
    hibernate.dialect=org.hibernate.dialect.MariaDBDialect
    hibernate.show_sql=false
    hibernate.format_sql=true
    hibernate.hbm2ddl.auto=none
    jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)
    non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)    
</config>

When I run, the following exception is thrown:

java.lang.IllegalArgumentException: The persistence unit responderPersistenUnit has incomplete configuration and cannot be created. The configuration is{non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder), hibernate.format_sql=true, hibernate.hbm2ddl.auto=none, hibernate.dialect=org.hibernate.dialect.MariaDBDialect, jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder), felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/dist/target/encryptedquery-responder-dist-1.0.0-SNAPSHOT/etc/org.apache.aries.jpa.responderPersistenUnit.cfg, hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA, service.pid=org.apache.aries.jpa.responderPersistenUnit}
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365) ~[?:?]
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183) ~[?:?]
at org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75) ~[?:?]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189) ~[8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
at java.lang.Thread.run(Thread.java:748) [?:?]



So Aries JPA is finding the configuration properties I am providing, but still missing something.  What else is needed as configuration properties? Why is it not complete the persistent unit?


Best regards,
Alex soto








Francois Papon
Openrun : https://www.openrun.re
Reply | Threaded
Open this post in threaded view
|

Re: Aries JPA: The persistence unit has incomplete configuration and cannot be created.

Alex Soto
Thank you François.

The issue is that with Hibernate, you need to configure a Dialect, which is different for each database.
I want to keep this outside the bundle, so I can configure different databases.
Looks like Aries JPA can do this, but I can’t figure out how it works.

Best regards,
Alex soto




On May 24, 2018, at 3:56 PM, Francois Papon <[hidden email]> wrote:

Hi,

I have a project using JPA and EclipseLink that is working :

org.ops4j.datasource-myapp.cfg :

osgi.jdbc.driver.class=org.postgresql.Driver
dataSourceName=myapp
databaseName=db_myapp
serverName=127.0.0.1
portNumber=5432
user=xxxx
password=xxxx

persistence.xml :

    <persistence-unit name="my-persistence-unit" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=myapp)</jta-data-source>

...

This is the only parameters I'm using.

François



Le 24/05/2018 à 23:41, Alex Soto a écrit :
File:  org.ops4j.datasource-responder.cfg


osgi.jdbc.driver.name = mariadb
dataSourceName=responder
url = jdbc:<a href="mariadb://localhost:3306/responder?characterEncoding=UTF-8&amp;useServerPrepStmts=true" class="" moz-do-not-send="true">mariadb://localhost:3306/responder?characterEncoding=UTF-8&useServerPrepStmts=true

user=XXXXX
password=XXXXX
databaseName=responder

ops4j.preHook=responderDB


This is picked up by PAX-JDBC and registered as a service:  osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)
I want the persistence unit  to use this DataSource.

Best regards,
Alex soto




On May 24, 2018, at 3:31 PM, Francois Papon <[hidden email]> wrote:

Hi Alex,

Where is configured your JDBC url ? Can you share it ?

François


Le 24/05/2018 à 23:26, Alex Soto a écrit :
If I change my persistence.xml to this:


<persistence-unit name="responderPersistenUnit" transaction-type="JTA">
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)</jta-data-source>
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)</jta-data-source>    
</persistence-unit>

And the configuration entries to:

<config name="org.apache.aries.jpa.responderPersistenUnit">
     javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
     javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver
     hibernate.dialect=org.hibernate.dialect.MariaDBDialect
     hibernate.show_sql=false
     hibernate.format_sql=true
     hibernate.hbm2ddl.auto=none
</config>

Then the error Is:


java.lang.IllegalArgumentException: Cannot rebind to a different database driver, as per the JPA service specification
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.processProperties(AriesEntityManagerFactoryBuilder.java:225) ~[?:?]
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:173) ~[?:?]
at org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75) ~[?:?]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189) ~[8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
at java.lang.Thread.run(Thread.java:748) [?:?]


If I remove the line javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver from the config file above, then I get the previous error about configuration not being completed.  What I am trying to do is to not  hard code  the hibernate.dialect inside the bundle, so I can switch to a different database without having to rebuild.

Also, my DataSource is already created by PAX JDBC Config and this I don’t want to change, since I am using PreHook facility there to run LiquiBase migrations.
Any hints or examples appreciated.


Best regards,
Alex soto




On May 24, 2018, at 1:41 PM, Alex Soto <[hidden email]> wrote:

Hello,  

I am using Aries JPA 2.7.0, I am trying provide the JPA persistence configuration using configuration file.  So my persistence.xml.

<persistence version="2.0"

<persistence-unit name="responderPersistenUnit" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
</persistence-unit>
</persistence>

I deploy config file as part of my feature:

<config name="org.apache.aries.jpa.responderPersistenUnit">
    hibernate.dialect=org.hibernate.dialect.MariaDBDialect
    hibernate.show_sql=false
    hibernate.format_sql=true
    hibernate.hbm2ddl.auto=none
    jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)
    non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)    
</config>

When I run, the following exception is thrown:

java.lang.IllegalArgumentException: The persistence unit responderPersistenUnit has incomplete configuration and cannot be created. The configuration is{non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder), hibernate.format_sql=true, hibernate.hbm2ddl.auto=none, hibernate.dialect=org.hibernate.dialect.MariaDBDialect, jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder), felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/dist/target/encryptedquery-responder-dist-1.0.0-SNAPSHOT/etc/org.apache.aries.jpa.responderPersistenUnit.cfg, hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA, service.pid=org.apache.aries.jpa.responderPersistenUnit}
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365) ~[?:?]
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183) ~[?:?]
at org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75) ~[?:?]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189) ~[8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
at java.lang.Thread.run(Thread.java:748) [?:?]



So Aries JPA is finding the configuration properties I am providing, but still missing something.  What else is needed as configuration properties? Why is it not complete the persistent unit?


Best regards,
Alex soto









Reply | Threaded
Open this post in threaded view
|

Re: Aries JPA: The persistence unit has incomplete configuration and cannot be created.

jbonofre
In reply to this post by Alex Soto
Hi Alex,

the dialect HAS to be in the persistence.xml (it's in the JPA spec).

AFAIK, Aries JPA doesn't provide a mechanism to provide the dialect
externally from the persistence.xml.

Even the Aries JPA itests define the dialect there:

https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40

Further more, dialect also depends of the engine you are using
(hibernate, openjpa, eclipselink).

Regards
JB

On 24/05/2018 21:26, Alex Soto wrote:

> If I change my persistence.xml to this:
>
>
> <persistence-unit name="responderPersistenUnit" transaction-type="JTA">
> <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)</jta-data-source>
> <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)</jta-data-source>  
>  
> </persistence-unit>
>
> And the configuration entries to:
>
> <config name="org.apache.aries.jpa.responderPersistenUnit">
>  
>   javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
>     *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver*
>     hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>     hibernate.show_sql=false
>     hibernate.format_sql=true
>     hibernate.hbm2ddl.auto=none
> </config>
>
> Then the error Is:
>
>
> java.lang.IllegalArgumentException: Cannot rebind to a different
> database driver, as per the JPA service specification
> at
> org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.processProperties(AriesEntityManagerFactoryBuilder.java:225)
> ~[?:?]
> at
> org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:173) ~[?:?]
> at
> org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
> ~[?:?]
> at
> org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
> ~[8:org.apache.felix.configadmin:1.8.16]
> at
> org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
> at
> org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
> at
> org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
> at
> org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
> at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141)
> [8:org.apache.felix.configadmin:1.8.16]
> at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109)
> [8:org.apache.felix.configadmin:1.8.16]
> at java.lang.Thread.run(Thread.java:748) [?:?]
>
>
> If I remove the
> line *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver *from the
> config file above, then I get the previous error about configuration not
> being completed.  What I am trying to do is to not  hard code
>  the /hibernate.dialect /inside the bundle, so I can switch to a
> different database without having to rebuild.
>
> Also, my DataSource is already created by PAX JDBC Config and this I
> don’t want to change, since I am using PreHook facility there to run
> LiquiBase migrations.
> Any hints or examples appreciated.
>
>
> Best regards,
> Alex soto
>
>
>
>
>> On May 24, 2018, at 1:41 PM, Alex Soto <[hidden email]
>> <mailto:[hidden email]>> wrote:
>>
>> Hello,  
>>
>> I am using Aries JPA 2.7.0, I am trying provide the JPA persistence
>> configuration using configuration file.  So my persistence.xml.
>>
>>     <persistence version="2.0"
>>     xmlns="http://java.sun.com/xml/ns/persistence"
>>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
>>     http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
>>
>>     <persistence-unit name="responderPersistenUnit"
>>     transaction-type="JTA">
>>     <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
>>     </persistence-unit>
>>     </persistence>
>>
>>
>> I deploy config file as part of my feature:
>>
>>     <config name="org.apache.aries.jpa.responderPersistenUnit">
>>         hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>>         hibernate.show_sql=false
>>         hibernate.format_sql=true
>>         hibernate.hbm2ddl.auto=none
>>      
>>       jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)
>>        
>>     non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)  
>>      
>>     </config>
>>
>> When I run, the following exception is thrown:
>>
>>
>>     java.lang.IllegalArgumentException: The persistence unit
>>     responderPersistenUnit has incomplete configuration and cannot be
>>     created. The configuration
>>     is{non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder),
>>     hibernate.format_sql=true, hibernate.hbm2ddl.auto=none,
>>     hibernate.dialect=org.hibernate.dialect.MariaDBDialect,
>>     jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder), felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/dist/target/encryptedquery-responder-dist-1.0.0-SNAPSHOT/etc/org.apache.aries.jpa.responderPersistenUnit.cfg,
>>     hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA, service.pid=org.apache.aries.jpa.responderPersistenUnit}
>>     at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365)
>>     ~[?:?]
>>     at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183)
>>     ~[?:?]
>>     at
>>     org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
>>     ~[?:?]
>>     at
>>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>>     ~[8:org.apache.felix.configadmin:1.8.16]
>>     at
>>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
>>     at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
>>     at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
>>     at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
>>     at
>>     org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
>>     at
>>     org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
>>     at java.lang.Thread.run(Thread.java:748) [?:?]
>>
>>
>>
>> So Aries JPA is finding the configuration properties I am providing,
>> but still missing something.  What else is needed as configuration
>> properties? Why is it not complete the persistent unit?
>>
>>
>> Best regards,
>> Alex soto
>>
>>
>>
>>
>

--
--
Jean-Baptiste Onofré
[hidden email]
http://blog.nanthrax.net
Talend - http://www.talend.com
Reply | Threaded
Open this post in threaded view
|

Re: Aries JPA: The persistence unit has incomplete configuration and cannot be created.

pkmcculloch
Hibernate usually does a reasonable job of auto detecting the dialect, in my experience. If you need to override this then Aries JPA supports creating a configuration file /etc/org.apache.aries.jpa.<PU name>.cfg where you can override hibernate.dialect. Beware if you have a "-" in the PU name as I think fileinstall we try and create a factory config.

I can't recall where I got this info from. It might have been here: http://karaf.922171.n3.nabble.com/Dynamic-parameters-in-persistence-xml-td4043602.html

On 25 May 2018 at 06:46, Jean-Baptiste Onofré <[hidden email]> wrote:
Hi Alex,

the dialect HAS to be in the persistence.xml (it's in the JPA spec).

AFAIK, Aries JPA doesn't provide a mechanism to provide the dialect
externally from the persistence.xml.

Even the Aries JPA itests define the dialect there:

https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40

Further more, dialect also depends of the engine you are using
(hibernate, openjpa, eclipselink).

Regards
JB

On 24/05/2018 21:26, Alex Soto wrote:
> If I change my persistence.xml to this:
>
>
> <persistence-unit name="responderPersistenUnit" transaction-type="JTA">
> <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)</jta-data-source>
> <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)</jta-data-source>  
>  
> </persistence-unit>
>
> And the configuration entries to:
>
> <config name="org.apache.aries.jpa.responderPersistenUnit">
>  
>   javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
>     *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver*
>     hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>     hibernate.show_sql=false
>     hibernate.format_sql=true
>     hibernate.hbm2ddl.auto=none
> </config>
>
> Then the error Is:
>
>
> java.lang.IllegalArgumentException: Cannot rebind to a different
> database driver, as per the JPA service specification
> at
> org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.processProperties(AriesEntityManagerFactoryBuilder.java:225)
> ~[?:?]
> at
> org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:173) ~[?:?]
> at
> org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
> ~[?:?]
> at
> org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
> ~[8:org.apache.felix.configadmin:1.8.16]
> at
> org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
> at
> org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
> at
> org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
> at
> org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
> at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141)
> [8:org.apache.felix.configadmin:1.8.16]
> at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109)
> [8:org.apache.felix.configadmin:1.8.16]
> at java.lang.Thread.run(Thread.java:748) [?:?]
>
>
> If I remove the
> line *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver *from the
> config file above, then I get the previous error about configuration not
> being completed.  What I am trying to do is to not  hard code
>  the /hibernate.dialect /inside the bundle, so I can switch to a
> different database without having to rebuild.
>
> Also, my DataSource is already created by PAX JDBC Config and this I
> don’t want to change, since I am using PreHook facility there to run
> LiquiBase migrations.
> Any hints or examples appreciated.
>
>
> Best regards,
> Alex soto
>
>
>
>
>> On May 24, 2018, at 1:41 PM, Alex Soto <[hidden email]
>> <mailto:[hidden email]>> wrote:
>>
>> Hello,  
>>
>> I am using Aries JPA 2.7.0, I am trying provide the JPA persistence
>> configuration using configuration file.  So my persistence.xml.
>>
>>     <persistence version="2.0"
>>     xmlns="http://java.sun.com/xml/ns/persistence"
>>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
>>     http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
>>
>>     <persistence-unit name="responderPersistenUnit"
>>     transaction-type="JTA">
>>     <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
>>     </persistence-unit>
>>     </persistence>
>>
>>
>> I deploy config file as part of my feature:
>>
>>     <config name="org.apache.aries.jpa.responderPersistenUnit">
>>         hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>>         hibernate.show_sql=false
>>         hibernate.format_sql=true
>>         hibernate.hbm2ddl.auto=none
>>      
>>       jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)
>>        
>>     non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)  
>>      
>>     </config>
>>
>> When I run, the following exception is thrown:
>>
>>
>>     java.lang.IllegalArgumentException: The persistence unit
>>     responderPersistenUnit has incomplete configuration and cannot be
>>     created. The configuration
>>     is{non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder),
>>     hibernate.format_sql=true, hibernate.hbm2ddl.auto=none,
>>     hibernate.dialect=org.hibernate.dialect.MariaDBDialect,
>>     jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder), felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/dist/target/encryptedquery-responder-dist-1.0.0-SNAPSHOT/etc/org.apache.aries.jpa.responderPersistenUnit.cfg,
>>     hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA, service.pid=org.apache.aries.jpa.responderPersistenUnit}
>>     at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365)
>>     ~[?:?]
>>     at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183)
>>     ~[?:?]
>>     at
>>     org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
>>     ~[?:?]
>>     at
>>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>>     ~[8:org.apache.felix.configadmin:1.8.16]
>>     at
>>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
>>     at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
>>     at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
>>     at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
>>     at
>>     org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
>>     at
>>     org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
>>     at java.lang.Thread.run(Thread.java:748) [?:?]
>>
>>
>>
>> So Aries JPA is finding the configuration properties I am providing,
>> but still missing something.  What else is needed as configuration
>> properties? Why is it not complete the persistent unit?
>>
>>
>> Best regards,
>> Alex soto
>>
>>
>>
>>
>

--
--
Jean-Baptiste Onofré
[hidden email]
http://blog.nanthrax.net
Talend - http://www.talend.com

Reply | Threaded
Open this post in threaded view
|

Re: Aries JPA: The persistence unit has incomplete configuration and cannot be created.

jbonofre
Hi Paul,

yes, I remember this discussion, but AFAIR, it's always overriden by the
dialect in the persistence.xml.

Regards
JB

On 25/05/2018 13:00, Paul McCulloch wrote:

> Hibernate usually does a reasonable job of auto detecting the dialect,
> in my experience. If you need to override this then Aries JPA supports
> creating a configuration file /etc/org.apache.aries.jpa.<PU name>.cfg
> where you can override hibernate.dialect. Beware if you have a "-" in
> the PU name as I think fileinstall we try and create a factory config.
>
> I can't recall where I got this info from. It might have been
> here: http://karaf.922171.n3.nabble.com/Dynamic-parameters-in-persistence-xml-td4043602.html
>
> On 25 May 2018 at 06:46, Jean-Baptiste Onofré <[hidden email]
> <mailto:[hidden email]>> wrote:
>
>     Hi Alex,
>
>     the dialect HAS to be in the persistence.xml (it's in the JPA spec).
>
>     AFAIK, Aries JPA doesn't provide a mechanism to provide the dialect
>     externally from the persistence.xml.
>
>     Even the Aries JPA itests define the dialect there:
>
>     https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40
>     <https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40>
>
>     Further more, dialect also depends of the engine you are using
>     (hibernate, openjpa, eclipselink).
>
>     Regards
>     JB
>
>     On 24/05/2018 21:26, Alex Soto wrote:
>     > If I change my persistence.xml to this:
>     >
>     >
>     > <persistence-unit name="responderPersistenUnit" transaction-type="JTA">
>     > <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)</jta-data-source>
>     > <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)</jta-data-source>  
>     >  
>     > </persistence-unit>
>     >
>     > And the configuration entries to:
>     >
>     > <config name="org.apache.aries.jpa.responderPersistenUnit">
>     >  
>     >   javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
>     >     *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver*
>     >     hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>     >     hibernate.show_sql=false
>     >     hibernate.format_sql=true
>     >     hibernate.hbm2ddl.auto=none
>     > </config>
>     >
>     > Then the error Is:
>     >
>     >
>     > java.lang.IllegalArgumentException: Cannot rebind to a different
>     > database driver, as per the JPA service specification
>     > at
>     >
>     org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.processProperties(AriesEntityManagerFactoryBuilder.java:225)
>     > ~[?:?]
>     > at
>     >
>     org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:173) ~[?:?]
>     > at
>     >
>     org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
>     > ~[?:?]
>     > at
>     >
>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>     > ~[8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
>     > at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141)
>     > [8:org.apache.felix.configadmin:1.8.16]
>     > at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109)
>     > [8:org.apache.felix.configadmin:1.8.16]
>     > at java.lang.Thread.run(Thread.java:748) [?:?]
>     >
>     >
>     > If I remove the
>     > line *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver *from the
>     > config file above, then I get the previous error about configuration not
>     > being completed.  What I am trying to do is to not  hard code
>     >  the /hibernate.dialect /inside the bundle, so I can switch to a
>     > different database without having to rebuild.
>     >
>     > Also, my DataSource is already created by PAX JDBC Config and this I
>     > don’t want to change, since I am using PreHook facility there to run
>     > LiquiBase migrations.
>     > Any hints or examples appreciated.
>     >
>     >
>     > Best regards,
>     > Alex soto
>     >
>     >
>     >
>     >
>     >> On May 24, 2018, at 1:41 PM, Alex Soto <[hidden email] <mailto:[hidden email]>
>     >> <mailto:[hidden email] <mailto:[hidden email]>>> wrote:
>     >>
>     >> Hello,  
>     >>
>     >> I am using Aries JPA 2.7.0, I am trying provide the JPA persistence
>     >> configuration using configuration file.  So my persistence.xml.
>     >>
>     >>     <persistence version="2.0"
>     >>     xmlns="http://java.sun.com/xml/ns/persistence
>     <http://java.sun.com/xml/ns/persistence>"
>     >>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
>     <http://www.w3.org/2001/XMLSchema-instance>"
>     >>     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
>     <http://java.sun.com/xml/ns/persistence>
>     >>     http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
>     <http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd>">
>     >>
>     >>     <persistence-unit name="responderPersistenUnit"
>     >>     transaction-type="JTA">
>     >>   
>      <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
>     >>     </persistence-unit>
>     >>     </persistence>
>     >>
>     >>
>     >> I deploy config file as part of my feature:
>     >>
>     >>     <config name="org.apache.aries.jpa.responderPersistenUnit">
>     >>         hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>     >>         hibernate.show_sql=false
>     >>         hibernate.format_sql=true
>     >>         hibernate.hbm2ddl.auto=none
>     >>      
>     >>   
>        jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)
>     >>        
>     >>   
>      non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)  
>     >>      
>     >>     </config>
>     >>
>     >> When I run, the following exception is thrown:
>     >>
>     >>
>     >>     java.lang.IllegalArgumentException: The persistence unit
>     >>     responderPersistenUnit has incomplete configuration and cannot be
>     >>     created. The configuration
>     >>   
>      is{non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder),
>     >>     hibernate.format_sql=true, hibernate.hbm2ddl.auto=none,
>     >>     hibernate.dialect=org.hibernate.dialect.MariaDBDialect,
>     >>   
>      jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder), felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/dist/target/encryptedquery-responder-dist-1.0.0-SNAPSHOT/etc/org.apache.aries.jpa.responderPersistenUnit.cfg,
>     >>   
>      hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA, service.pid=org.apache.aries.jpa.responderPersistenUnit}
>     >>   
>      at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365)
>     >>     ~[?:?]
>     >>   
>      at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183)
>     >>     ~[?:?]
>     >>     at
>     >>   
>      org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
>     >>     ~[?:?]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>     >>     ~[8:org.apache.felix.configadmin:1.8.16]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
>     >>   
>      at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
>     >>   
>      at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
>     >>   
>      at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
>     >>     at java.lang.Thread.run(Thread.java:748) [?:?]
>     >>
>     >>
>     >>
>     >> So Aries JPA is finding the configuration properties I am providing,
>     >> but still missing something.  What else is needed as configuration
>     >> properties? Why is it not complete the persistent unit?
>     >>
>     >>
>     >> Best regards,
>     >> Alex soto
>     >>
>     >>
>     >>
>     >>
>     >
>
>     --
>     --
>     Jean-Baptiste Onofré
>     [hidden email] <mailto:[hidden email]>
>     http://blog.nanthrax.net
>     Talend - http://www.talend.com
>
>

--
--
Jean-Baptiste Onofré
[hidden email]
http://blog.nanthrax.net
Talend - http://www.talend.com
Reply | Threaded
Open this post in threaded view
|

Re: Aries JPA: The persistence unit has incomplete configuration and cannot be created.

pkmcculloch
The dialect can be left out of the pu.xml though. I started down this path, but in the end have just relied on hibernate to select the correct dialect. I deploy the same bundles on H2, Oracle & MSSQL with this approach.


On 25 May 2018 at 12:51, Jean-Baptiste Onofré <[hidden email]> wrote:
Hi Paul,

yes, I remember this discussion, but AFAIR, it's always overriden by the
dialect in the persistence.xml.

Regards
JB

On 25/05/2018 13:00, Paul McCulloch wrote:
> Hibernate usually does a reasonable job of auto detecting the dialect,
> in my experience. If you need to override this then Aries JPA supports
> creating a configuration file /etc/org.apache.aries.jpa.<PU name>.cfg
> where you can override hibernate.dialect. Beware if you have a "-" in
> the PU name as I think fileinstall we try and create a factory config.
>
> I can't recall where I got this info from. It might have been
> here: http://karaf.922171.n3.nabble.com/Dynamic-parameters-in-persistence-xml-td4043602.html
>
> On 25 May 2018 at 06:46, Jean-Baptiste Onofré <[hidden email]
> <mailto:[hidden email]>> wrote:
>
>     Hi Alex,
>
>     the dialect HAS to be in the persistence.xml (it's in the JPA spec).
>
>     AFAIK, Aries JPA doesn't provide a mechanism to provide the dialect
>     externally from the persistence.xml.
>
>     Even the Aries JPA itests define the dialect there:
>
>     https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40
>     <https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40>
>
>     Further more, dialect also depends of the engine you are using
>     (hibernate, openjpa, eclipselink).
>
>     Regards
>     JB
>
>     On 24/05/2018 21:26, Alex Soto wrote:
>     > If I change my persistence.xml to this:
>     >
>     >
>     > <persistence-unit name="responderPersistenUnit" transaction-type="JTA">
>     > <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)</jta-data-source>
>     > <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)</jta-data-source>  
>     >  
>     > </persistence-unit>
>     >
>     > And the configuration entries to:
>     >
>     > <config name="org.apache.aries.jpa.responderPersistenUnit">
>     >  
>     >   javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
>     >     *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver*
>     >     hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>     >     hibernate.show_sql=false
>     >     hibernate.format_sql=true
>     >     hibernate.hbm2ddl.auto=none
>     > </config>
>     >
>     > Then the error Is:
>     >
>     >
>     > java.lang.IllegalArgumentException: Cannot rebind to a different
>     > database driver, as per the JPA service specification
>     > at
>     >
>     org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.processProperties(AriesEntityManagerFactoryBuilder.java:225)
>     > ~[?:?]
>     > at
>     >
>     org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:173) ~[?:?]
>     > at
>     >
>     org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
>     > ~[?:?]
>     > at
>     >
>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>     > ~[8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
>     > at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141)
>     > [8:org.apache.felix.configadmin:1.8.16]
>     > at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109)
>     > [8:org.apache.felix.configadmin:1.8.16]
>     > at java.lang.Thread.run(Thread.java:748) [?:?]
>     >
>     >
>     > If I remove the
>     > line *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver *from the
>     > config file above, then I get the previous error about configuration not
>     > being completed.  What I am trying to do is to not  hard code
>     >  the /hibernate.dialect /inside the bundle, so I can switch to a
>     > different database without having to rebuild.
>     >
>     > Also, my DataSource is already created by PAX JDBC Config and this I
>     > don’t want to change, since I am using PreHook facility there to run
>     > LiquiBase migrations.
>     > Any hints or examples appreciated.
>     >
>     >
>     > Best regards,
>     > Alex soto
>     >
>     >
>     >
>     >
>     >> On May 24, 2018, at 1:41 PM, Alex Soto <[hidden email] <mailto:[hidden email]>
>     >> <mailto:[hidden email] <mailto:[hidden email]>>> wrote:
>     >>
>     >> Hello,  
>     >>
>     >> I am using Aries JPA 2.7.0, I am trying provide the JPA persistence
>     >> configuration using configuration file.  So my persistence.xml.
>     >>
>     >>     <persistence version="2.0"
>     >>     xmlns="http://java.sun.com/xml/ns/persistence
>     <http://java.sun.com/xml/ns/persistence>"
>     >>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
>     <http://www.w3.org/2001/XMLSchema-instance>"
>     >>     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
>     <http://java.sun.com/xml/ns/persistence>
>     >>     http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
>     <http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd>">
>     >>
>     >>     <persistence-unit name="responderPersistenUnit"
>     >>     transaction-type="JTA">
>     >>   
>      <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
>     >>     </persistence-unit>
>     >>     </persistence>
>     >>
>     >>
>     >> I deploy config file as part of my feature:
>     >>
>     >>     <config name="org.apache.aries.jpa.responderPersistenUnit">
>     >>         hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>     >>         hibernate.show_sql=false
>     >>         hibernate.format_sql=true
>     >>         hibernate.hbm2ddl.auto=none
>     >>      
>     >>   
>        jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)
>     >>        
>     >>   
>      non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)  
>     >>      
>     >>     </config>
>     >>
>     >> When I run, the following exception is thrown:
>     >>
>     >>
>     >>     java.lang.IllegalArgumentException: The persistence unit
>     >>     responderPersistenUnit has incomplete configuration and cannot be
>     >>     created. The configuration
>     >>   
>      is{non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder),
>     >>     hibernate.format_sql=true, hibernate.hbm2ddl.auto=none,
>     >>     hibernate.dialect=org.hibernate.dialect.MariaDBDialect,
>     >>   
>      jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder), felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/dist/target/encryptedquery-responder-dist-1.0.0-SNAPSHOT/etc/org.apache.aries.jpa.responderPersistenUnit.cfg,
>     >>   
>      hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA, service.pid=org.apache.aries.jpa.responderPersistenUnit}
>     >>   
>      at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365)
>     >>     ~[?:?]
>     >>   
>      at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183)
>     >>     ~[?:?]
>     >>     at
>     >>   
>      org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
>     >>     ~[?:?]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>     >>     ~[8:org.apache.felix.configadmin:1.8.16]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
>     >>   
>      at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
>     >>   
>      at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
>     >>   
>      at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
>     >>     at java.lang.Thread.run(Thread.java:748) [?:?]
>     >>
>     >>
>     >>
>     >> So Aries JPA is finding the configuration properties I am providing,
>     >> but still missing something.  What else is needed as configuration
>     >> properties? Why is it not complete the persistent unit?
>     >>
>     >>
>     >> Best regards,
>     >> Alex soto
>     >>
>     >>
>     >>
>     >>
>     >
>
>     --
>     --
>     Jean-Baptiste Onofré
>     [hidden email] <mailto:[hidden email]>
>     http://blog.nanthrax.net
>     Talend - http://www.talend.com
>
>

--
--
Jean-Baptiste Onofré
[hidden email]
http://blog.nanthrax.net
Talend - http://www.talend.com

Reply | Threaded
Open this post in threaded view
|

Re: Aries JPA: The persistence unit has incomplete configuration and cannot be created.

Tim Ward-2
Hi Alex,

It looks like you’ve managed to slide into a slightly awkward gap between the expected ways of configuring your persistence unit.

The main issue here is that it is expected that you either include all DataSource information and configuration in the persistence.xml, or you don’t put anything into the persistence.xml at all and do everything in configuration admin. The problem is that the configuration admin model does not support setting JNDI names for the DataSources, only the use of DataSource factories. This is why you end up getting errors about the configuration being “incomplete” - the container gets confused about the mixture of sources of datasource configuration data.

The best option I can come up with at the moment is to actually use the builder yourself by doing something like:

@Component
public class EMFConfigurator {

    @Reference
    private EntityManagerFactoryBuilder emfb;

    @Reference
    private DataSource ds;

    @Reference
    private DataSource ds2;

    private EntityManagerFactory emf;

    @Activate
    void start(Map<String, Object> props) {
       Map<String, Object> jpaProps = new HashMap<>(props);
       
      
       jpaProps.put(“javax.persistence.jtaDataSource”, ds);
       jpaProps.put(“javax.persistence.nonJtaDataSource, ds2);

       // Or for resource local just use one non-jta datasource
       // jpaProps.put(“javax.persistence.dataSource”, ds2);


       // This line also causes the emf to be registered as a service
       emf = emfb.createEntityManagerFactory(jpaProps);
    }

    @Deactivate
    void stop() {
       // This unregisters the emf service
       emf.close();
    }
}

With a persistence xml containing:

<persistence-unit name="responderPersistenUnit" transaction-type="JTA">
</persistence-unit>

The configuration entries then target your component

<config name=“pid.for.your.component”>
                emfb.target=(osgi.unit.name=responderPersistenUnit)
                ds.target="(osgi.jndi.service.name=responder)”
                ds2.target="(osgi.jndi.service.name=responder-non-jta)"
     hibernate.dialect=org.hibernate.dialect.MariaDBDialect
     hibernate.show_sql=false
     hibernate.format_sql=true
     hibernate.hbm2ddl.auto=none
</config>


Best Regards,

Tim

On 25 May 2018, at 15:01, Paul McCulloch <[hidden email]> wrote:

The dialect can be left out of the pu.xml though. I started down this path, but in the end have just relied on hibernate to select the correct dialect. I deploy the same bundles on H2, Oracle & MSSQL with this approach.


On 25 May 2018 at 12:51, Jean-Baptiste Onofré <[hidden email]> wrote:
Hi Paul,

yes, I remember this discussion, but AFAIR, it's always overriden by the
dialect in the persistence.xml.

Regards
JB

On 25/05/2018 13:00, Paul McCulloch wrote:
> Hibernate usually does a reasonable job of auto detecting the dialect,
> in my experience. If you need to override this then Aries JPA supports
> creating a configuration file /etc/org.apache.aries.jpa.<PU name>.cfg
> where you can override hibernate.dialect. Beware if you have a "-" in
> the PU name as I think fileinstall we try and create a factory config.
>
> I can't recall where I got this info from. It might have been
> here: http://karaf.922171.n3.nabble.com/Dynamic-parameters-in-persistence-xml-td4043602.html
>
> On 25 May 2018 at 06:46, Jean-Baptiste Onofré <[hidden email]
> <mailto:[hidden email]>> wrote:
>
>     Hi Alex,
>
>     the dialect HAS to be in the persistence.xml (it's in the JPA spec).
>
>     AFAIK, Aries JPA doesn't provide a mechanism to provide the dialect
>     externally from the persistence.xml.
>
>     Even the Aries JPA itests define the dialect there:
>
>     https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40
>     <https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40>
>
>     Further more, dialect also depends of the engine you are using
>     (hibernate, openjpa, eclipselink).
>
>     Regards
>     JB
>
>     On 24/05/2018 21:26, Alex Soto wrote:
>     > If I change my persistence.xml to this:
>     >
>     >
>     > <persistence-unit name="responderPersistenUnit" transaction-type="JTA">
>     > <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)</jta-data-source>
>     > <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)</jta-data-source>  
>     >  
>     > </persistence-unit>
>     >
>     > And the configuration entries to:
>     >
>     > <config name="org.apache.aries.jpa.responderPersistenUnit">
>     >  
>     >   javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
>     >     *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver*
>     >     hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>     >     hibernate.show_sql=false
>     >     hibernate.format_sql=true
>     >     hibernate.hbm2ddl.auto=none
>     > </config>
>     >
>     > Then the error Is:
>     >
>     >
>     > java.lang.IllegalArgumentException: Cannot rebind to a different
>     > database driver, as per the JPA service specification
>     > at
>     >
>     org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.processProperties(AriesEntityManagerFactoryBuilder.java:225)
>     > ~[?:?]
>     > at
>     >
>     org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:173) ~[?:?]
>     > at
>     >
>     org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
>     > ~[?:?]
>     > at
>     >
>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>     > ~[8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
>     > at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141)
>     > [8:org.apache.felix.configadmin:1.8.16]
>     > at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109)
>     > [8:org.apache.felix.configadmin:1.8.16]
>     > at java.lang.Thread.run(Thread.java:748) [?:?]
>     >
>     >
>     > If I remove the
>     > line *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver *from the
>     > config file above, then I get the previous error about configuration not
>     > being completed.  What I am trying to do is to not  hard code
>     >  the /hibernate.dialect /inside the bundle, so I can switch to a
>     > different database without having to rebuild.
>     >
>     > Also, my DataSource is already created by PAX JDBC Config and this I
>     > don’t want to change, since I am using PreHook facility there to run
>     > LiquiBase migrations.
>     > Any hints or examples appreciated.
>     >
>     >
>     > Best regards,
>     > Alex soto
>     >
>     >
>     >
>     >
>     >> On May 24, 2018, at 1:41 PM, Alex Soto <[hidden email] <mailto:[hidden email]>
>     >> <mailto:[hidden email] <mailto:[hidden email]>>> wrote:
>     >>
>     >> Hello,  
>     >>
>     >> I am using Aries JPA 2.7.0, I am trying provide the JPA persistence
>     >> configuration using configuration file.  So my persistence.xml.
>     >>
>     >>     <persistence version="2.0"
>     >>     xmlns="http://java.sun.com/xml/ns/persistence
>     <http://java.sun.com/xml/ns/persistence>"
>     >>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
>     <http://www.w3.org/2001/XMLSchema-instance>"
>     >>     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
>     <http://java.sun.com/xml/ns/persistence>
>     >>     http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
>     <http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd>">
>     >>
>     >>     <persistence-unit name="responderPersistenUnit"
>     >>     transaction-type="JTA">
>     >>   
>      <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
>     >>     </persistence-unit>
>     >>     </persistence>
>     >>
>     >>
>     >> I deploy config file as part of my feature:
>     >>
>     >>     <config name="org.apache.aries.jpa.responderPersistenUnit">
>     >>         hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>     >>         hibernate.show_sql=false
>     >>         hibernate.format_sql=true
>     >>         hibernate.hbm2ddl.auto=none
>     >>      
>     >>   
>        jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)
>     >>        
>     >>   
>      non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)  
>     >>      
>     >>     </config>
>     >>
>     >> When I run, the following exception is thrown:
>     >>
>     >>
>     >>     java.lang.IllegalArgumentException: The persistence unit
>     >>     responderPersistenUnit has incomplete configuration and cannot be
>     >>     created. The configuration
>     >>   
>      is{non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder),
>     >>     hibernate.format_sql=true, hibernate.hbm2ddl.auto=none,
>     >>     hibernate.dialect=org.hibernate.dialect.MariaDBDialect,
>     >>   
>      jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder), felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/dist/target/encryptedquery-responder-dist-1.0.0-SNAPSHOT/etc/org.apache.aries.jpa.responderPersistenUnit.cfg,
>     >>   
>      hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA, service.pid=org.apache.aries.jpa.responderPersistenUnit}
>     >>   
>      at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365)
>     >>     ~[?:?]
>     >>   
>      at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183)
>     >>     ~[?:?]
>     >>     at
>     >>   
>      org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
>     >>     ~[?:?]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>     >>     ~[8:org.apache.felix.configadmin:1.8.16]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
>     >>   
>      at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
>     >>   
>      at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
>     >>   
>      at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
>     >>     at java.lang.Thread.run(Thread.java:748) [?:?]
>     >>
>     >>
>     >>
>     >> So Aries JPA is finding the configuration properties I am providing,
>     >> but still missing something.  What else is needed as configuration
>     >> properties? Why is it not complete the persistent unit?
>     >>
>     >>
>     >> Best regards,
>     >> Alex soto
>     >>
>     >>
>     >>
>     >>
>     >
>
>     --
>     --
>     Jean-Baptiste Onofré
>     [hidden email] <mailto:[hidden email]>
>     http://blog.nanthrax.net
>     Talend - http://www.talend.com
>
>

--
--
Jean-Baptiste Onofré
[hidden email]
http://blog.nanthrax.net
Talend - http://www.talend.com


Reply | Threaded
Open this post in threaded view
|

Re: Aries JPA: The persistence unit has incomplete configuration and cannot be created.

Alex Soto
In reply to this post by pkmcculloch
Hi All,

Thanks for input.  I think I found a sweet spot that seems to work, although I wish somebody from AriesJPA can confirm this is a valid approach.
I removed the Dialect and the other Hibernate specific settings out of my persistence.xml, but I have to keep the data source reference to JNDI:

<persistence-unit name="responderPersistenUnit" transaction-type="JTA">
  <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)</jta-data-source>
  </persistence-unit>

The Pax-exam configuration file org.ops4j.datasource-responder.cfg remains the same:

osgi.jdbc.driver.name = mariadb
dataSourceName=responder
url = jdbc:<a href="mariadb://localhost:3306/responder?characterEncoding=UTF-8&amp;useServerPrepStmts=true" class="">mariadb://localhost:3306/responder?characterEncoding=UTF-8&useServerPrepStmts=true
user=XXX
password=XXX
databaseName=responder
ops4j.preHook=responderDB

AriesJPA configuration in my feature provides the dialect and the provider:

<config name="org.apache.aries.jpa.responderPersistenUnit">
     javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
     hibernate.dialect=org.hibernate.dialect.MariaDBDialect
     hibernate.show_sql=false
     hibernate.format_sql=true
     hibernate.hbm2ddl.auto=none
  </config>

When I run, first I can see in the log AriesJPA Container:

2018-05-25T09:01:22,580 | DEBUG | features-3-thread-1 | PersistenceBundleTracker         | 46 - org.apache.aries.jpa.container - 2.7.0 | Matching JPA contract for possible persistence bundle encryptedquery-responder-data
2018-05-25T09:01:22,594 | INFO  | features-3-thread-1 | PersistenceBundleTracker         | 46 - org.apache.aries.jpa.container - 2.7.0 | Found persistence unit responderPersistenUnit in bundle encryptedquery-responder-data with provider null.
2018-05-25T09:01:22,596 | INFO  | features-3-thread-1 | PersistenceProviderTracker       | 46 - org.apache.aries.jpa.container - 2.7.0 | Found provider for responderPersistenUnit org.hibernate.jpa.HibernatePersistenceProvider
2018-05-25T09:01:22,618 | INFO  | features-3-thread-1 | LogHelper                        | 134 - org.hibernate.core - 5.2.9.Final | HHH000204: Processing PersistenceUnitInfo [
name: responderPersistenUnit
...]
2018-05-25T09:01:22,688 | INFO  | features-3-thread-1 | Version                          | 134 - org.hibernate.core - 5.2.9.Final | HHH000412: Hibernate Core {5.2.9.Final}
2018-05-25T09:01:22,691 | INFO  | features-3-thread-1 | Environment                      | 134 - org.hibernate.core - 5.2.9.Final | HHH000206: hibernate.properties not found
2018-05-25T09:01:22,750 | INFO  | features-3-thread-1 | Version                          | 133 - org.hibernate.common.hibernate-commons-annotations - 5.0.1.Final | HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
2018-05-25T09:01:23,330 | WARN  | features-3-thread-1 | JdbcEnvironmentInitiator         | 134 - org.hibernate.core - 5.2.9.Final | HHH000342: Could not obtain connection to query metadata : Unable to determine Dialect to use [name=, majorVersion=0]; user must register resolver or explicitly set 'hibernate.dialect'
2018-05-25T09:01:23,332 | DEBUG | features-3-thread-1 | PersistenceProviderTracker       | 46 - org.apache.aries.jpa.container - 2.7.0 | Error while creating the Dummy EntityManagerFactory to allow weaving.
org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:271) ~[?:?]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:233) ~[?:?]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210) ~[?:?]
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51) ~[?:?]
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94) ~[?:?]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:242) ~[?:?]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210) ~[?:?]
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352) ~[?:?]
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111) ~[?:?]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:858) ~[?:?]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:885) ~[?:?]
at org.hibernate.osgi.OsgiPersistenceProvider.createContainerEntityManagerFactory(OsgiPersistenceProvider.java:96) ~[?:?]
at org.apache.aries.jpa.container.impl.PersistenceProviderTracker.createAndCloseDummyEMF(PersistenceProviderTracker.java:105) ~[?:?]
at org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:86) ~[?:?]
at org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:44) ~[?:?]
at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941) ~[?:?]
at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870) ~[?:?]
at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256) ~[?:?]
at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183) ~[?:?]
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:318) ~[?:?]
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261) ~[?:?]
at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.trackProvider(PersistenceBundleTracker.java:229) ~[?:?]
at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.findPersistenceUnits(PersistenceBundleTracker.java:213) ~[?:?]
at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:98) ~[?:?]
at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:44) ~[?:?]
at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:469) ~[?:?]
at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:415) ~[?:?]
at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256) ~[?:?]
at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229) ~[?:?]
at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:444) ~[?:?]
at org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915) ~[?:?]
at org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834) ~[?:?]
at org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516) ~[?:?]
at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4579) ~[?:?]
at org.apache.felix.framework.Felix.activateBundle(Felix.java:2231) ~[?:?]
at org.apache.felix.framework.Felix.startBundle(Felix.java:2146) ~[?:?]
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998) ~[?:?]
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:984) ~[?:?]
at org.apache.karaf.features.internal.service.BundleInstallSupportImpl.startBundle(BundleInstallSupportImpl.java:161) ~[?:?]
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1116) ~[?:?]
at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:996) ~[?:?]
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1025) ~[?:?]
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:964) ~[?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]
at java.lang.Thread.run(Thread.java:748) [?:?]
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100) ~[?:?]
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54) ~[?:?]
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:137) ~[?:?]
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) ~[?:?]
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88) ~[?:?]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:259) ~[?:?]
... 46 more


Notice the above exception is logged as DEBUG level, so I think it can be ignored.  Later I see this error:

2018-05-25T09:01:23,354 | ERROR | CM Configuration Updater (ManagedService Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) | configadmin                      | 8 - org.apache.felix.configadmin - 1.8.16 | [org.osgi.service.cm.ManagedService, id=196, bundle=18/mvn:org.enquery.encryptedquery/encryptedquery-responder-data/1.0.0-SNAPSHOT]: Unexpected problem updating configuration org.apache.aries.jpa.responderPersistenUnit
java.lang.IllegalArgumentException: The persistence unit responderPersistenUnit has incomplete configuration and cannot be created. The configuration is{hibernate.format_sql=true, javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider, hibernate.hbm2ddl.auto=none, hibernate.dialect=org.hibernate.dialect.MariaDBDialect, org.apache.karaf.features.configKey=org.apache.aries.jpa.responderPersistenUnit, felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/itests/target/exam/cdf383ba-08b3-4157-bec3-c131857d7108/etc/org.apache.aries.jpa.responderPersistenUnit.cfg, hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA, service.pid=org.apache.aries.jpa.responderPersistenUnit}
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365) ~[?:?]
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183) ~[?:?]
at org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75) ~[?:?]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189) ~[8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
at java.lang.Thread.run(Thread.java:748) [?:?]


Later I see PAX-JDBC configuring the DataSource:


2018-05-25T09:01:24,065 | INFO  | CM Configuration Updater (ManagedService Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) | ServiceTrackerHelper             | 162 - org.ops4j.pax.jdbc.config - 1.3.0 | Obtained service dependency: (&(objectClass=org.osgi.service.jdbc.DataSourceFactory)(osgi.jdbc.driver.name=mariadb))
2018-05-25T09:01:24,065 | INFO  | CM Configuration Updater (ManagedService Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) | DataSourceRegistration           | 162 - org.ops4j.pax.jdbc.config - 1.3.0 | Found DataSourceFactory. Creating DataSource responder
2018-05-25T09:01:24,071 | INFO  | CM Configuration Updater (ManagedService Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) | DataSourceRegistration           | 162 - org.ops4j.pax.jdbc.config - 1.3.0 | Executing pre hook for DataSource responder
2018-05-25T09:01:29,888 | INFO  | CM Configuration Updater (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource]) | DataSourceRegistration           | 162 - org.ops4j.pax.jdbc.config - 1.3.0 | Pre hook finished. Publishing DataSource responder
2018-05-25T09:01:29,890 | INFO  | CM Configuration Updater (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource]) | DataSourceTracker                | 46 - org.apache.aries.jpa.container - 2.7.0 | Found DataSource for responderPersistenUnit osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)
2018-05-25T09:01:29,890 | DEBUG | CM Configuration Updater (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource]) | AriesEntityManagerFactoryBuilder | 46 - org.apache.aries.jpa.container - 2.7.0 | No transaction type set in config, restoring the original value JTA
2018-05-25T09:01:29,890 | INFO  | CM Configuration Updater (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource]) | LogHelper                        | 134 - org.hibernate.core - 5.2.9.Final | HHH000204: Processing PersistenceUnitInfo [
name: responderPersistenUnit
...]
2018-05-25T09:01:29,984 | INFO  | CM Configuration Updater (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource]) | Dialect                          | 134 - org.hibernate.core - 5.2.9.Final | HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect


After this, everything works normally. Looks like the errors I see are later corrected, so it may be just a timing issue.

Best regards,
Alex soto




On May 25, 2018, at 8:01 AM, Paul McCulloch <[hidden email]> wrote:

The dialect can be left out of the pu.xml though. I started down this path, but in the end have just relied on hibernate to select the correct dialect. I deploy the same bundles on H2, Oracle & MSSQL with this approach.


On 25 May 2018 at 12:51, Jean-Baptiste Onofré <[hidden email]> wrote:
Hi Paul,

yes, I remember this discussion, but AFAIR, it's always overriden by the
dialect in the persistence.xml.

Regards
JB

On 25/05/2018 13:00, Paul McCulloch wrote:
> Hibernate usually does a reasonable job of auto detecting the dialect,
> in my experience. If you need to override this then Aries JPA supports
> creating a configuration file /etc/org.apache.aries.jpa.<PU name>.cfg
> where you can override hibernate.dialect. Beware if you have a "-" in
> the PU name as I think fileinstall we try and create a factory config.
>
> I can't recall where I got this info from. It might have been
> here: http://karaf.922171.n3.nabble.com/Dynamic-parameters-in-persistence-xml-td4043602.html
>
> On 25 May 2018 at 06:46, Jean-Baptiste Onofré <[hidden email]
> <mailto:[hidden email]>> wrote:
>
>     Hi Alex,
>
>     the dialect HAS to be in the persistence.xml (it's in the JPA spec).
>
>     AFAIK, Aries JPA doesn't provide a mechanism to provide the dialect
>     externally from the persistence.xml.
>
>     Even the Aries JPA itests define the dialect there:
>
>     https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40
>     <https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40>
>
>     Further more, dialect also depends of the engine you are using
>     (hibernate, openjpa, eclipselink).
>
>     Regards
>     JB
>
>     On 24/05/2018 21:26, Alex Soto wrote:
>     > If I change my persistence.xml to this:
>     >
>     >
>     > <persistence-unit name="responderPersistenUnit" transaction-type="JTA">
>     > <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)</jta-data-source>
>     > <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)</jta-data-source>  
>     >  
>     > </persistence-unit>
>     >
>     > And the configuration entries to:
>     >
>     > <config name="org.apache.aries.jpa.responderPersistenUnit">
>     >  
>     >   javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
>     >     *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver*
>     >     hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>     >     hibernate.show_sql=false
>     >     hibernate.format_sql=true
>     >     hibernate.hbm2ddl.auto=none
>     > </config>
>     >
>     > Then the error Is:
>     >
>     >
>     > java.lang.IllegalArgumentException: Cannot rebind to a different
>     > database driver, as per the JPA service specification
>     > at
>     >
>     org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.processProperties(AriesEntityManagerFactoryBuilder.java:225)
>     > ~[?:?]
>     > at
>     >
>     org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:173) ~[?:?]
>     > at
>     >
>     org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
>     > ~[?:?]
>     > at
>     >
>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>     > ~[8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
>     > at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141)
>     > [8:org.apache.felix.configadmin:1.8.16]
>     > at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109)
>     > [8:org.apache.felix.configadmin:1.8.16]
>     > at java.lang.Thread.run(Thread.java:748) [?:?]
>     >
>     >
>     > If I remove the
>     > line *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver *from the
>     > config file above, then I get the previous error about configuration not
>     > being completed.  What I am trying to do is to not  hard code
>     >  the /hibernate.dialect /inside the bundle, so I can switch to a
>     > different database without having to rebuild.
>     >
>     > Also, my DataSource is already created by PAX JDBC Config and this I
>     > don’t want to change, since I am using PreHook facility there to run
>     > LiquiBase migrations.
>     > Any hints or examples appreciated.
>     >
>     >
>     > Best regards,
>     > Alex soto
>     >
>     >
>     >
>     >
>     >> On May 24, 2018, at 1:41 PM, Alex Soto <[hidden email] <mailto:[hidden email]>
>     >> <mailto:[hidden email] <mailto:[hidden email]>>> wrote:
>     >>
>     >> Hello,  
>     >>
>     >> I am using Aries JPA 2.7.0, I am trying provide the JPA persistence
>     >> configuration using configuration file.  So my persistence.xml.
>     >>
>     >>     <persistence version="2.0"
>     >>     xmlns="http://java.sun.com/xml/ns/persistence
>     <http://java.sun.com/xml/ns/persistence>"
>     >>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
>     <http://www.w3.org/2001/XMLSchema-instance>"
>     >>     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
>     <http://java.sun.com/xml/ns/persistence>
>     >>     http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
>     <http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd>">
>     >>
>     >>     <persistence-unit name="responderPersistenUnit"
>     >>     transaction-type="JTA">
>     >>   
>      <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
>     >>     </persistence-unit>
>     >>     </persistence>
>     >>
>     >>
>     >> I deploy config file as part of my feature:
>     >>
>     >>     <config name="org.apache.aries.jpa.responderPersistenUnit">
>     >>         hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>     >>         hibernate.show_sql=false
>     >>         hibernate.format_sql=true
>     >>         hibernate.hbm2ddl.auto=none
>     >>      
>     >>   
>        jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)
>     >>        
>     >>   
>      non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)  
>     >>      
>     >>     </config>
>     >>
>     >> When I run, the following exception is thrown:
>     >>
>     >>
>     >>     java.lang.IllegalArgumentException: The persistence unit
>     >>     responderPersistenUnit has incomplete configuration and cannot be
>     >>     created. The configuration
>     >>   
>      is{non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder),
>     >>     hibernate.format_sql=true, hibernate.hbm2ddl.auto=none,
>     >>     hibernate.dialect=org.hibernate.dialect.MariaDBDialect,
>     >>   
>      jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder), felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/dist/target/encryptedquery-responder-dist-1.0.0-SNAPSHOT/etc/org.apache.aries.jpa.responderPersistenUnit.cfg,
>     >>   
>      hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA, service.pid=org.apache.aries.jpa.responderPersistenUnit}
>     >>   
>      at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365)
>     >>     ~[?:?]
>     >>   
>      at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183)
>     >>     ~[?:?]
>     >>     at
>     >>   
>      org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
>     >>     ~[?:?]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>     >>     ~[8:org.apache.felix.configadmin:1.8.16]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
>     >>   
>      at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
>     >>   
>      at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
>     >>   
>      at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
>     >>     at java.lang.Thread.run(Thread.java:748) [?:?]
>     >>
>     >>
>     >>
>     >> So Aries JPA is finding the configuration properties I am providing,
>     >> but still missing something.  What else is needed as configuration
>     >> properties? Why is it not complete the persistent unit?
>     >>
>     >>
>     >> Best regards,
>     >> Alex soto
>     >>
>     >>
>     >>
>     >>
>     >
>
>     --
>     --
>     Jean-Baptiste Onofré
>     [hidden email] <mailto:[hidden email]>
>     http://blog.nanthrax.net
>     Talend - http://www.talend.com
>
>

--
--
Jean-Baptiste Onofré
[hidden email]
http://blog.nanthrax.net
Talend - http://www.talend.com


Reply | Threaded
Open this post in threaded view
|

Re: Aries JPA: The persistence unit has incomplete configuration and cannot be created.

pkmcculloch
That's what I do Alex. I didn't think I needed the non-jta-datasource (& everything seems to work), but this thread has made me think I should go back & re-asses that. 

I'll also look again at the Transaction Control stuff - it was at 0.0.1 when I last looked, so I was nervous about relying on it. It looks like it will fix my hack for MSSQL of having to fake an XA datasource (as Aries JPA transactions don't work with non XA datasources)..

On 25 May 2018 at 14:21, Alex Soto <[hidden email]> wrote:
Hi All,

Thanks for input.  I think I found a sweet spot that seems to work, although I wish somebody from AriesJPA can confirm this is a valid approach.
I removed the Dialect and the other Hibernate specific settings out of my persistence.xml, but I have to keep the data source reference to JNDI:

<persistence-unit name="responderPersistenUnit" transaction-type="JTA">
  <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)</jta-data-source>
  </persistence-unit>

The Pax-exam configuration file org.ops4j.datasource-responder.cfg remains the same:

dataSourceName=responder
user=XXX
password=XXX
databaseName=responder
ops4j.preHook=responderDB

AriesJPA configuration in my feature provides the dialect and the provider:

<config name="org.apache.aries.jpa.responderPersistenUnit">
     javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
     hibernate.dialect=org.hibernate.dialect.MariaDBDialect
     hibernate.show_sql=false
     hibernate.format_sql=true
     hibernate.hbm2ddl.auto=none
  </config>

When I run, first I can see in the log AriesJPA Container:

2018-05-25T09:01:22,580 | DEBUG | features-3-thread-1 | PersistenceBundleTracker         | 46 - org.apache.aries.jpa.container - 2.7.0 | Matching JPA contract for possible persistence bundle encryptedquery-responder-data
2018-05-25T09:01:22,594 | INFO  | features-3-thread-1 | PersistenceBundleTracker         | 46 - org.apache.aries.jpa.container - 2.7.0 | Found persistence unit responderPersistenUnit in bundle encryptedquery-responder-data with provider null.
2018-05-25T09:01:22,596 | INFO  | features-3-thread-1 | PersistenceProviderTracker       | 46 - org.apache.aries.jpa.container - 2.7.0 | Found provider for responderPersistenUnit org.hibernate.jpa.HibernatePersistenceProvider
2018-05-25T09:01:22,618 | INFO  | features-3-thread-1 | LogHelper                        | 134 - org.hibernate.core - 5.2.9.Final | HHH000204: Processing PersistenceUnitInfo [
name: responderPersistenUnit
...]
2018-05-25T09:01:22,688 | INFO  | features-3-thread-1 | Version                          | 134 - org.hibernate.core - 5.2.9.Final | HHH000412: Hibernate Core {5.2.9.Final}
2018-05-25T09:01:22,691 | INFO  | features-3-thread-1 | Environment                      | 134 - org.hibernate.core - 5.2.9.Final | HHH000206: hibernate.properties not found
2018-05-25T09:01:22,750 | INFO  | features-3-thread-1 | Version                          | 133 - org.hibernate.common.hibernate-commons-annotations - 5.0.1.Final | HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
2018-05-25T09:01:23,330 | WARN  | features-3-thread-1 | JdbcEnvironmentInitiator         | 134 - org.hibernate.core - 5.2.9.Final | HHH000342: Could not obtain connection to query metadata : Unable to determine Dialect to use [name=, majorVersion=0]; user must register resolver or explicitly set 'hibernate.dialect'
2018-05-25T09:01:23,332 | DEBUG | features-3-thread-1 | PersistenceProviderTracker       | 46 - org.apache.aries.jpa.container - 2.7.0 | Error while creating the Dummy EntityManagerFactory to allow weaving.
org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:271) ~[?:?]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:233) ~[?:?]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210) ~[?:?]
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51) ~[?:?]
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94) ~[?:?]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:242) ~[?:?]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210) ~[?:?]
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352) ~[?:?]
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111) ~[?:?]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:858) ~[?:?]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:885) ~[?:?]
at org.hibernate.osgi.OsgiPersistenceProvider.createContainerEntityManagerFactory(OsgiPersistenceProvider.java:96) ~[?:?]
at org.apache.aries.jpa.container.impl.PersistenceProviderTracker.createAndCloseDummyEMF(PersistenceProviderTracker.java:105) ~[?:?]
at org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:86) ~[?:?]
at org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:44) ~[?:?]
at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941) ~[?:?]
at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870) ~[?:?]
at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256) ~[?:?]
at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183) ~[?:?]
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:318) ~[?:?]
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261) ~[?:?]
at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.trackProvider(PersistenceBundleTracker.java:229) ~[?:?]
at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.findPersistenceUnits(PersistenceBundleTracker.java:213) ~[?:?]
at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:98) ~[?:?]
at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:44) ~[?:?]
at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:469) ~[?:?]
at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:415) ~[?:?]
at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256) ~[?:?]
at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229) ~[?:?]
at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:444) ~[?:?]
at org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915) ~[?:?]
at org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834) ~[?:?]
at org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516) ~[?:?]
at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4579) ~[?:?]
at org.apache.felix.framework.Felix.activateBundle(Felix.java:2231) ~[?:?]
at org.apache.felix.framework.Felix.startBundle(Felix.java:2146) ~[?:?]
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998) ~[?:?]
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:984) ~[?:?]
at org.apache.karaf.features.internal.service.BundleInstallSupportImpl.startBundle(BundleInstallSupportImpl.java:161) ~[?:?]
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1116) ~[?:?]
at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:996) ~[?:?]
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1025) ~[?:?]
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:964) ~[?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]
at java.lang.Thread.run(Thread.java:748) [?:?]
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100) ~[?:?]
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54) ~[?:?]
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:137) ~[?:?]
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) ~[?:?]
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88) ~[?:?]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:259) ~[?:?]
... 46 more


Notice the above exception is logged as DEBUG level, so I think it can be ignored.  Later I see this error:

2018-05-25T09:01:23,354 | ERROR | CM Configuration Updater (ManagedService Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) | configadmin                      | 8 - org.apache.felix.configadmin - 1.8.16 | [org.osgi.service.cm.ManagedService, id=196, bundle=18/mvn:org.enquery.encryptedquery/encryptedquery-responder-data/1.0.0-SNAPSHOT]: Unexpected problem updating configuration org.apache.aries.jpa.responderPersistenUnit
java.lang.IllegalArgumentException: The persistence unit responderPersistenUnit has incomplete configuration and cannot be created. The configuration is{hibernate.format_sql=true, javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider, hibernate.hbm2ddl.auto=none, hibernate.dialect=org.hibernate.dialect.MariaDBDialect, org.apache.karaf.features.configKey=org.apache.aries.jpa.responderPersistenUnit, felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/itests/target/exam/cdf383ba-08b3-4157-bec3-c131857d7108/etc/org.apache.aries.jpa.responderPersistenUnit.cfg, hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA, service.pid=org.apache.aries.jpa.responderPersistenUnit}
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365) ~[?:?]
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183) ~[?:?]
at org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75) ~[?:?]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189) ~[8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
at java.lang.Thread.run(Thread.java:748) [?:?]


Later I see PAX-JDBC configuring the DataSource:


2018-05-25T09:01:24,065 | INFO  | CM Configuration Updater (ManagedService Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) | ServiceTrackerHelper             | 162 - org.ops4j.pax.jdbc.config - 1.3.0 | Obtained service dependency: (&(objectClass=org.osgi.service.jdbc.DataSourceFactory)(osgi.jdbc.driver.name=mariadb))
2018-05-25T09:01:24,065 | INFO  | CM Configuration Updater (ManagedService Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) | DataSourceRegistration           | 162 - org.ops4j.pax.jdbc.config - 1.3.0 | Found DataSourceFactory. Creating DataSource responder
2018-05-25T09:01:24,071 | INFO  | CM Configuration Updater (ManagedService Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) | DataSourceRegistration           | 162 - org.ops4j.pax.jdbc.config - 1.3.0 | Executing pre hook for DataSource responder
2018-05-25T09:01:29,888 | INFO  | CM Configuration Updater (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource]) | DataSourceRegistration           | 162 - org.ops4j.pax.jdbc.config - 1.3.0 | Pre hook finished. Publishing DataSource responder
2018-05-25T09:01:29,890 | INFO  | CM Configuration Updater (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource]) | DataSourceTracker                | 46 - org.apache.aries.jpa.container - 2.7.0 | Found DataSource for responderPersistenUnit osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)
2018-05-25T09:01:29,890 | DEBUG | CM Configuration Updater (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource]) | AriesEntityManagerFactoryBuilder | 46 - org.apache.aries.jpa.container - 2.7.0 | No transaction type set in config, restoring the original value JTA
2018-05-25T09:01:29,890 | INFO  | CM Configuration Updater (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource]) | LogHelper                        | 134 - org.hibernate.core - 5.2.9.Final | HHH000204: Processing PersistenceUnitInfo [
name: responderPersistenUnit
...]
2018-05-25T09:01:29,984 | INFO  | CM Configuration Updater (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource]) | Dialect                          | 134 - org.hibernate.core - 5.2.9.Final | HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect


After this, everything works normally. Looks like the errors I see are later corrected, so it may be just a timing issue.

Best regards,
Alex soto




On May 25, 2018, at 8:01 AM, Paul McCulloch <[hidden email]> wrote:

The dialect can be left out of the pu.xml though. I started down this path, but in the end have just relied on hibernate to select the correct dialect. I deploy the same bundles on H2, Oracle & MSSQL with this approach.


On 25 May 2018 at 12:51, Jean-Baptiste Onofré <[hidden email]> wrote:
Hi Paul,

yes, I remember this discussion, but AFAIR, it's always overriden by the
dialect in the persistence.xml.

Regards
JB

On 25/05/2018 13:00, Paul McCulloch wrote:
> Hibernate usually does a reasonable job of auto detecting the dialect,
> in my experience. If you need to override this then Aries JPA supports
> creating a configuration file /etc/org.apache.aries.jpa.<PU name>.cfg
> where you can override hibernate.dialect. Beware if you have a "-" in
> the PU name as I think fileinstall we try and create a factory config.
>
> I can't recall where I got this info from. It might have been
> here: http://karaf.922171.n3.nabble.com/Dynamic-parameters-in-persistence-xml-td4043602.html
>
> On 25 May 2018 at 06:46, Jean-Baptiste Onofré <[hidden email]
> <mailto:[hidden email]>> wrote:
>
>     Hi Alex,
>
>     the dialect HAS to be in the persistence.xml (it's in the JPA spec).
>
>     AFAIK, Aries JPA doesn't provide a mechanism to provide the dialect
>     externally from the persistence.xml.
>
>     Even the Aries JPA itests define the dialect there:
>
>     https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40
>     <https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40>
>
>     Further more, dialect also depends of the engine you are using
>     (hibernate, openjpa, eclipselink).
>
>     Regards
>     JB
>
>     On 24/05/2018 21:26, Alex Soto wrote:
>     > If I change my persistence.xml to this:
>     >
>     >
>     > <persistence-unit name="responderPersistenUnit" transaction-type="JTA">
>     > <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)</jta-data-source>
>     > <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)</jta-data-source>  
>     >  
>     > </persistence-unit>
>     >
>     > And the configuration entries to:
>     >
>     > <config name="org.apache.aries.jpa.responderPersistenUnit">
>     >  
>     >   javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
>     >     *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver*
>     >     hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>     >     hibernate.show_sql=false
>     >     hibernate.format_sql=true
>     >     hibernate.hbm2ddl.auto=none
>     > </config>
>     >
>     > Then the error Is:
>     >
>     >
>     > java.lang.IllegalArgumentException: Cannot rebind to a different
>     > database driver, as per the JPA service specification
>     > at
>     >
>     org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.processProperties(AriesEntityManagerFactoryBuilder.java:225)
>     > ~[?:?]
>     > at
>     >
>     org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:173) ~[?:?]
>     > at
>     >
>     org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
>     > ~[?:?]
>     > at
>     >
>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>     > ~[8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
>     > at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141)
>     > [8:org.apache.felix.configadmin:1.8.16]
>     > at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109)
>     > [8:org.apache.felix.configadmin:1.8.16]
>     > at java.lang.Thread.run(Thread.java:748) [?:?]
>     >
>     >
>     > If I remove the
>     > line *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver *from the
>     > config file above, then I get the previous error about configuration not
>     > being completed.  What I am trying to do is to not  hard code
>     >  the /hibernate.dialect /inside the bundle, so I can switch to a
>     > different database without having to rebuild.
>     >
>     > Also, my DataSource is already created by PAX JDBC Config and this I
>     > don’t want to change, since I am using PreHook facility there to run
>     > LiquiBase migrations.
>     > Any hints or examples appreciated.
>     >
>     >
>     > Best regards,
>     > Alex soto
>     >
>     >
>     >
>     >
>     >> On May 24, 2018, at 1:41 PM, Alex Soto <[hidden email] <mailto:[hidden email]>
>     >> <mailto:[hidden email] <mailto:[hidden email]>>> wrote:
>     >>
>     >> Hello,  
>     >>
>     >> I am using Aries JPA 2.7.0, I am trying provide the JPA persistence
>     >> configuration using configuration file.  So my persistence.xml.
>     >>
>     >>     <persistence version="2.0"
>     >>     xmlns="http://java.sun.com/xml/ns/persistence
>     <http://java.sun.com/xml/ns/persistence>"
>     >>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
>     <http://www.w3.org/2001/XMLSchema-instance>"
>     >>     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
>     <http://java.sun.com/xml/ns/persistence>
>     >>     http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
>     <http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd>">
>     >>
>     >>     <persistence-unit name="responderPersistenUnit"
>     >>     transaction-type="JTA">
>     >>   
>      <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
>     >>     </persistence-unit>
>     >>     </persistence>
>     >>
>     >>
>     >> I deploy config file as part of my feature:
>     >>
>     >>     <config name="org.apache.aries.jpa.responderPersistenUnit">
>     >>         hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>     >>         hibernate.show_sql=false
>     >>         hibernate.format_sql=true
>     >>         hibernate.hbm2ddl.auto=none
>     >>      
>     >>   
>        jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)
>     >>        
>     >>   
>      non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)  
>     >>      
>     >>     </config>
>     >>
>     >> When I run, the following exception is thrown:
>     >>
>     >>
>     >>     java.lang.IllegalArgumentException: The persistence unit
>     >>     responderPersistenUnit has incomplete configuration and cannot be
>     >>     created. The configuration
>     >>   
>      is{non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder),
>     >>     hibernate.format_sql=true, hibernate.hbm2ddl.auto=none,
>     >>     hibernate.dialect=org.hibernate.dialect.MariaDBDialect,
>     >>   
>      jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder), felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/dist/target/encryptedquery-responder-dist-1.0.0-SNAPSHOT/etc/org.apache.aries.jpa.responderPersistenUnit.cfg,
>     >>   
>      hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA, service.pid=org.apache.aries.jpa.responderPersistenUnit}
>     >>   
>      at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365)
>     >>     ~[?:?]
>     >>   
>      at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183)
>     >>     ~[?:?]
>     >>     at
>     >>   
>      org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
>     >>     ~[?:?]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>     >>     ~[8:org.apache.felix.configadmin:1.8.16]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
>     >>   
>      at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
>     >>   
>      at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
>     >>   
>      at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
>     >>     at java.lang.Thread.run(Thread.java:748) [?:?]
>     >>
>     >>
>     >>
>     >> So Aries JPA is finding the configuration properties I am providing,
>     >> but still missing something.  What else is needed as configuration
>     >> properties? Why is it not complete the persistent unit?
>     >>
>     >>
>     >> Best regards,
>     >> Alex soto
>     >>
>     >>
>     >>
>     >>
>     >
>
>     --
>     --
>     Jean-Baptiste Onofré
>     [hidden email] <mailto:[hidden email]>
>     http://blog.nanthrax.net
>     Talend - http://www.talend.com
>
>

--
--
Jean-Baptiste Onofré
[hidden email]
http://blog.nanthrax.net
Talend - http://www.talend.com



Reply | Threaded
Open this post in threaded view
|

Re: Aries JPA: The persistence unit has incomplete configuration and cannot be created.

Alex Soto
I will give a try to Tim’s suggestion, as it may be safer than what I am doing now (with the errors in the log I can’t feel comfortable) but I do agree there seems to be a gap.  To be clear, the gap (as indicated by Tim), is the inability of using a DataSource registered in JNDI when configuring the Persistence Unit via Configuration Admin, something that is supported when using the persistence.xml file.

Best regards,
Alex soto




On May 25, 2018, at 9:37 AM, Paul McCulloch <[hidden email]> wrote:

That's what I do Alex. I didn't think I needed the non-jta-datasource (& everything seems to work), but this thread has made me think I should go back & re-asses that. 

I'll also look again at the Transaction Control stuff - it was at 0.0.1 when I last looked, so I was nervous about relying on it. It looks like it will fix my hack for MSSQL of having to fake an XA datasource (as Aries JPA transactions don't work with non XA datasources)..

On 25 May 2018 at 14:21, Alex Soto <[hidden email]> wrote:
Hi All,

Thanks for input.  I think I found a sweet spot that seems to work, although I wish somebody from AriesJPA can confirm this is a valid approach.
I removed the Dialect and the other Hibernate specific settings out of my persistence.xml, but I have to keep the data source reference to JNDI:

<persistence-unit name="responderPersistenUnit" transaction-type="JTA">
  <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)</jta-data-source>
  </persistence-unit>

The Pax-exam configuration file org.ops4j.datasource-responder.cfg remains the same:

dataSourceName=responder
user=XXX
password=XXX
databaseName=responder
ops4j.preHook=responderDB

AriesJPA configuration in my feature provides the dialect and the provider:

<config name="org.apache.aries.jpa.responderPersistenUnit">
     javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
     hibernate.dialect=org.hibernate.dialect.MariaDBDialect
     hibernate.show_sql=false
     hibernate.format_sql=true
     hibernate.hbm2ddl.auto=none
  </config>

When I run, first I can see in the log AriesJPA Container:

2018-05-25T09:01:22,580 | DEBUG | features-3-thread-1 | PersistenceBundleTracker         | 46 - org.apache.aries.jpa.container - 2.7.0 | Matching JPA contract for possible persistence bundle encryptedquery-responder-data
2018-05-25T09:01:22,594 | INFO  | features-3-thread-1 | PersistenceBundleTracker         | 46 - org.apache.aries.jpa.container - 2.7.0 | Found persistence unit responderPersistenUnit in bundle encryptedquery-responder-data with provider null.
2018-05-25T09:01:22,596 | INFO  | features-3-thread-1 | PersistenceProviderTracker       | 46 - org.apache.aries.jpa.container - 2.7.0 | Found provider for responderPersistenUnit org.hibernate.jpa.HibernatePersistenceProvider
2018-05-25T09:01:22,618 | INFO  | features-3-thread-1 | LogHelper                        | 134 - org.hibernate.core - 5.2.9.Final | HHH000204: Processing PersistenceUnitInfo [
name: responderPersistenUnit
...]
2018-05-25T09:01:22,688 | INFO  | features-3-thread-1 | Version                          | 134 - org.hibernate.core - 5.2.9.Final | HHH000412: Hibernate Core {5.2.9.Final}
2018-05-25T09:01:22,691 | INFO  | features-3-thread-1 | Environment                      | 134 - org.hibernate.core - 5.2.9.Final | HHH000206: hibernate.properties not found
2018-05-25T09:01:22,750 | INFO  | features-3-thread-1 | Version                          | 133 - org.hibernate.common.hibernate-commons-annotations - 5.0.1.Final | HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
2018-05-25T09:01:23,330 | WARN  | features-3-thread-1 | JdbcEnvironmentInitiator         | 134 - org.hibernate.core - 5.2.9.Final | HHH000342: Could not obtain connection to query metadata : Unable to determine Dialect to use [name=, majorVersion=0]; user must register resolver or explicitly set 'hibernate.dialect'
2018-05-25T09:01:23,332 | DEBUG | features-3-thread-1 | PersistenceProviderTracker       | 46 - org.apache.aries.jpa.container - 2.7.0 | Error while creating the Dummy EntityManagerFactory to allow weaving.
org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:271) ~[?:?]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:233) ~[?:?]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210) ~[?:?]
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51) ~[?:?]
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94) ~[?:?]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:242) ~[?:?]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210) ~[?:?]
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352) ~[?:?]
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111) ~[?:?]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:858) ~[?:?]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:885) ~[?:?]
at org.hibernate.osgi.OsgiPersistenceProvider.createContainerEntityManagerFactory(OsgiPersistenceProvider.java:96) ~[?:?]
at org.apache.aries.jpa.container.impl.PersistenceProviderTracker.createAndCloseDummyEMF(PersistenceProviderTracker.java:105) ~[?:?]
at org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:86) ~[?:?]
at org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:44) ~[?:?]
at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941) ~[?:?]
at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870) ~[?:?]
at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256) ~[?:?]
at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183) ~[?:?]
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:318) ~[?:?]
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261) ~[?:?]
at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.trackProvider(PersistenceBundleTracker.java:229) ~[?:?]
at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.findPersistenceUnits(PersistenceBundleTracker.java:213) ~[?:?]
at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:98) ~[?:?]
at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:44) ~[?:?]
at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:469) ~[?:?]
at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:415) ~[?:?]
at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256) ~[?:?]
at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229) ~[?:?]
at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:444) ~[?:?]
at org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915) ~[?:?]
at org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834) ~[?:?]
at org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516) ~[?:?]
at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4579) ~[?:?]
at org.apache.felix.framework.Felix.activateBundle(Felix.java:2231) ~[?:?]
at org.apache.felix.framework.Felix.startBundle(Felix.java:2146) ~[?:?]
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998) ~[?:?]
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:984) ~[?:?]
at org.apache.karaf.features.internal.service.BundleInstallSupportImpl.startBundle(BundleInstallSupportImpl.java:161) ~[?:?]
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1116) ~[?:?]
at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:996) ~[?:?]
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1025) ~[?:?]
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:964) ~[?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]
at java.lang.Thread.run(Thread.java:748) [?:?]
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100) ~[?:?]
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54) ~[?:?]
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:137) ~[?:?]
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) ~[?:?]
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88) ~[?:?]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:259) ~[?:?]
... 46 more


Notice the above exception is logged as DEBUG level, so I think it can be ignored.  Later I see this error:

2018-05-25T09:01:23,354 | ERROR | CM Configuration Updater (ManagedService Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) | configadmin                      | 8 - org.apache.felix.configadmin - 1.8.16 | [org.osgi.service.cm.ManagedService, id=196, bundle=18/mvn:org.enquery.encryptedquery/encryptedquery-responder-data/1.0.0-SNAPSHOT]: Unexpected problem updating configuration org.apache.aries.jpa.responderPersistenUnit
java.lang.IllegalArgumentException: The persistence unit responderPersistenUnit has incomplete configuration and cannot be created. The configuration is{hibernate.format_sql=true, javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider, hibernate.hbm2ddl.auto=none, hibernate.dialect=org.hibernate.dialect.MariaDBDialect, org.apache.karaf.features.configKey=org.apache.aries.jpa.responderPersistenUnit, felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/itests/target/exam/cdf383ba-08b3-4157-bec3-c131857d7108/etc/org.apache.aries.jpa.responderPersistenUnit.cfg, hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA, service.pid=org.apache.aries.jpa.responderPersistenUnit}
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365) ~[?:?]
at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183) ~[?:?]
at org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75) ~[?:?]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189) ~[8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
at java.lang.Thread.run(Thread.java:748) [?:?]


Later I see PAX-JDBC configuring the DataSource:


2018-05-25T09:01:24,065 | INFO  | CM Configuration Updater (ManagedService Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) | ServiceTrackerHelper             | 162 - org.ops4j.pax.jdbc.config - 1.3.0 | Obtained service dependency: (&(objectClass=org.osgi.service.jdbc.DataSourceFactory)(osgi.jdbc.driver.name=mariadb))
2018-05-25T09:01:24,065 | INFO  | CM Configuration Updater (ManagedService Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) | DataSourceRegistration           | 162 - org.ops4j.pax.jdbc.config - 1.3.0 | Found DataSourceFactory. Creating DataSource responder
2018-05-25T09:01:24,071 | INFO  | CM Configuration Updater (ManagedService Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) | DataSourceRegistration           | 162 - org.ops4j.pax.jdbc.config - 1.3.0 | Executing pre hook for DataSource responder
2018-05-25T09:01:29,888 | INFO  | CM Configuration Updater (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource]) | DataSourceRegistration           | 162 - org.ops4j.pax.jdbc.config - 1.3.0 | Pre hook finished. Publishing DataSource responder
2018-05-25T09:01:29,890 | INFO  | CM Configuration Updater (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource]) | DataSourceTracker                | 46 - org.apache.aries.jpa.container - 2.7.0 | Found DataSource for responderPersistenUnit osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)
2018-05-25T09:01:29,890 | DEBUG | CM Configuration Updater (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource]) | AriesEntityManagerFactoryBuilder | 46 - org.apache.aries.jpa.container - 2.7.0 | No transaction type set in config, restoring the original value JTA
2018-05-25T09:01:29,890 | INFO  | CM Configuration Updater (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource]) | LogHelper                        | 134 - org.hibernate.core - 5.2.9.Final | HHH000204: Processing PersistenceUnitInfo [
name: responderPersistenUnit
...]
2018-05-25T09:01:29,984 | INFO  | CM Configuration Updater (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource]) | Dialect                          | 134 - org.hibernate.core - 5.2.9.Final | HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect


After this, everything works normally. Looks like the errors I see are later corrected, so it may be just a timing issue.

Best regards,
Alex soto




On May 25, 2018, at 8:01 AM, Paul McCulloch <[hidden email]> wrote:

The dialect can be left out of the pu.xml though. I started down this path, but in the end have just relied on hibernate to select the correct dialect. I deploy the same bundles on H2, Oracle & MSSQL with this approach.


On 25 May 2018 at 12:51, Jean-Baptiste Onofré <[hidden email]> wrote:
Hi Paul,

yes, I remember this discussion, but AFAIR, it's always overriden by the
dialect in the persistence.xml.

Regards
JB

On 25/05/2018 13:00, Paul McCulloch wrote:
> Hibernate usually does a reasonable job of auto detecting the dialect,
> in my experience. If you need to override this then Aries JPA supports
> creating a configuration file /etc/org.apache.aries.jpa.<PU name>.cfg
> where you can override hibernate.dialect. Beware if you have a "-" in
> the PU name as I think fileinstall we try and create a factory config.
>
> I can't recall where I got this info from. It might have been
> here: http://karaf.922171.n3.nabble.com/Dynamic-parameters-in-persistence-xml-td4043602.html
>
> On 25 May 2018 at 06:46, Jean-Baptiste Onofré <[hidden email]
> <mailto:[hidden email]>> wrote:
>
>     Hi Alex,
>
>     the dialect HAS to be in the persistence.xml (it's in the JPA spec).
>
>     AFAIK, Aries JPA doesn't provide a mechanism to provide the dialect
>     externally from the persistence.xml.
>
>     Even the Aries JPA itests define the dialect there:
>
>     https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40
>     <https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40>
>
>     Further more, dialect also depends of the engine you are using
>     (hibernate, openjpa, eclipselink).
>
>     Regards
>     JB
>
>     On 24/05/2018 21:26, Alex Soto wrote:
>     > If I change my persistence.xml to this:
>     >
>     >
>     > <persistence-unit name="responderPersistenUnit" transaction-type="JTA">
>     > <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)</jta-data-source>
>     > <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)</jta-data-source>  
>     >  
>     > </persistence-unit>
>     >
>     > And the configuration entries to:
>     >
>     > <config name="org.apache.aries.jpa.responderPersistenUnit">
>     >  
>     >   javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
>     >     *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver*
>     >     hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>     >     hibernate.show_sql=false
>     >     hibernate.format_sql=true
>     >     hibernate.hbm2ddl.auto=none
>     > </config>
>     >
>     > Then the error Is:
>     >
>     >
>     > java.lang.IllegalArgumentException: Cannot rebind to a different
>     > database driver, as per the JPA service specification
>     > at
>     >
>     org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.processProperties(AriesEntityManagerFactoryBuilder.java:225)
>     > ~[?:?]
>     > at
>     >
>     org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:173) ~[?:?]
>     > at
>     >
>     org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
>     > ~[?:?]
>     > at
>     >
>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>     > ~[8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
>     > at
>     >
>     org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
>     > at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141)
>     > [8:org.apache.felix.configadmin:1.8.16]
>     > at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109)
>     > [8:org.apache.felix.configadmin:1.8.16]
>     > at java.lang.Thread.run(Thread.java:748) [?:?]
>     >
>     >
>     > If I remove the
>     > line *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver *from the
>     > config file above, then I get the previous error about configuration not
>     > being completed.  What I am trying to do is to not  hard code
>     >  the /hibernate.dialect /inside the bundle, so I can switch to a
>     > different database without having to rebuild.
>     >
>     > Also, my DataSource is already created by PAX JDBC Config and this I
>     > don’t want to change, since I am using PreHook facility there to run
>     > LiquiBase migrations.
>     > Any hints or examples appreciated.
>     >
>     >
>     > Best regards,
>     > Alex soto
>     >
>     >
>     >
>     >
>     >> On May 24, 2018, at 1:41 PM, Alex Soto <[hidden email] <mailto:[hidden email]>
>     >> <mailto:[hidden email] <mailto:[hidden email]>>> wrote:
>     >>
>     >> Hello,  
>     >>
>     >> I am using Aries JPA 2.7.0, I am trying provide the JPA persistence
>     >> configuration using configuration file.  So my persistence.xml.
>     >>
>     >>     <persistence version="2.0"
>     >>     xmlns="http://java.sun.com/xml/ns/persistence
>     <http://java.sun.com/xml/ns/persistence>"
>     >>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
>     <http://www.w3.org/2001/XMLSchema-instance>"
>     >>     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
>     <http://java.sun.com/xml/ns/persistence>
>     >>     http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
>     <http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd>">
>     >>
>     >>     <persistence-unit name="responderPersistenUnit"
>     >>     transaction-type="JTA">
>     >>   
>      <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
>     >>     </persistence-unit>
>     >>     </persistence>
>     >>
>     >>
>     >> I deploy config file as part of my feature:
>     >>
>     >>     <config name="org.apache.aries.jpa.responderPersistenUnit">
>     >>         hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>     >>         hibernate.show_sql=false
>     >>         hibernate.format_sql=true
>     >>         hibernate.hbm2ddl.auto=none
>     >>      
>     >>   
>        jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)
>     >>        
>     >>   
>      non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder)  
>     >>      
>     >>     </config>
>     >>
>     >> When I run, the following exception is thrown:
>     >>
>     >>
>     >>     java.lang.IllegalArgumentException: The persistence unit
>     >>     responderPersistenUnit has incomplete configuration and cannot be
>     >>     created. The configuration
>     >>   
>      is{non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder),
>     >>     hibernate.format_sql=true, hibernate.hbm2ddl.auto=none,
>     >>     hibernate.dialect=org.hibernate.dialect.MariaDBDialect,
>     >>   
>      jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>     <http://osgi.jndi.service.name>=responder), felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/dist/target/encryptedquery-responder-dist-1.0.0-SNAPSHOT/etc/org.apache.aries.jpa.responderPersistenUnit.cfg,
>     >>   
>      hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA, service.pid=org.apache.aries.jpa.responderPersistenUnit}
>     >>   
>      at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365)
>     >>     ~[?:?]
>     >>   
>      at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183)
>     >>     ~[?:?]
>     >>     at
>     >>   
>      org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
>     >>     ~[?:?]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>     >>     ~[8:org.apache.felix.configadmin:1.8.16]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
>     >>   
>      at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
>     >>   
>      at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
>     >>   
>      at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
>     >>     at
>     >>   
>      org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
>     >>     at java.lang.Thread.run(Thread.java:748) [?:?]
>     >>
>     >>
>     >>
>     >> So Aries JPA is finding the configuration properties I am providing,
>     >> but still missing something.  What else is needed as configuration
>     >> properties? Why is it not complete the persistent unit?
>     >>
>     >>
>     >> Best regards,
>     >> Alex soto
>     >>
>     >>
>     >>
>     >>
>     >
>
>     --
>     --
>     Jean-Baptiste Onofré
>     [hidden email] <mailto:[hidden email]>
>     http://blog.nanthrax.net
>     Talend - http://www.talend.com
>
>

--
--
Jean-Baptiste Onofré
[hidden email]
http://blog.nanthrax.net
Talend - http://www.talend.com




Reply | Threaded
Open this post in threaded view
|

Re: Aries JPA: The persistence unit has incomplete configuration and cannot be created.

jbonofre
Hi Alex,

I think it's better to use cfg or persistence.xml, one or the other, not
a mix of both.

I'm using both in the samples, but I don't mix both in the same sample.

Regards
JB

On 25/05/2018 16:00, Alex Soto wrote:

> I will give a try to Tim’s suggestion, as it may be safer than what I am
> doing now (with the errors in the log I can’t feel comfortable) but I do
> agree there seems to be a gap.  To be clear, the gap (as indicated by
> Tim), is the inability of using a DataSource registered in JNDI when
> configuring the Persistence Unit via Configuration Admin, something that
> is supported when using the persistence.xml file.
>
> Best regards,
> Alex soto
>
>
>
>
>> On May 25, 2018, at 9:37 AM, Paul McCulloch <[hidden email]
>> <mailto:[hidden email]>> wrote:
>>
>> That's what I do Alex. I didn't think I needed the non-jta-datasource
>> (& everything seems to work), but this thread has made me think I
>> should go back & re-asses that. 
>>
>> I'll also look again at the Transaction Control stuff - it was at
>> 0.0.1 when I last looked, so I was nervous about relying on it. It
>> looks like it will fix my hack for MSSQL of having to fake an XA
>> datasource (as Aries JPA transactions don't work with non XA
>> datasources)..
>>
>> On 25 May 2018 at 14:21, Alex Soto <[hidden email]
>> <mailto:[hidden email]>> wrote:
>>
>>     Hi All,
>>
>>     Thanks for input.  I think I found a sweet spot that seems to
>>     work, although I wish somebody from AriesJPA can confirm this is a
>>     valid approach.
>>     I removed the Dialect and the other Hibernate specific settings
>>     out of my persistence.xml, but I have to keep the data source
>>     reference to JNDI:
>>
>>     <persistence-unit name="responderPersistenUnit" transaction-type="JTA">
>>      <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>>     <http://osgi.jndi.service.name/>=responder)</jta-data-source>
>>      </persistence-unit>
>>
>>     The Pax-exam configuration file
>>     /org.ops4j.datasource-responder.cfg/ remains the same:
>>
>>         osgi.jdbc.driver.name <http://osgi.jdbc.driver.name/> = mariadb
>>         dataSourceName=responder
>>         url
>>         = jdbc:mariadb://localhost:3306/responder?characterEncoding=UTF-8&useServerPrepStmts=true
>>         user=XXX
>>         password=XXX
>>         databaseName=responder
>>         ops4j.preHook=responderDB
>>
>>
>>     AriesJPA configuration in my feature provides the dialect and the
>>     provider:
>>
>>     <config name="org.apache.aries.jpa.responderPersistenUnit">
>>      
>>       javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
>>         hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>>         hibernate.show_sql=false
>>         hibernate.format_sql=true
>>         hibernate.hbm2ddl.auto=none
>>      </config>
>>
>>     When I run, first I can see in the log AriesJPA Container:
>>
>>     2018-05-25T09:01:22,580 | DEBUG | features-3-thread-1 |
>>     PersistenceBundleTracker         | 46 -
>>     org.apache.aries.jpa.container - 2.7.0 | Matching JPA contract for
>>     possible persistence bundle encryptedquery-responder-data
>>     2018-05-25T09:01:22,594 | INFO  | features-3-thread-1 |
>>     PersistenceBundleTracker         | 46 -
>>     org.apache.aries.jpa.container - 2.7.0 | Found persistence unit
>>     responderPersistenUnit in bundle encryptedquery-responder-data
>>     with provider null.
>>     2018-05-25T09:01:22,596 | INFO  | features-3-thread-1 |
>>     PersistenceProviderTracker       | 46 -
>>     org.apache.aries.jpa.container - 2.7.0 | Found provider for
>>     responderPersistenUnit org.hibernate.jpa.HibernatePersistenceProvider
>>     2018-05-25T09:01:22,618 | INFO  | features-3-thread-1 | LogHelper
>>                            | 134 - org.hibernate.core - 5.2.9.Final |
>>     HHH000204: Processing PersistenceUnitInfo [
>>     name: responderPersistenUnit
>>     ...]
>>     2018-05-25T09:01:22,688 | INFO  | features-3-thread-1 | Version  
>>                            | 134 - org.hibernate.core - 5.2.9.Final |
>>     HHH000412: Hibernate Core {5.2.9.Final}
>>     2018-05-25T09:01:22,691 | INFO  | features-3-thread-1 |
>>     Environment                      | 134 - org.hibernate.core -
>>     5.2.9.Final | HHH000206: hibernate.properties not found
>>     2018-05-25T09:01:22,750 | INFO  | features-3-thread-1 | Version  
>>                            | 133 -
>>     org.hibernate.common.hibernate-commons-annotations - 5.0.1.Final |
>>     HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
>>     2018-05-25T09:01:23,330 | WARN  | features-3-thread-1 |
>>     JdbcEnvironmentInitiator         | 134 - org.hibernate.core -
>>     5.2.9.Final | HHH000342: Could not obtain connection to query
>>     metadata : Unable to determine Dialect to use [name=,
>>     majorVersion=0]; user must register resolver or explicitly set
>>     'hibernate.dialect'
>>     2018-05-25T09:01:23,332 *| DEBUG |* features-3-thread-1 |
>>     PersistenceProviderTracker       | 46 -
>>     org.apache.aries.jpa.container - 2.7.0 | *Error while creating the
>>     Dummy EntityManagerFactory to allow weaving*.
>>     org.hibernate.service.spi.ServiceException: Unable to create
>>     requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
>>     at
>>     org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:271)
>>     ~[?:?]
>>     at
>>     org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:233)
>>     ~[?:?]
>>     at
>>     org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
>>     ~[?:?]
>>     at
>>     org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
>>     ~[?:?]
>>     at
>>     org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
>>     ~[?:?]
>>     at
>>     org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:242)
>>     ~[?:?]
>>     at
>>     org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
>>     ~[?:?]
>>     at
>>     org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)
>>     ~[?:?]
>>     at
>>     org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)
>>     ~[?:?]
>>     at
>>     org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:858)
>>     ~[?:?]
>>     at
>>     org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:885)
>>     ~[?:?]
>>     at
>>     org.hibernate.osgi.OsgiPersistenceProvider.createContainerEntityManagerFactory(OsgiPersistenceProvider.java:96)
>>     ~[?:?]
>>     at
>>     org.apache.aries.jpa.container.impl.PersistenceProviderTracker.createAndCloseDummyEMF(PersistenceProviderTracker.java:105)
>>     ~[?:?]
>>     at
>>     org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:86)
>>     ~[?:?]
>>     at
>>     org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:44)
>>     ~[?:?]
>>     at
>>     org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)
>>     ~[?:?]
>>     at
>>     org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870)
>>     ~[?:?]
>>     at
>>     org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
>>     ~[?:?]
>>     at
>>     org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
>>     ~[?:?]
>>     at
>>     org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:318)
>>     ~[?:?]
>>     at
>>     org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)
>>     ~[?:?]
>>     at
>>     org.apache.aries.jpa.container.impl.PersistenceBundleTracker.trackProvider(PersistenceBundleTracker.java:229)
>>     ~[?:?]
>>     at
>>     org.apache.aries.jpa.container.impl.PersistenceBundleTracker.findPersistenceUnits(PersistenceBundleTracker.java:213)
>>     ~[?:?]
>>     at
>>     org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:98)
>>     ~[?:?]
>>     at
>>     org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:44)
>>     ~[?:?]
>>     at
>>     org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:469)
>>     ~[?:?]
>>     at
>>     org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:415)
>>     ~[?:?]
>>     at
>>     org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
>>     ~[?:?]
>>     at
>>     org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
>>     ~[?:?]
>>     at
>>     org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:444)
>>     ~[?:?]
>>     at
>>     org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915)
>>     ~[?:?]
>>     at
>>     org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834)
>>     ~[?:?]
>>     at
>>     org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516)
>>     ~[?:?]
>>     at
>>     org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4579)
>>     ~[?:?]
>>     at
>>     org.apache.felix.framework.Felix.activateBundle(Felix.java:2231)
>>     ~[?:?]
>>     at org.apache.felix.framework.Felix.startBundle(Felix.java:2146)
>>     ~[?:?]
>>     at
>>     org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)
>>     ~[?:?]
>>     at
>>     org.apache.felix.framework.BundleImpl.start(BundleImpl.java:984)
>>     ~[?:?]
>>     at
>>     org.apache.karaf.features.internal.service.BundleInstallSupportImpl.startBundle(BundleInstallSupportImpl.java:161)
>>     ~[?:?]
>>     at
>>     org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1116)
>>     ~[?:?]
>>     at
>>     org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:996)
>>     ~[?:?]
>>     at
>>     org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1025)
>>     ~[?:?]
>>     at
>>     org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:964)
>>     ~[?:?]
>>     at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
>>     at
>>     java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>>     [?:?]
>>     at
>>     java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>>     [?:?]
>>     at java.lang.Thread.run(Thread.java:748) [?:?]
>>     Caused by: org.hibernate.HibernateException: Access to
>>     DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
>>     at
>>     org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100)
>>     ~[?:?]
>>     at
>>     org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54)
>>     ~[?:?]
>>     at
>>     org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:137)
>>     ~[?:?]
>>     at
>>     org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
>>     ~[?:?]
>>     at
>>     org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88)
>>     ~[?:?]
>>     at
>>     org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:259)
>>     ~[?:?]
>>     ... 46 more
>>
>>
>>     Notice the above exception is logged as DEBUG level, so I think it
>>     can be ignored.  Later I see this error:
>>
>>     2018-05-25T09:01:23,354 | ERROR | CM Configuration Updater
>>     (ManagedService
>>     Update: pid=[org.apache.aries.jpa.responderPersistenUnit])
>>     | configadmin                      | 8 -
>>     org.apache.felix.configadmin - 1.8.16 | [org.osgi.service.cm
>>     <http://org.osgi.service.cm/>.ManagedService, id=196,
>>     bundle=18/mvn:org.enquery.encryptedquery/encryptedquery-responder-data/1.0.0-SNAPSHOT]:
>>     Unexpected problem updating configuration
>>     org.apache.aries.jpa.responderPersistenUnit
>>     java.lang.IllegalArgumentException: *The persistence unit
>>     responderPersistenUnit has incomplete configuration and cannot
>>     be created.* The configuration
>>     is{hibernate.format_sql=true, javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider,
>>     hibernate.hbm2ddl.auto=none, hibernate.dialect=org.hibernate.dialect.MariaDBDialect, org.apache.karaf.features.configKey=org.apache.aries.jpa.responderPersistenUnit, felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/itests/target/exam/cdf383ba-08b3-4157-bec3-c131857d7108/etc/org.apache.aries.jpa.responderPersistenUnit.cfg,
>>     hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA,
>>     service.pid=org.apache.aries.jpa.responderPersistenUnit}
>>     at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365)
>>     ~[?:?]
>>     at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183)
>>     ~[?:?]
>>     at
>>     org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
>>     ~[?:?]
>>     at
>>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>>     ~[8:org.apache.felix.configadmin:1.8.16]
>>     at
>>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
>>     at
>>     org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
>>     at
>>     org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
>>     at
>>     org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
>>     at
>>     org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141)
>>     [8:org.apache.felix.configadmin:1.8.16]
>>     at
>>     org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109)
>>     [8:org.apache.felix.configadmin:1.8.16]
>>     at java.lang.Thread.run(Thread.java:748) [?:?]
>>
>>
>>     Later I see PAX-JDBC configuring the DataSource:
>>
>>
>>     2018-05-25T09:01:24,065 | INFO  | CM Configuration Updater
>>     (ManagedService
>>     Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) |
>>     ServiceTrackerHelper             | 162 - org.ops4j.pax.jdbc.config
>>     - 1.3.0 | Obtained service dependency:
>>     (&(objectClass=org.osgi.service.jdbc.DataSourceFactory)(osgi.jdbc.driver.name
>>     <http://osgi.jdbc.driver.name/>=mariadb))
>>     2018-05-25T09:01:24,065 | INFO  | CM Configuration Updater
>>     (ManagedService
>>     Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) |
>>     DataSourceRegistration           | 162 - org.ops4j.pax.jdbc.config
>>     - 1.3.0 | *Found DataSourceFactory. Creating DataSource responder*
>>     2018-05-25T09:01:24,071 | INFO  | CM Configuration Updater
>>     (ManagedService
>>     Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) |
>>     DataSourceRegistration           | 162 - org.ops4j.pax.jdbc.config
>>     - 1.3.0 | Executing pre hook for DataSource responder
>>     2018-05-25T09:01:29,888 | INFO  | CM Configuration Updater
>>     (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
>>     | DataSourceRegistration           | 162 -
>>     org.ops4j.pax.jdbc.config - 1.3.0 | *Pre hook finished. Publishing
>>     DataSource responder*
>>     2018-05-25T09:01:29,890 | INFO  | CM Configuration Updater
>>     (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
>>     | DataSourceTracker                | 46 -
>>     org.apache.aries.jpa.container - 2.7.0 | *Found DataSource for
>>     responderPersistenUnit
>>     osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>>     <http://osgi.jndi.service.name/>=responder)*
>>     2018-05-25T09:01:29,890 | DEBUG | CM Configuration Updater
>>     (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
>>     | AriesEntityManagerFactoryBuilder | 46 -
>>     org.apache.aries.jpa.container - 2.7.0 | No transaction type set
>>     in config, restoring the original value JTA
>>     2018-05-25T09:01:29,890 | INFO  | CM Configuration Updater
>>     (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
>>     | LogHelper                        | 134 - org.hibernate.core -
>>     5.2.9.Final | HHH000204: Processing PersistenceUnitInfo [
>>     name: responderPersistenUnit
>>     ...]
>>     2018-05-25T09:01:29,984 | INFO  | CM Configuration Updater
>>     (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
>>     | Dialect                          | 134 - org.hibernate.core -
>>     5.2.9.Final | HHH000400: *Using dialect:
>>     org.hibernate.dialect.MySQL5Dialect*
>>
>>
>>     After this, everything works normally. Looks like the errors I see
>>     are later corrected, so it may be just a timing issue.
>>
>>     Best regards,
>>     Alex soto
>>
>>
>>
>>
>>>     On May 25, 2018, at 8:01 AM, Paul McCulloch
>>>     <[hidden email] <mailto:[hidden email]>> wrote:
>>>
>>>     The dialect can be left out of the pu.xml though. I started down
>>>     this path, but in the end have just relied on hibernate to select
>>>     the correct dialect. I deploy the same bundles on H2, Oracle &
>>>     MSSQL with this approach.
>>>
>>>
>>>     On 25 May 2018 at 12:51, Jean-Baptiste Onofré <[hidden email]
>>>     <mailto:[hidden email]>> wrote:
>>>
>>>         Hi Paul,
>>>
>>>         yes, I remember this discussion, but AFAIR, it's always
>>>         overriden by the
>>>         dialect in the persistence.xml.
>>>
>>>         Regards
>>>         JB
>>>
>>>         On 25/05/2018 13:00, Paul McCulloch wrote:
>>>         > Hibernate usually does a reasonable job of auto detecting the dialect,
>>>         > in my experience. If you need to override this then Aries JPA supports
>>>         > creating a configuration file /etc/org.apache.aries.jpa.<PU name>.cfg
>>>         > where you can override hibernate.dialect. Beware if you have a "-" in
>>>         > the PU name as I think fileinstall we try and create a factory config.
>>>         >
>>>         > I can't recall where I got this info from. It might have been
>>>         > here: http://karaf.922171.n3.nabble.com/Dynamic-parameters-in-persistence-xml-td4043602.html
>>>         <http://karaf.922171.n3.nabble.com/Dynamic-parameters-in-persistence-xml-td4043602.html>
>>>         >
>>>         > On 25 May 2018 at 06:46, Jean-Baptiste Onofré <[hidden email] <mailto:[hidden email]>
>>>         > <mailto:[hidden email] <mailto:[hidden email]>>> wrote:
>>>         >
>>>         >     Hi Alex,
>>>         >
>>>         >     the dialect HAS to be in the persistence.xml (it's in the JPA spec).
>>>         >
>>>         >     AFAIK, Aries JPA doesn't provide a mechanism to provide the dialect
>>>         >     externally from the persistence.xml.
>>>         >
>>>         >     Even the Aries JPA itests define the dialect there:
>>>         >
>>>         >     https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40
>>>         <https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40>
>>>         >     <https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40
>>>         <https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40>>
>>>         >
>>>         >     Further more, dialect also depends of the engine you are using
>>>         >     (hibernate, openjpa, eclipselink).
>>>         >
>>>         >     Regards
>>>         >     JB
>>>         >
>>>         >     On 24/05/2018 21:26, Alex Soto wrote:
>>>         >     > If I change my persistence.xml to this:
>>>         >     >
>>>         >     >
>>>         >     > <persistence-unit name="responderPersistenUnit" transaction-type="JTA">
>>>         >     > <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>>>         <http://osgi.jndi.service.name/>
>>>         >     <http://osgi.jndi.service.name
>>>         <http://osgi.jndi.service.name/>>=responder)</jta-data-source>
>>>         >     >
>>>         <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>>>         <http://osgi.jndi.service.name/>
>>>         >     <http://osgi.jndi.service.name
>>>         <http://osgi.jndi.service.name/>>=responder)</jta-data-source>  
>>>         >     >  
>>>         >     > </persistence-unit>
>>>         >     >
>>>         >     > And the configuration entries to:
>>>         >     >
>>>         >     >
>>>         <config name="org.apache.aries.jpa.responderPersistenUnit">
>>>         >     >  
>>>         >     >
>>>           javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
>>>         >     >  
>>>           *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver*
>>>         >     >  
>>>           hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>>>         >     >     hibernate.show_sql=false
>>>         >     >     hibernate.format_sql=true
>>>         >     >     hibernate.hbm2ddl.auto=none
>>>         >     > </config>
>>>         >     >
>>>         >     > Then the error Is:
>>>         >     >
>>>         >     >
>>>         >     > java.lang.IllegalArgumentException: Cannot rebind to
>>>         a different
>>>         >     > database driver, as per the JPA service specification
>>>         >     > at
>>>         >     >
>>>         >   
>>>          org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.processProperties(AriesEntityManagerFactoryBuilder.java:225)
>>>         >     > ~[?:?]
>>>         >     > at
>>>         >     >
>>>         >   
>>>          org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:173) ~[?:?]
>>>         >     > at
>>>         >     >
>>>         >   
>>>          org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
>>>         >     > ~[?:?]
>>>         >     > at
>>>         >     >
>>>         >   
>>>          org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>>>         >     > ~[8:org.apache.felix.configadmin:1.8.16]
>>>         >     > at
>>>         >     >
>>>         >   
>>>          org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
>>>         >     > at
>>>         >     >
>>>         >   
>>>          org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
>>>         >     > at
>>>         >     >
>>>         >   
>>>          org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
>>>         >     > at
>>>         >     >
>>>         >   
>>>          org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
>>>         >     > at
>>>         org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141)
>>>         >     > [8:org.apache.felix.configadmin:1.8.16]
>>>         >     > at
>>>         org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109)
>>>         >     > [8:org.apache.felix.configadmin:1.8.16]
>>>         >     > at java.lang.Thread.run(Thread.java:748) [?:?]
>>>         >     >
>>>         >     >
>>>         >     > If I remove the
>>>         >     >
>>>         line *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver
>>>         *from the
>>>         >     > config file above, then I get the previous error
>>>         about configuration not
>>>         >     > being completed.  What I am trying to do is to not
>>>          hard code
>>>         >     >  the /hibernate.dialect /inside the bundle, so I can
>>>         switch to a
>>>         >     > different database without having to rebuild.
>>>         >     >
>>>         >     > Also, my DataSource is already created by PAX JDBC
>>>         Config and this I
>>>         >     > don’t want to change, since I am using PreHook
>>>         facility there to run
>>>         >     > LiquiBase migrations.
>>>         >     > Any hints or examples appreciated.
>>>         >     >
>>>         >     >
>>>         >     > Best regards,
>>>         >     > Alex soto
>>>         >     >
>>>         >     >
>>>         >     >
>>>         >     >
>>>         >     >> On May 24, 2018, at 1:41 PM, Alex Soto
>>>         <[hidden email] <mailto:[hidden email]>
>>>         <mailto:[hidden email] <mailto:[hidden email]>>
>>>         >     >> <mailto:[hidden email] <mailto:[hidden email]>
>>>         <mailto:[hidden email]
>>>         <mailto:[hidden email]>>>> wrote:
>>>         >     >>
>>>         >     >> Hello,  
>>>         >     >>
>>>         >     >> I am using Aries JPA 2.7.0, I am trying provide the JPA persistence
>>>         >     >> configuration using configuration file.  So my persistence.xml.
>>>         >     >>
>>>         >     >>     <persistence version="2.0"
>>>         >     >>     xmlns="http://java.sun.com/xml/ns/persistence
>>>         <http://java.sun.com/xml/ns/persistence>
>>>         >     <http://java.sun.com/xml/ns/persistence
>>>         <http://java.sun.com/xml/ns/persistence>>"
>>>         >     >>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
>>>         <http://www.w3.org/2001/XMLSchema-instance>
>>>         >     <http://www.w3.org/2001/XMLSchema-instance
>>>         <http://www.w3.org/2001/XMLSchema-instance>>"
>>>         >     >>     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
>>>         <http://java.sun.com/xml/ns/persistence>
>>>         >     <http://java.sun.com/xml/ns/persistence
>>>         <http://java.sun.com/xml/ns/persistence>>
>>>         >     >>   
>>>          http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
>>>         <http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd>
>>>         >     <http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
>>>         <http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd>>">
>>>         >     >>
>>>         >     >>     <persistence-unit name="responderPersistenUnit"
>>>         >     >>     transaction-type="JTA">
>>>         >     >>   
>>>         >      <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
>>>         >     >>     </persistence-unit>
>>>         >     >>     </persistence>
>>>         >     >>
>>>         >     >>
>>>         >     >> I deploy config file as part of my feature:
>>>         >     >>
>>>         >     >>     <config name="org.apache.aries.jpa.responderPersistenUnit">
>>>         >     >>         hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>>>         >     >>         hibernate.show_sql=false
>>>         >     >>         hibernate.format_sql=true
>>>         >     >>         hibernate.hbm2ddl.auto=none
>>>         >     >>      
>>>         >     >>   
>>>         >        jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>>>         <http://osgi.jndi.service.name/>
>>>         >     <http://osgi.jndi.service.name
>>>         <http://osgi.jndi.service.name/>>=responder)
>>>         >     >>        
>>>         >     >>   
>>>         >   
>>>           non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>>>         <http://osgi.jndi.service.name/>
>>>         >     <http://osgi.jndi.service.name
>>>         <http://osgi.jndi.service.name/>>=responder)  
>>>         >     >>      
>>>         >     >>     </config>
>>>         >     >>
>>>         >     >> When I run, the following exception is thrown:
>>>         >     >>
>>>         >     >>
>>>         >     >>     java.lang.IllegalArgumentException: The persistence unit
>>>         >     >>     responderPersistenUnit has incomplete configuration and cannot be
>>>         >     >>     created. The configuration
>>>         >     >>   
>>>         >      is{non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>>>         <http://osgi.jndi.service.name/>
>>>         >     <http://osgi.jndi.service.name
>>>         <http://osgi.jndi.service.name/>>=responder),
>>>         >     >>   
>>>          hibernate.format_sql=true, hibernate.hbm2ddl.auto=none,
>>>         >     >>   
>>>          hibernate.dialect=org.hibernate.dialect.MariaDBDialect,
>>>         >     >>   
>>>         >   
>>>           jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>>>         <http://osgi.jndi.service.name/>
>>>         >     <http://osgi.jndi.service.name
>>>         <http://osgi.jndi.service.name/>>=responder), felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/dist/target/encryptedquery-responder-dist-1.0.0-SNAPSHOT/etc/org.apache.aries.jpa.responderPersistenUnit.cfg,
>>>         >     >>   
>>>         >   
>>>           hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA, service.pid=org.apache.aries.jpa.responderPersistenUnit}
>>>         >     >>   
>>>         >   
>>>           at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365)
>>>         >     >>     ~[?:?]
>>>         >     >>   
>>>         >   
>>>           at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183)
>>>         >     >>     ~[?:?]
>>>         >     >>     at
>>>         >     >>   
>>>         >   
>>>           org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
>>>         >     >>     ~[?:?]
>>>         >     >>     at
>>>         >     >>   
>>>         >   
>>>           org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>>>         >     >>     ~[8:org.apache.felix.configadmin:1.8.16]
>>>         >     >>     at
>>>         >     >>   
>>>         >   
>>>           org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
>>>         >     >>   
>>>         >   
>>>           at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
>>>         >     >>   
>>>         >   
>>>           at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
>>>         >     >>   
>>>         >   
>>>           at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
>>>         >     >>     at
>>>         >     >>   
>>>         >   
>>>           org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
>>>         >     >>     at
>>>         >     >>   
>>>         >   
>>>           org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
>>>         >     >>     at java.lang.Thread.run(Thread.java:748) [?:?]
>>>         >     >>
>>>         >     >>
>>>         >     >>
>>>         >     >> So Aries JPA is finding the configuration properties
>>>         I am providing,
>>>         >     >> but still missing something.  What else is needed as
>>>         configuration
>>>         >     >> properties? Why is it not complete the persistent unit?
>>>         >     >>
>>>         >     >>
>>>         >     >> Best regards,
>>>         >     >> Alex soto
>>>         >     >>
>>>         >     >>
>>>         >     >>
>>>         >     >>
>>>         >     >
>>>         >
>>>         >     --
>>>         >     --
>>>         >     Jean-Baptiste Onofré
>>>         >     [hidden email] <mailto:[hidden email]>
>>>         <mailto:[hidden email] <mailto:[hidden email]>>
>>>         >     http://blog.nanthrax.net <http://blog.nanthrax.net/>
>>>         >     Talend - http://www.talend.com <http://www.talend.com/>
>>>         >
>>>         >
>>>
>>>         --
>>>         --
>>>         Jean-Baptiste Onofré
>>>         [hidden email] <mailto:[hidden email]>
>>>         http://blog.nanthrax.net <http://blog.nanthrax.net/>
>>>         Talend - http://www.talend.com <http://www.talend.com/>
>>>
>>>
>>
>>
>

--
--
Jean-Baptiste Onofré
[hidden email]
http://blog.nanthrax.net
Talend - http://www.talend.com
Reply | Threaded
Open this post in threaded view
|

Re: Aries JPA: The persistence unit has incomplete configuration and cannot be created.

Tim Ward-2
Alex,

As you’ve noticed in the log there are some “odd things” going on. What you’ve managed to do is to prod things in the correct order to reach a state that is not normally accessible!

So what’s happening is:

  1. Error while creating the Dummy EntityManagerFactory to allow weaving. - This always happens for Hibernate can safely be ignored. Part of the JPA specification involves supporting load-time weaving of the entity types. This forces the Aries JPA container to eagerly create the EMF as early as possible to avoid “missing” the class load. This in turn means that Aries JPA can’t wait to locate the DataSource, and instead uses a “dummy”, which gets us far enough through the process to get a load-time weaver. Hibernate then explodes because it tries to do real things with the dummy datasource.
  2. The persistence unit responderPersistenUnit has incomplete configuration and cannot be created. This is your persistence unit configuration being injected into Aries JPA - it fails because it is using a mixture of persistence xml and configuration, and the configuration properties therefore have no database connection details/
  3. Found DataSource for responderPersistenUnit osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)Once PAX-JDBC registers the DataSource service it is located by Aries JPA and used to create the EMF

The critical point here is that Entry 2 happens before Entry 3, but Aries JPA remembers the configuration that was injected into it in Entry 2. Therefore once the DataSource is found Aries JPA still has the configuration details injected from before. If you reversed the order of 2 and 3 then it wouldn’t work.

As Configuration Admin is asynchronous in its delivery of Configurations it can be pretty unreliable to depend on this ordering, although you could probably contrive a way of activating features to encourage it to happen this way all the time. Programmatic assembly is probably your friend here. 

Best Regards,

Tim


On 25 May 2018, at 17:09, Jean-Baptiste Onofré <[hidden email]> wrote:

Hi Alex,

I think it's better to use cfg or persistence.xml, one or the other, not
a mix of both.

I'm using both in the samples, but I don't mix both in the same sample.

Regards
JB

On 25/05/2018 16:00, Alex Soto wrote:
I will give a try to Tim’s suggestion, as it may be safer than what I am
doing now (with the errors in the log I can’t feel comfortable) but I do
agree there seems to be a gap.  To be clear, the gap (as indicated by
Tim), is the inability of using a DataSource registered in JNDI when
configuring the Persistence Unit via Configuration Admin, something that
is supported when using the persistence.xml file.

Best regards,
Alex soto




On May 25, 2018, at 9:37 AM, Paul McCulloch <[hidden email]
<[hidden email]>> wrote:

That's what I do Alex. I didn't think I needed the non-jta-datasource
(& everything seems to work), but this thread has made me think I
should go back & re-asses that. 

I'll also look again at the Transaction Control stuff - it was at
0.0.1 when I last looked, so I was nervous about relying on it. It
looks like it will fix my hack for MSSQL of having to fake an XA
datasource (as Aries JPA transactions don't work with non XA
datasources)..

On 25 May 2018 at 14:21, Alex Soto <[hidden email]
<[hidden email]>> wrote:

   Hi All,

   Thanks for input.  I think I found a sweet spot that seems to
   work, although I wish somebody from AriesJPA can confirm this is a
   valid approach.
   I removed the Dialect and the other Hibernate specific settings
   out of my persistence.xml, but I have to keep the data source
   reference to JNDI:

   <persistence-unit name="responderPersistenUnit" transaction-type="JTA">
    <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
   <http://osgi.jndi.service.name/>=responder)</jta-data-source>
    </persistence-unit>

   The Pax-exam configuration file
   /org.ops4j.datasource-responder.cfg/ remains the same:

       osgi.jdbc.driver.name <http://osgi.jdbc.driver.name/> = mariadb
       dataSourceName=responder
       url
       = jdbc:<a href="mariadb://localhost:3306/responder?characterEncoding=UTF-8&amp;useServerPrepStmts=true" class="">mariadb://localhost:3306/responder?characterEncoding=UTF-8&useServerPrepStmts=true
       user=XXX
       password=XXX
       databaseName=responder
       ops4j.preHook=responderDB


   AriesJPA configuration in my feature provides the dialect and the
   provider:

   <config name="org.apache.aries.jpa.responderPersistenUnit">
    
     javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
       hibernate.dialect=org.hibernate.dialect.MariaDBDialect
       hibernate.show_sql=false
       hibernate.format_sql=true
       hibernate.hbm2ddl.auto=none
    </config>

   When I run, first I can see in the log AriesJPA Container:

   2018-05-25T09:01:22,580 | DEBUG | features-3-thread-1 |
   PersistenceBundleTracker         | 46 -
   org.apache.aries.jpa.container - 2.7.0 | Matching JPA contract for
   possible persistence bundle encryptedquery-responder-data
   2018-05-25T09:01:22,594 | INFO  | features-3-thread-1 |
   PersistenceBundleTracker         | 46 -
   org.apache.aries.jpa.container - 2.7.0 | Found persistence unit
   responderPersistenUnit in bundle encryptedquery-responder-data
   with provider null.
   2018-05-25T09:01:22,596 | INFO  | features-3-thread-1 |
   PersistenceProviderTracker       | 46 -
   org.apache.aries.jpa.container - 2.7.0 | Found provider for
   responderPersistenUnit org.hibernate.jpa.HibernatePersistenceProvider
   2018-05-25T09:01:22,618 | INFO  | features-3-thread-1 | LogHelper
                          | 134 - org.hibernate.core - 5.2.9.Final |
   HHH000204: Processing PersistenceUnitInfo [
   name: responderPersistenUnit
   ...]
   2018-05-25T09:01:22,688 | INFO  | features-3-thread-1 | Version  
                          | 134 - org.hibernate.core - 5.2.9.Final |
   HHH000412: Hibernate Core {5.2.9.Final}
   2018-05-25T09:01:22,691 | INFO  | features-3-thread-1 |
   Environment                      | 134 - org.hibernate.core -
   5.2.9.Final | HHH000206: hibernate.properties not found
   2018-05-25T09:01:22,750 | INFO  | features-3-thread-1 | Version  
                          | 133 -
   org.hibernate.common.hibernate-commons-annotations - 5.0.1.Final |
   HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
   2018-05-25T09:01:23,330 | WARN  | features-3-thread-1 |
   JdbcEnvironmentInitiator         | 134 - org.hibernate.core -
   5.2.9.Final | HHH000342: Could not obtain connection to query
   metadata : Unable to determine Dialect to use [name=,
   majorVersion=0]; user must register resolver or explicitly set
   'hibernate.dialect'
   2018-05-25T09:01:23,332 *| DEBUG |* features-3-thread-1 |
   PersistenceProviderTracker       | 46 -
   org.apache.aries.jpa.container - 2.7.0 | *Error while creating the
   Dummy EntityManagerFactory to allow weaving*.
   org.hibernate.service.spi.ServiceException: Unable to create
   requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
   at
   org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:271)
   ~[?:?]
   at
   org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:233)
   ~[?:?]
   at
   org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
   ~[?:?]
   at
   org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
   ~[?:?]
   at
   org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
   ~[?:?]
   at
   org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:242)
   ~[?:?]
   at
   org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
   ~[?:?]
   at
   org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)
   ~[?:?]
   at
   org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)
   ~[?:?]
   at
   org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:858)
   ~[?:?]
   at
   org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:885)
   ~[?:?]
   at
   org.hibernate.osgi.OsgiPersistenceProvider.createContainerEntityManagerFactory(OsgiPersistenceProvider.java:96)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.PersistenceProviderTracker.createAndCloseDummyEMF(PersistenceProviderTracker.java:105)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:86)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:44)
   ~[?:?]
   at
   org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)
   ~[?:?]
   at
   org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870)
   ~[?:?]
   at
   org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
   ~[?:?]
   at
   org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
   ~[?:?]
   at
   org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:318)
   ~[?:?]
   at
   org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.PersistenceBundleTracker.trackProvider(PersistenceBundleTracker.java:229)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.PersistenceBundleTracker.findPersistenceUnits(PersistenceBundleTracker.java:213)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:98)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:44)
   ~[?:?]
   at
   org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:469)
   ~[?:?]
   at
   org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:415)
   ~[?:?]
   at
   org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
   ~[?:?]
   at
   org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
   ~[?:?]
   at
   org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:444)
   ~[?:?]
   at
   org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915)
   ~[?:?]
   at
   org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834)
   ~[?:?]
   at
   org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516)
   ~[?:?]
   at
   org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4579)
   ~[?:?]
   at
   org.apache.felix.framework.Felix.activateBundle(Felix.java:2231)
   ~[?:?]
   at org.apache.felix.framework.Felix.startBundle(Felix.java:2146)
   ~[?:?]
   at
   org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)
   ~[?:?]
   at
   org.apache.felix.framework.BundleImpl.start(BundleImpl.java:984)
   ~[?:?]
   at
   org.apache.karaf.features.internal.service.BundleInstallSupportImpl.startBundle(BundleInstallSupportImpl.java:161)
   ~[?:?]
   at
   org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1116)
   ~[?:?]
   at
   org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:996)
   ~[?:?]
   at
   org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1025)
   ~[?:?]
   at
   org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:964)
   ~[?:?]
   at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
   at
   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
   [?:?]
   at
   java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
   [?:?]
   at java.lang.Thread.run(Thread.java:748) [?:?]
   Caused by: org.hibernate.HibernateException: Access to
   DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
   at
   org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100)
   ~[?:?]
   at
   org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54)
   ~[?:?]
   at
   org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:137)
   ~[?:?]
   at
   org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
   ~[?:?]
   at
   org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88)
   ~[?:?]
   at
   org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:259)
   ~[?:?]
   ... 46 more


   Notice the above exception is logged as DEBUG level, so I think it
   can be ignored.  Later I see this error:

   2018-05-25T09:01:23,354 | ERROR | CM Configuration Updater
   (ManagedService
   Update: pid=[org.apache.aries.jpa.responderPersistenUnit])
   | configadmin                      | 8 -
   org.apache.felix.configadmin - 1.8.16 | [org.osgi.service.cm
   <http://org.osgi.service.cm/>.ManagedService, id=196,
   bundle=18/mvn:org.enquery.encryptedquery/encryptedquery-responder-data/1.0.0-SNAPSHOT]:
   Unexpected problem updating configuration
   org.apache.aries.jpa.responderPersistenUnit
   java.lang.IllegalArgumentException: *The persistence unit
   responderPersistenUnit has incomplete configuration and cannot
   be created.* The configuration
   is{hibernate.format_sql=true, javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider,
   hibernate.hbm2ddl.auto=none, hibernate.dialect=org.hibernate.dialect.MariaDBDialect, org.apache.karaf.features.configKey=org.apache.aries.jpa.responderPersistenUnit, felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/itests/target/exam/cdf383ba-08b3-4157-bec3-c131857d7108/etc/org.apache.aries.jpa.responderPersistenUnit.cfg,
   hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA,
   service.pid=org.apache.aries.jpa.responderPersistenUnit}
   at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365)
   ~[?:?]
   at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
   ~[?:?]
   at
   org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
   ~[8:org.apache.felix.configadmin:1.8.16]
   at
   org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
   at
   org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
   at
   org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
   at
   org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
   at
   org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141)
   [8:org.apache.felix.configadmin:1.8.16]
   at
   org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109)
   [8:org.apache.felix.configadmin:1.8.16]
   at java.lang.Thread.run(Thread.java:748) [?:?]


   Later I see PAX-JDBC configuring the DataSource:


   2018-05-25T09:01:24,065 | INFO  | CM Configuration Updater
   (ManagedService
   Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) |
   ServiceTrackerHelper             | 162 - org.ops4j.pax.jdbc.config
   - 1.3.0 | Obtained service dependency:
   (&(objectClass=org.osgi.service.jdbc.DataSourceFactory)(osgi.jdbc.driver.name
   <http://osgi.jdbc.driver.name/>=mariadb))
   2018-05-25T09:01:24,065 | INFO  | CM Configuration Updater
   (ManagedService
   Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) |
   DataSourceRegistration           | 162 - org.ops4j.pax.jdbc.config
   - 1.3.0 | *Found DataSourceFactory. Creating DataSource responder*
   2018-05-25T09:01:24,071 | INFO  | CM Configuration Updater
   (ManagedService
   Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) |
   DataSourceRegistration           | 162 - org.ops4j.pax.jdbc.config
   - 1.3.0 | Executing pre hook for DataSource responder
   2018-05-25T09:01:29,888 | INFO  | CM Configuration Updater
   (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
   | DataSourceRegistration           | 162 -
   org.ops4j.pax.jdbc.config - 1.3.0 | *Pre hook finished. Publishing
   DataSource responder*
   2018-05-25T09:01:29,890 | INFO  | CM Configuration Updater
   (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
   | DataSourceTracker                | 46 -
   org.apache.aries.jpa.container - 2.7.0 | *Found DataSource for
   responderPersistenUnit
   osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
   <http://osgi.jndi.service.name/>=responder)*
   2018-05-25T09:01:29,890 | DEBUG | CM Configuration Updater
   (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
   | AriesEntityManagerFactoryBuilder | 46 -
   org.apache.aries.jpa.container - 2.7.0 | No transaction type set
   in config, restoring the original value JTA
   2018-05-25T09:01:29,890 | INFO  | CM Configuration Updater
   (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
   | LogHelper                        | 134 - org.hibernate.core -
   5.2.9.Final | HHH000204: Processing PersistenceUnitInfo [
   name: responderPersistenUnit
   ...]
   2018-05-25T09:01:29,984 | INFO  | CM Configuration Updater
   (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
   | Dialect                          | 134 - org.hibernate.core -
   5.2.9.Final | HHH000400: *Using dialect:
   org.hibernate.dialect.MySQL5Dialect*


   After this, everything works normally. Looks like the errors I see
   are later corrected, so it may be just a timing issue.

   Best regards,
   Alex soto




   On May 25, 2018, at 8:01 AM, Paul McCulloch
   <[hidden email] <[hidden email]>> wrote:

   The dialect can be left out of the pu.xml though. I started down
   this path, but in the end have just relied on hibernate to select
   the correct dialect. I deploy the same bundles on H2, Oracle &
   MSSQL with this approach.


   On 25 May 2018 at 12:51, Jean-Baptiste Onofré <[hidden email]
   <[hidden email]>> wrote:

       Hi Paul,

       yes, I remember this discussion, but AFAIR, it's always
       overriden by the
       dialect in the persistence.xml.

       Regards
       JB

       On 25/05/2018 13:00, Paul McCulloch wrote:
Hibernate usually does a reasonable job of auto detecting the dialect,
in my experience. If you need to override this then Aries JPA supports
creating a configuration file /etc/org.apache.aries.jpa.<PU name>.cfg
where you can override hibernate.dialect. Beware if you have a "-" in
the PU name as I think fileinstall we try and create a factory config.

I can't recall where I got this info from. It might have been
here: http://karaf.922171.n3.nabble.com/Dynamic-parameters-in-persistence-xml-td4043602.html
       <http://karaf.922171.n3.nabble.com/Dynamic-parameters-in-persistence-xml-td4043602.html>

On 25 May 2018 at 06:46, Jean-Baptiste Onofré <[hidden email] <[hidden email]>
<[hidden email] <[hidden email]>>> wrote:

     Hi Alex,

     the dialect HAS to be in the persistence.xml (it's in the JPA spec).

     AFAIK, Aries JPA doesn't provide a mechanism to provide the dialect
     externally from the persistence.xml.

     Even the Aries JPA itests define the dialect there:

     https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40
       <https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40>
     <https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40
       <https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40>>

     Further more, dialect also depends of the engine you are using
     (hibernate, openjpa, eclipselink).

     Regards
     JB

     On 24/05/2018 21:26, Alex Soto wrote:
     > If I change my persistence.xml to this:
     > 
     > 
     > <persistence-unit name="responderPersistenUnit" transaction-type="JTA">
     > <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
       <http://osgi.jndi.service.name/>
     <http://osgi.jndi.service.name
       <http://osgi.jndi.service.name/>>=responder)</jta-data-source>
     >
       <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
       <http://osgi.jndi.service.name/>
     <http://osgi.jndi.service.name
       <http://osgi.jndi.service.name/>>=responder)</jta-data-source>  
     >  
     > </persistence-unit>
     >
     > And the configuration entries to:
     >
     >
       <config name="org.apache.aries.jpa.responderPersistenUnit">
     >  
     >
         javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
     >  
         *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver*
     >  
         hibernate.dialect=org.hibernate.dialect.MariaDBDialect
     >     hibernate.show_sql=false
     >     hibernate.format_sql=true
     >     hibernate.hbm2ddl.auto=none
     > </config>
     >
     > Then the error Is:
     >
     >
     > java.lang.IllegalArgumentException: Cannot rebind to
       a different
     > database driver, as per the JPA service specification
     > at
     >
   
        org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.processProperties(AriesEntityManagerFactoryBuilder.java:225)
     > ~[?:?]
     > at
     >
   
        org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:173) ~[?:?]
     > at
     >
   
        org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
     > ~[?:?]
     > at
     >
   
        org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
     > ~[8:org.apache.felix.configadmin:1.8.16]
     > at
     >
   
        org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
     > at
     >
   
        org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
     > at
     >
   
        org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
     > at
     >
   
        org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
     > at
       org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141)
     > [8:org.apache.felix.configadmin:1.8.16]
     > at
       org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109)
     > [8:org.apache.felix.configadmin:1.8.16]
     > at java.lang.Thread.run(Thread.java:748) [?:?]
     >
     >
     > If I remove the
     >
       line *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver
       *from the
     > config file above, then I get the previous error
       about configuration not
     > being completed.  What I am trying to do is to not
        hard code
     >  the /hibernate.dialect /inside the bundle, so I can
       switch to a
     > different database without having to rebuild.
     >
     > Also, my DataSource is already created by PAX JDBC
       Config and this I
     > don’t want to change, since I am using PreHook
       facility there to run
     > LiquiBase migrations.
     > Any hints or examples appreciated.
     >
     >
     > Best regards,
     > Alex soto
     >
     >
     >
     >
     >> On May 24, 2018, at 1:41 PM, Alex Soto
       <[hidden email] <[hidden email]>
       <[hidden email] <[hidden email]>>
     >> <[hidden email] <[hidden email]>
       <[hidden email]
       <[hidden email]>>>> wrote:
     >>
     >> Hello,  
     >>
     >> I am using Aries JPA 2.7.0, I am trying provide the JPA persistence
     >> configuration using configuration file.  So my persistence.xml.
     >>
     >>     <persistence version="2.0"
     >>     xmlns="http://java.sun.com/xml/ns/persistence
       <http://java.sun.com/xml/ns/persistence>
     <http://java.sun.com/xml/ns/persistence
       <http://java.sun.com/xml/ns/persistence>>"
     >>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
       <http://www.w3.org/2001/XMLSchema-instance>
     <http://www.w3.org/2001/XMLSchema-instance
       <http://www.w3.org/2001/XMLSchema-instance>>"
     >>     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
       <http://java.sun.com/xml/ns/persistence>
     <http://java.sun.com/xml/ns/persistence
       <http://java.sun.com/xml/ns/persistence>>
     >>   
        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
       <http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd>
     <http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
       <http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd>>">
     >>
     >>     <persistence-unit name="responderPersistenUnit"
     >>     transaction-type="JTA">
     >>   
      <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
     >>     </persistence-unit>
     >>     </persistence>
     >>
     >>
     >> I deploy config file as part of my feature:
     >>
     >>     <config name="org.apache.aries.jpa.responderPersistenUnit">
     >>         hibernate.dialect=org.hibernate.dialect.MariaDBDialect
     >>         hibernate.show_sql=false
     >>         hibernate.format_sql=true
     >>         hibernate.hbm2ddl.auto=none
     >>      
     >>   
        jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
       <http://osgi.jndi.service.name/>
     <http://osgi.jndi.service.name
       <http://osgi.jndi.service.name/>>=responder)
     >>        
     >>   
   
         non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
       <http://osgi.jndi.service.name/>
     <http://osgi.jndi.service.name
       <http://osgi.jndi.service.name/>>=responder)  
     >>      
     >>     </config>
     >>
     >> When I run, the following exception is thrown:
     >>
     >>
     >>     java.lang.IllegalArgumentException: The persistence unit
     >>     responderPersistenUnit has incomplete configuration and cannot be
     >>     created. The configuration
     >>   
      is{non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
       <http://osgi.jndi.service.name/>
     <http://osgi.jndi.service.name
       <http://osgi.jndi.service.name/>>=responder),
     >>   
        hibernate.format_sql=true, hibernate.hbm2ddl.auto=none,
     >>   
        hibernate.dialect=org.hibernate.dialect.MariaDBDialect,
     >>   
   
         jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
       <http://osgi.jndi.service.name/>
     <http://osgi.jndi.service.name
       <http://osgi.jndi.service.name/>>=responder), felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/dist/target/encryptedquery-responder-dist-1.0.0-SNAPSHOT/etc/org.apache.aries.jpa.responderPersistenUnit.cfg,
     >>   
   
         hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA, service.pid=org.apache.aries.jpa.responderPersistenUnit}
     >>   
   
         at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365)
     >>     ~[?:?]
     >>   
   
         at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183)
     >>     ~[?:?]
     >>     at
     >>   
   
         org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
     >>     ~[?:?]
     >>     at
     >>   
   
         org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
     >>     ~[8:org.apache.felix.configadmin:1.8.16]
     >>     at
     >>   
   
         org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
     >>   
   
         at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
     >>   
   
         at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
     >>   
   
         at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
     >>     at
     >>   
   
         org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
     >>     at
     >>   
   
         org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
     >>     at java.lang.Thread.run(Thread.java:748) [?:?]
     >>
     >>
     >>
     >> So Aries JPA is finding the configuration properties
       I am providing,
     >> but still missing something.  What else is needed as
       configuration
     >> properties? Why is it not complete the persistent unit?
     >>
     >>
     >> Best regards,
     >> Alex soto
     >>
     >>
     >>
     >>
     >

     --
     --
     Jean-Baptiste Onofré
     [hidden email] <[hidden email]>
       <[hidden email] <[hidden email]>>
     http://blog.nanthrax.net <http://blog.nanthrax.net/>
     Talend - http://www.talend.com <http://www.talend.com/>



       -- 
       --
       Jean-Baptiste Onofré
       [hidden email] <[hidden email]>
       http://blog.nanthrax.net <http://blog.nanthrax.net/>
       Talend - http://www.talend.com <http://www.talend.com/>






-- 
--
Jean-Baptiste Onofré
[hidden email]
http://blog.nanthrax.net
Talend - http://www.talend.com

Reply | Threaded
Open this post in threaded view
|

Re: Aries JPA: The persistence unit has incomplete configuration and cannot be created.

Alex Soto
Hi Tim:

Agreed, it is brittle to depend on timing, I had arrived at the same conclusion looking a the Aries JPA code, but my experiment shows it is kind of possible, I was so close :)

I am now (happily) using your suggested approach and it is working without any errors/warnings.   Now, I would like to request for this feature/enhancement (i.e. support JNDI DataSources) but I am not sure where to make it.  Is this something  controlled by the OSGi committee or is it an Aries JPA thing? 

Thank you for the help.

Best regards,
Alex soto




On May 25, 2018, at 11:06 AM, Tim Ward <[hidden email]> wrote:

Alex,

As you’ve noticed in the log there are some “odd things” going on. What you’ve managed to do is to prod things in the correct order to reach a state that is not normally accessible!

So what’s happening is:

  1. Error while creating the Dummy EntityManagerFactory to allow weaving. - This always happens for Hibernate can safely be ignored. Part of the JPA specification involves supporting load-time weaving of the entity types. This forces the Aries JPA container to eagerly create the EMF as early as possible to avoid “missing” the class load. This in turn means that Aries JPA can’t wait to locate the DataSource, and instead uses a “dummy”, which gets us far enough through the process to get a load-time weaver. Hibernate then explodes because it tries to do real things with the dummy datasource.
  2. The persistence unit responderPersistenUnit has incomplete configuration and cannot be created. This is your persistence unit configuration being injected into Aries JPA - it fails because it is using a mixture of persistence xml and configuration, and the configuration properties therefore have no database connection details/
  3. Found DataSource for responderPersistenUnit osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)Once PAX-JDBC registers the DataSource service it is located by Aries JPA and used to create the EMF

The critical point here is that Entry 2 happens before Entry 3, but Aries JPA remembers the configuration that was injected into it in Entry 2. Therefore once the DataSource is found Aries JPA still has the configuration details injected from before. If you reversed the order of 2 and 3 then it wouldn’t work.

As Configuration Admin is asynchronous in its delivery of Configurations it can be pretty unreliable to depend on this ordering, although you could probably contrive a way of activating features to encourage it to happen this way all the time. Programmatic assembly is probably your friend here. 

Best Regards,

Tim


On 25 May 2018, at 17:09, Jean-Baptiste Onofré <[hidden email]> wrote:

Hi Alex,

I think it's better to use cfg or persistence.xml, one or the other, not
a mix of both.

I'm using both in the samples, but I don't mix both in the same sample.

Regards
JB

On 25/05/2018 16:00, Alex Soto wrote:
I will give a try to Tim’s suggestion, as it may be safer than what I am
doing now (with the errors in the log I can’t feel comfortable) but I do
agree there seems to be a gap.  To be clear, the gap (as indicated by
Tim), is the inability of using a DataSource registered in JNDI when
configuring the Persistence Unit via Configuration Admin, something that
is supported when using the persistence.xml file.

Best regards,
Alex soto




On May 25, 2018, at 9:37 AM, Paul McCulloch <[hidden email]
<[hidden email]>> wrote:

That's what I do Alex. I didn't think I needed the non-jta-datasource
(& everything seems to work), but this thread has made me think I
should go back & re-asses that. 

I'll also look again at the Transaction Control stuff - it was at
0.0.1 when I last looked, so I was nervous about relying on it. It
looks like it will fix my hack for MSSQL of having to fake an XA
datasource (as Aries JPA transactions don't work with non XA
datasources)..

On 25 May 2018 at 14:21, Alex Soto <[hidden email]
<[hidden email]>> wrote:

   Hi All,

   Thanks for input.  I think I found a sweet spot that seems to
   work, although I wish somebody from AriesJPA can confirm this is a
   valid approach.
   I removed the Dialect and the other Hibernate specific settings
   out of my persistence.xml, but I have to keep the data source
   reference to JNDI:

   <persistence-unit name="responderPersistenUnit" transaction-type="JTA">
    <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
   <http://osgi.jndi.service.name/>=responder)</jta-data-source>
    </persistence-unit>

   The Pax-exam configuration file
   /org.ops4j.datasource-responder.cfg/ remains the same:

       osgi.jdbc.driver.name <http://osgi.jdbc.driver.name/> = mariadb
       dataSourceName=responder
       url
       = jdbc:<a href="mariadb://localhost:3306/responder?characterEncoding=UTF-8&amp;useServerPrepStmts=true" class="">mariadb://localhost:3306/responder?characterEncoding=UTF-8&useServerPrepStmts=true
       user=XXX
       password=XXX
       databaseName=responder
       ops4j.preHook=responderDB


   AriesJPA configuration in my feature provides the dialect and the
   provider:

   <config name="org.apache.aries.jpa.responderPersistenUnit">
    
     javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
       hibernate.dialect=org.hibernate.dialect.MariaDBDialect
       hibernate.show_sql=false
       hibernate.format_sql=true
       hibernate.hbm2ddl.auto=none
    </config>

   When I run, first I can see in the log AriesJPA Container:

   2018-05-25T09:01:22,580 | DEBUG | features-3-thread-1 |
   PersistenceBundleTracker         | 46 -
   org.apache.aries.jpa.container - 2.7.0 | Matching JPA contract for
   possible persistence bundle encryptedquery-responder-data
   2018-05-25T09:01:22,594 | INFO  | features-3-thread-1 |
   PersistenceBundleTracker         | 46 -
   org.apache.aries.jpa.container - 2.7.0 | Found persistence unit
   responderPersistenUnit in bundle encryptedquery-responder-data
   with provider null.
   2018-05-25T09:01:22,596 | INFO  | features-3-thread-1 |
   PersistenceProviderTracker       | 46 -
   org.apache.aries.jpa.container - 2.7.0 | Found provider for
   responderPersistenUnit org.hibernate.jpa.HibernatePersistenceProvider
   2018-05-25T09:01:22,618 | INFO  | features-3-thread-1 | LogHelper
                          | 134 - org.hibernate.core - 5.2.9.Final |
   HHH000204: Processing PersistenceUnitInfo [
   name: responderPersistenUnit
   ...]
   2018-05-25T09:01:22,688 | INFO  | features-3-thread-1 | Version  
                          | 134 - org.hibernate.core - 5.2.9.Final |
   HHH000412: Hibernate Core {5.2.9.Final}
   2018-05-25T09:01:22,691 | INFO  | features-3-thread-1 |
   Environment                      | 134 - org.hibernate.core -
   5.2.9.Final | HHH000206: hibernate.properties not found
   2018-05-25T09:01:22,750 | INFO  | features-3-thread-1 | Version  
                          | 133 -
   org.hibernate.common.hibernate-commons-annotations - 5.0.1.Final |
   HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
   2018-05-25T09:01:23,330 | WARN  | features-3-thread-1 |
   JdbcEnvironmentInitiator         | 134 - org.hibernate.core -
   5.2.9.Final | HHH000342: Could not obtain connection to query
   metadata : Unable to determine Dialect to use [name=,
   majorVersion=0]; user must register resolver or explicitly set
   'hibernate.dialect'
   2018-05-25T09:01:23,332 *| DEBUG |* features-3-thread-1 |
   PersistenceProviderTracker       | 46 -
   org.apache.aries.jpa.container - 2.7.0 | *Error while creating the
   Dummy EntityManagerFactory to allow weaving*.
   org.hibernate.service.spi.ServiceException: Unable to create
   requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
   at
   org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:271)
   ~[?:?]
   at
   org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:233)
   ~[?:?]
   at
   org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
   ~[?:?]
   at
   org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
   ~[?:?]
   at
   org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
   ~[?:?]
   at
   org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:242)
   ~[?:?]
   at
   org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
   ~[?:?]
   at
   org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)
   ~[?:?]
   at
   org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)
   ~[?:?]
   at
   org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:858)
   ~[?:?]
   at
   org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:885)
   ~[?:?]
   at
   org.hibernate.osgi.OsgiPersistenceProvider.createContainerEntityManagerFactory(OsgiPersistenceProvider.java:96)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.PersistenceProviderTracker.createAndCloseDummyEMF(PersistenceProviderTracker.java:105)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:86)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:44)
   ~[?:?]
   at
   org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)
   ~[?:?]
   at
   org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870)
   ~[?:?]
   at
   org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
   ~[?:?]
   at
   org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
   ~[?:?]
   at
   org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:318)
   ~[?:?]
   at
   org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.PersistenceBundleTracker.trackProvider(PersistenceBundleTracker.java:229)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.PersistenceBundleTracker.findPersistenceUnits(PersistenceBundleTracker.java:213)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:98)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:44)
   ~[?:?]
   at
   org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:469)
   ~[?:?]
   at
   org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:415)
   ~[?:?]
   at
   org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
   ~[?:?]
   at
   org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
   ~[?:?]
   at
   org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:444)
   ~[?:?]
   at
   org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915)
   ~[?:?]
   at
   org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834)
   ~[?:?]
   at
   org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516)
   ~[?:?]
   at
   org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4579)
   ~[?:?]
   at
   org.apache.felix.framework.Felix.activateBundle(Felix.java:2231)
   ~[?:?]
   at org.apache.felix.framework.Felix.startBundle(Felix.java:2146)
   ~[?:?]
   at
   org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)
   ~[?:?]
   at
   org.apache.felix.framework.BundleImpl.start(BundleImpl.java:984)
   ~[?:?]
   at
   org.apache.karaf.features.internal.service.BundleInstallSupportImpl.startBundle(BundleInstallSupportImpl.java:161)
   ~[?:?]
   at
   org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1116)
   ~[?:?]
   at
   org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:996)
   ~[?:?]
   at
   org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1025)
   ~[?:?]
   at
   org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:964)
   ~[?:?]
   at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
   at
   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
   [?:?]
   at
   java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
   [?:?]
   at java.lang.Thread.run(Thread.java:748) [?:?]
   Caused by: org.hibernate.HibernateException: Access to
   DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
   at
   org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100)
   ~[?:?]
   at
   org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54)
   ~[?:?]
   at
   org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:137)
   ~[?:?]
   at
   org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
   ~[?:?]
   at
   org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88)
   ~[?:?]
   at
   org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:259)
   ~[?:?]
   ... 46 more


   Notice the above exception is logged as DEBUG level, so I think it
   can be ignored.  Later I see this error:

   2018-05-25T09:01:23,354 | ERROR | CM Configuration Updater
   (ManagedService
   Update: pid=[org.apache.aries.jpa.responderPersistenUnit])
   | configadmin                      | 8 -
   org.apache.felix.configadmin - 1.8.16 | [org.osgi.service.cm
   <http://org.osgi.service.cm/>.ManagedService, id=196,
   bundle=18/mvn:org.enquery.encryptedquery/encryptedquery-responder-data/1.0.0-SNAPSHOT]:
   Unexpected problem updating configuration
   org.apache.aries.jpa.responderPersistenUnit
   java.lang.IllegalArgumentException: *The persistence unit
   responderPersistenUnit has incomplete configuration and cannot
   be created.* The configuration
   is{hibernate.format_sql=true, javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider,
   hibernate.hbm2ddl.auto=none, hibernate.dialect=org.hibernate.dialect.MariaDBDialect, org.apache.karaf.features.configKey=org.apache.aries.jpa.responderPersistenUnit, felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/itests/target/exam/cdf383ba-08b3-4157-bec3-c131857d7108/etc/org.apache.aries.jpa.responderPersistenUnit.cfg,
   hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA,
   service.pid=org.apache.aries.jpa.responderPersistenUnit}
   at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365)
   ~[?:?]
   at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
   ~[?:?]
   at
   org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
   ~[8:org.apache.felix.configadmin:1.8.16]
   at
   org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
   at
   org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
   at
   org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
   at
   org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
   at
   org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141)
   [8:org.apache.felix.configadmin:1.8.16]
   at
   org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109)
   [8:org.apache.felix.configadmin:1.8.16]
   at java.lang.Thread.run(Thread.java:748) [?:?]


   Later I see PAX-JDBC configuring the DataSource:


   2018-05-25T09:01:24,065 | INFO  | CM Configuration Updater
   (ManagedService
   Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) |
   ServiceTrackerHelper             | 162 - org.ops4j.pax.jdbc.config
   - 1.3.0 | Obtained service dependency:
   (&(objectClass=org.osgi.service.jdbc.DataSourceFactory)(osgi.jdbc.driver.name
   <http://osgi.jdbc.driver.name/>=mariadb))
   2018-05-25T09:01:24,065 | INFO  | CM Configuration Updater
   (ManagedService
   Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) |
   DataSourceRegistration           | 162 - org.ops4j.pax.jdbc.config
   - 1.3.0 | *Found DataSourceFactory. Creating DataSource responder*
   2018-05-25T09:01:24,071 | INFO  | CM Configuration Updater
   (ManagedService
   Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) |
   DataSourceRegistration           | 162 - org.ops4j.pax.jdbc.config
   - 1.3.0 | Executing pre hook for DataSource responder
   2018-05-25T09:01:29,888 | INFO  | CM Configuration Updater
   (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
   | DataSourceRegistration           | 162 -
   org.ops4j.pax.jdbc.config - 1.3.0 | *Pre hook finished. Publishing
   DataSource responder*
   2018-05-25T09:01:29,890 | INFO  | CM Configuration Updater
   (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
   | DataSourceTracker                | 46 -
   org.apache.aries.jpa.container - 2.7.0 | *Found DataSource for
   responderPersistenUnit
   osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
   <http://osgi.jndi.service.name/>=responder)*
   2018-05-25T09:01:29,890 | DEBUG | CM Configuration Updater
   (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
   | AriesEntityManagerFactoryBuilder | 46 -
   org.apache.aries.jpa.container - 2.7.0 | No transaction type set
   in config, restoring the original value JTA
   2018-05-25T09:01:29,890 | INFO  | CM Configuration Updater
   (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
   | LogHelper                        | 134 - org.hibernate.core -
   5.2.9.Final | HHH000204: Processing PersistenceUnitInfo [
   name: responderPersistenUnit
   ...]
   2018-05-25T09:01:29,984 | INFO  | CM Configuration Updater
   (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
   | Dialect                          | 134 - org.hibernate.core -
   5.2.9.Final | HHH000400: *Using dialect:
   org.hibernate.dialect.MySQL5Dialect*


   After this, everything works normally. Looks like the errors I see
   are later corrected, so it may be just a timing issue.

   Best regards,
   Alex soto




   On May 25, 2018, at 8:01 AM, Paul McCulloch
   <[hidden email] <[hidden email]>> wrote:

   The dialect can be left out of the pu.xml though. I started down
   this path, but in the end have just relied on hibernate to select
   the correct dialect. I deploy the same bundles on H2, Oracle &
   MSSQL with this approach.


   On 25 May 2018 at 12:51, Jean-Baptiste Onofré <[hidden email]
   <[hidden email]>> wrote:

       Hi Paul,

       yes, I remember this discussion, but AFAIR, it's always
       overriden by the
       dialect in the persistence.xml.

       Regards
       JB

       On 25/05/2018 13:00, Paul McCulloch wrote:
Hibernate usually does a reasonable job of auto detecting the dialect,
in my experience. If you need to override this then Aries JPA supports
creating a configuration file /etc/org.apache.aries.jpa.<PU name>.cfg
where you can override hibernate.dialect. Beware if you have a "-" in
the PU name as I think fileinstall we try and create a factory config.

I can't recall where I got this info from. It might have been
here: http://karaf.922171.n3.nabble.com/Dynamic-parameters-in-persistence-xml-td4043602.html
       <http://karaf.922171.n3.nabble.com/Dynamic-parameters-in-persistence-xml-td4043602.html>

On 25 May 2018 at 06:46, Jean-Baptiste Onofré <[hidden email] <[hidden email]>
<[hidden email] <[hidden email]>>> wrote:

     Hi Alex,

     the dialect HAS to be in the persistence.xml (it's in the JPA spec).

     AFAIK, Aries JPA doesn't provide a mechanism to provide the dialect
     externally from the persistence.xml.

     Even the Aries JPA itests define the dialect there:

     https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40
       <https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40>
     <https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40
       <https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40>>

     Further more, dialect also depends of the engine you are using
     (hibernate, openjpa, eclipselink).

     Regards
     JB

     On 24/05/2018 21:26, Alex Soto wrote:
     > If I change my persistence.xml to this:
     > 
     > 
     > <persistence-unit name="responderPersistenUnit" transaction-type="JTA">
     > <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
       <http://osgi.jndi.service.name/>
     <http://osgi.jndi.service.name
       <http://osgi.jndi.service.name/>>=responder)</jta-data-source>
     >
       <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
       <http://osgi.jndi.service.name/>
     <http://osgi.jndi.service.name
       <http://osgi.jndi.service.name/>>=responder)</jta-data-source>  
     >  
     > </persistence-unit>
     >
     > And the configuration entries to:
     >
     >
       <config name="org.apache.aries.jpa.responderPersistenUnit">
     >  
     >
         javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
     >  
         *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver*
     >  
         hibernate.dialect=org.hibernate.dialect.MariaDBDialect
     >     hibernate.show_sql=false
     >     hibernate.format_sql=true
     >     hibernate.hbm2ddl.auto=none
     > </config>
     >
     > Then the error Is:
     >
     >
     > java.lang.IllegalArgumentException: Cannot rebind to
       a different
     > database driver, as per the JPA service specification
     > at
     >
   
        org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.processProperties(AriesEntityManagerFactoryBuilder.java:225)
     > ~[?:?]
     > at
     >
   
        org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:173) ~[?:?]
     > at
     >
   
        org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
     > ~[?:?]
     > at
     >
   
        org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
     > ~[8:org.apache.felix.configadmin:1.8.16]
     > at
     >
   
        org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
     > at
     >
   
        org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
     > at
     >
   
        org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
     > at
     >
   
        org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
     > at
       org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141)
     > [8:org.apache.felix.configadmin:1.8.16]
     > at
       org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109)
     > [8:org.apache.felix.configadmin:1.8.16]
     > at java.lang.Thread.run(Thread.java:748) [?:?]
     >
     >
     > If I remove the
     >
       line *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver
       *from the
     > config file above, then I get the previous error
       about configuration not
     > being completed.  What I am trying to do is to not
        hard code
     >  the /hibernate.dialect /inside the bundle, so I can
       switch to a
     > different database without having to rebuild.
     >
     > Also, my DataSource is already created by PAX JDBC
       Config and this I
     > don’t want to change, since I am using PreHook
       facility there to run
     > LiquiBase migrations.
     > Any hints or examples appreciated.
     >
     >
     > Best regards,
     > Alex soto
     >
     >
     >
     >
     >> On May 24, 2018, at 1:41 PM, Alex Soto
       <[hidden email] <[hidden email]>
       <[hidden email] <[hidden email]>>
     >> <[hidden email] <[hidden email]>
       <[hidden email]
       <[hidden email]>>>> wrote:
     >>
     >> Hello,  
     >>
     >> I am using Aries JPA 2.7.0, I am trying provide the JPA persistence
     >> configuration using configuration file.  So my persistence.xml.
     >>
     >>     <persistence version="2.0"
     >>     xmlns="http://java.sun.com/xml/ns/persistence
       <http://java.sun.com/xml/ns/persistence>
     <http://java.sun.com/xml/ns/persistence
       <http://java.sun.com/xml/ns/persistence>>"
     >>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
       <http://www.w3.org/2001/XMLSchema-instance>
     <http://www.w3.org/2001/XMLSchema-instance
       <http://www.w3.org/2001/XMLSchema-instance>>"
     >>     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
       <http://java.sun.com/xml/ns/persistence>
     <http://java.sun.com/xml/ns/persistence
       <http://java.sun.com/xml/ns/persistence>>
     >>   
        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
       <http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd>
     <http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
       <http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd>>">
     >>
     >>     <persistence-unit name="responderPersistenUnit"
     >>     transaction-type="JTA">
     >>   
      <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
     >>     </persistence-unit>
     >>     </persistence>
     >>
     >>
     >> I deploy config file as part of my feature:
     >>
     >>     <config name="org.apache.aries.jpa.responderPersistenUnit">
     >>         hibernate.dialect=org.hibernate.dialect.MariaDBDialect
     >>         hibernate.show_sql=false
     >>         hibernate.format_sql=true
     >>         hibernate.hbm2ddl.auto=none
     >>      
     >>   
        jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
       <http://osgi.jndi.service.name/>
     <http://osgi.jndi.service.name
       <http://osgi.jndi.service.name/>>=responder)
     >>        
     >>   
   
         non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
       <http://osgi.jndi.service.name/>
     <http://osgi.jndi.service.name
       <http://osgi.jndi.service.name/>>=responder)  
     >>      
     >>     </config>
     >>
     >> When I run, the following exception is thrown:
     >>
     >>
     >>     java.lang.IllegalArgumentException: The persistence unit
     >>     responderPersistenUnit has incomplete configuration and cannot be
     >>     created. The configuration
     >>   
      is{non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
       <http://osgi.jndi.service.name/>
     <http://osgi.jndi.service.name
       <http://osgi.jndi.service.name/>>=responder),
     >>   
        hibernate.format_sql=true, hibernate.hbm2ddl.auto=none,
     >>   
        hibernate.dialect=org.hibernate.dialect.MariaDBDialect,
     >>   
   
         jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
       <http://osgi.jndi.service.name/>
     <http://osgi.jndi.service.name
       <http://osgi.jndi.service.name/>>=responder), felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/dist/target/encryptedquery-responder-dist-1.0.0-SNAPSHOT/etc/org.apache.aries.jpa.responderPersistenUnit.cfg,
     >>   
   
         hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA, service.pid=org.apache.aries.jpa.responderPersistenUnit}
     >>   
   
         at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365)
     >>     ~[?:?]
     >>   
   
         at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183)
     >>     ~[?:?]
     >>     at
     >>   
   
         org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
     >>     ~[?:?]
     >>     at
     >>   
   
         org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
     >>     ~[8:org.apache.felix.configadmin:1.8.16]
     >>     at
     >>   
   
         org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
     >>   
   
         at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
     >>   
   
         at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
     >>   
   
         at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
     >>     at
     >>   
   
         org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
     >>     at
     >>   
   
         org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
     >>     at java.lang.Thread.run(Thread.java:748) [?:?]
     >>
     >>
     >>
     >> So Aries JPA is finding the configuration properties
       I am providing,
     >> but still missing something.  What else is needed as
       configuration
     >> properties? Why is it not complete the persistent unit?
     >>
     >>
     >> Best regards,
     >> Alex soto
     >>
     >>
     >>
     >>
     >

     --
     --
     Jean-Baptiste Onofré
     [hidden email] <[hidden email]>
       <[hidden email] <[hidden email]>>
     http://blog.nanthrax.net <http://blog.nanthrax.net/>
     Talend - http://www.talend.com <http://www.talend.com/>



       -- 
       --
       Jean-Baptiste Onofré
       [hidden email] <[hidden email]>
       http://blog.nanthrax.net <http://blog.nanthrax.net/>
       Talend - http://www.talend.com <http://www.talend.com/>






-- 
--
Jean-Baptiste Onofré
[hidden email]
http://blog.nanthrax.net
Talend - http://www.talend.com


Reply | Threaded
Open this post in threaded view
|

Re: Aries JPA: The persistence unit has incomplete configuration and cannot be created.

Tim Ward-2
The configuration mode isn’t part of the specification, it’s just something that Aries JPA has as a feature. The right place for feature requests would therefore be the Apache Aries JIRA.

Tim

On 25 May 2018, at 18:19, Alex Soto <[hidden email]> wrote:

Hi Tim:

Agreed, it is brittle to depend on timing, I had arrived at the same conclusion looking a the Aries JPA code, but my experiment shows it is kind of possible, I was so close :)

I am now (happily) using your suggested approach and it is working without any errors/warnings.   Now, I would like to request for this feature/enhancement (i.e. support JNDI DataSources) but I am not sure where to make it.  Is this something  controlled by the OSGi committee or is it an Aries JPA thing? 

Thank you for the help.

Best regards,
Alex soto




On May 25, 2018, at 11:06 AM, Tim Ward <[hidden email]> wrote:

Alex,

As you’ve noticed in the log there are some “odd things” going on. What you’ve managed to do is to prod things in the correct order to reach a state that is not normally accessible!

So what’s happening is:

  1. Error while creating the Dummy EntityManagerFactory to allow weaving. - This always happens for Hibernate can safely be ignored. Part of the JPA specification involves supporting load-time weaving of the entity types. This forces the Aries JPA container to eagerly create the EMF as early as possible to avoid “missing” the class load. This in turn means that Aries JPA can’t wait to locate the DataSource, and instead uses a “dummy”, which gets us far enough through the process to get a load-time weaver. Hibernate then explodes because it tries to do real things with the dummy datasource.
  2. The persistence unit responderPersistenUnit has incomplete configuration and cannot be created. This is your persistence unit configuration being injected into Aries JPA - it fails because it is using a mixture of persistence xml and configuration, and the configuration properties therefore have no database connection details/
  3. Found DataSource for responderPersistenUnit osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)Once PAX-JDBC registers the DataSource service it is located by Aries JPA and used to create the EMF

The critical point here is that Entry 2 happens before Entry 3, but Aries JPA remembers the configuration that was injected into it in Entry 2. Therefore once the DataSource is found Aries JPA still has the configuration details injected from before. If you reversed the order of 2 and 3 then it wouldn’t work.

As Configuration Admin is asynchronous in its delivery of Configurations it can be pretty unreliable to depend on this ordering, although you could probably contrive a way of activating features to encourage it to happen this way all the time. Programmatic assembly is probably your friend here. 

Best Regards,

Tim


On 25 May 2018, at 17:09, Jean-Baptiste Onofré <[hidden email]> wrote:

Hi Alex,

I think it's better to use cfg or persistence.xml, one or the other, not
a mix of both.

I'm using both in the samples, but I don't mix both in the same sample.

Regards
JB

On 25/05/2018 16:00, Alex Soto wrote:
I will give a try to Tim’s suggestion, as it may be safer than what I am
doing now (with the errors in the log I can’t feel comfortable) but I do
agree there seems to be a gap.  To be clear, the gap (as indicated by
Tim), is the inability of using a DataSource registered in JNDI when
configuring the Persistence Unit via Configuration Admin, something that
is supported when using the persistence.xml file.

Best regards,
Alex soto




On May 25, 2018, at 9:37 AM, Paul McCulloch <[hidden email]
<[hidden email]>> wrote:

That's what I do Alex. I didn't think I needed the non-jta-datasource
(& everything seems to work), but this thread has made me think I
should go back & re-asses that. 

I'll also look again at the Transaction Control stuff - it was at
0.0.1 when I last looked, so I was nervous about relying on it. It
looks like it will fix my hack for MSSQL of having to fake an XA
datasource (as Aries JPA transactions don't work with non XA
datasources)..

On 25 May 2018 at 14:21, Alex Soto <[hidden email]
<[hidden email]>> wrote:

   Hi All,

   Thanks for input.  I think I found a sweet spot that seems to
   work, although I wish somebody from AriesJPA can confirm this is a
   valid approach.
   I removed the Dialect and the other Hibernate specific settings
   out of my persistence.xml, but I have to keep the data source
   reference to JNDI:

   <persistence-unit name="responderPersistenUnit" transaction-type="JTA">
    <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
   <http://osgi.jndi.service.name/>=responder)</jta-data-source>
    </persistence-unit>

   The Pax-exam configuration file
   /org.ops4j.datasource-responder.cfg/ remains the same:

       osgi.jdbc.driver.name <http://osgi.jdbc.driver.name/> = mariadb
       dataSourceName=responder
       url
       = jdbc:<a href="mariadb://localhost:3306/responder?characterEncoding=UTF-8&amp;useServerPrepStmts=true" class="">mariadb://localhost:3306/responder?characterEncoding=UTF-8&useServerPrepStmts=true
       user=XXX
       password=XXX
       databaseName=responder
       ops4j.preHook=responderDB


   AriesJPA configuration in my feature provides the dialect and the
   provider:

   <config name="org.apache.aries.jpa.responderPersistenUnit">
    
     javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
       hibernate.dialect=org.hibernate.dialect.MariaDBDialect
       hibernate.show_sql=false
       hibernate.format_sql=true
       hibernate.hbm2ddl.auto=none
    </config>

   When I run, first I can see in the log AriesJPA Container:

   2018-05-25T09:01:22,580 | DEBUG | features-3-thread-1 |
   PersistenceBundleTracker         | 46 -
   org.apache.aries.jpa.container - 2.7.0 | Matching JPA contract for
   possible persistence bundle encryptedquery-responder-data
   2018-05-25T09:01:22,594 | INFO  | features-3-thread-1 |
   PersistenceBundleTracker         | 46 -
   org.apache.aries.jpa.container - 2.7.0 | Found persistence unit
   responderPersistenUnit in bundle encryptedquery-responder-data
   with provider null.
   2018-05-25T09:01:22,596 | INFO  | features-3-thread-1 |
   PersistenceProviderTracker       | 46 -
   org.apache.aries.jpa.container - 2.7.0 | Found provider for
   responderPersistenUnit org.hibernate.jpa.HibernatePersistenceProvider
   2018-05-25T09:01:22,618 | INFO  | features-3-thread-1 | LogHelper
                          | 134 - org.hibernate.core - 5.2.9.Final |
   HHH000204: Processing PersistenceUnitInfo [
   name: responderPersistenUnit
   ...]
   2018-05-25T09:01:22,688 | INFO  | features-3-thread-1 | Version  
                          | 134 - org.hibernate.core - 5.2.9.Final |
   HHH000412: Hibernate Core {5.2.9.Final}
   2018-05-25T09:01:22,691 | INFO  | features-3-thread-1 |
   Environment                      | 134 - org.hibernate.core -
   5.2.9.Final | HHH000206: hibernate.properties not found
   2018-05-25T09:01:22,750 | INFO  | features-3-thread-1 | Version  
                          | 133 -
   org.hibernate.common.hibernate-commons-annotations - 5.0.1.Final |
   HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
   2018-05-25T09:01:23,330 | WARN  | features-3-thread-1 |
   JdbcEnvironmentInitiator         | 134 - org.hibernate.core -
   5.2.9.Final | HHH000342: Could not obtain connection to query
   metadata : Unable to determine Dialect to use [name=,
   majorVersion=0]; user must register resolver or explicitly set
   'hibernate.dialect'
   2018-05-25T09:01:23,332 *| DEBUG |* features-3-thread-1 |
   PersistenceProviderTracker       | 46 -
   org.apache.aries.jpa.container - 2.7.0 | *Error while creating the
   Dummy EntityManagerFactory to allow weaving*.
   org.hibernate.service.spi.ServiceException: Unable to create
   requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
   at
   org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:271)
   ~[?:?]
   at
   org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:233)
   ~[?:?]
   at
   org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
   ~[?:?]
   at
   org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
   ~[?:?]
   at
   org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
   ~[?:?]
   at
   org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:242)
   ~[?:?]
   at
   org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
   ~[?:?]
   at
   org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)
   ~[?:?]
   at
   org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)
   ~[?:?]
   at
   org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:858)
   ~[?:?]
   at
   org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:885)
   ~[?:?]
   at
   org.hibernate.osgi.OsgiPersistenceProvider.createContainerEntityManagerFactory(OsgiPersistenceProvider.java:96)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.PersistenceProviderTracker.createAndCloseDummyEMF(PersistenceProviderTracker.java:105)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:86)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:44)
   ~[?:?]
   at
   org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)
   ~[?:?]
   at
   org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870)
   ~[?:?]
   at
   org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
   ~[?:?]
   at
   org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
   ~[?:?]
   at
   org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:318)
   ~[?:?]
   at
   org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.PersistenceBundleTracker.trackProvider(PersistenceBundleTracker.java:229)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.PersistenceBundleTracker.findPersistenceUnits(PersistenceBundleTracker.java:213)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:98)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:44)
   ~[?:?]
   at
   org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:469)
   ~[?:?]
   at
   org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:415)
   ~[?:?]
   at
   org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
   ~[?:?]
   at
   org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
   ~[?:?]
   at
   org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:444)
   ~[?:?]
   at
   org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915)
   ~[?:?]
   at
   org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834)
   ~[?:?]
   at
   org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516)
   ~[?:?]
   at
   org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4579)
   ~[?:?]
   at
   org.apache.felix.framework.Felix.activateBundle(Felix.java:2231)
   ~[?:?]
   at org.apache.felix.framework.Felix.startBundle(Felix.java:2146)
   ~[?:?]
   at
   org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)
   ~[?:?]
   at
   org.apache.felix.framework.BundleImpl.start(BundleImpl.java:984)
   ~[?:?]
   at
   org.apache.karaf.features.internal.service.BundleInstallSupportImpl.startBundle(BundleInstallSupportImpl.java:161)
   ~[?:?]
   at
   org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1116)
   ~[?:?]
   at
   org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:996)
   ~[?:?]
   at
   org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1025)
   ~[?:?]
   at
   org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:964)
   ~[?:?]
   at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
   at
   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
   [?:?]
   at
   java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
   [?:?]
   at java.lang.Thread.run(Thread.java:748) [?:?]
   Caused by: org.hibernate.HibernateException: Access to
   DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
   at
   org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100)
   ~[?:?]
   at
   org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54)
   ~[?:?]
   at
   org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:137)
   ~[?:?]
   at
   org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
   ~[?:?]
   at
   org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88)
   ~[?:?]
   at
   org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:259)
   ~[?:?]
   ... 46 more


   Notice the above exception is logged as DEBUG level, so I think it
   can be ignored.  Later I see this error:

   2018-05-25T09:01:23,354 | ERROR | CM Configuration Updater
   (ManagedService
   Update: pid=[org.apache.aries.jpa.responderPersistenUnit])
   | configadmin                      | 8 -
   org.apache.felix.configadmin - 1.8.16 | [org.osgi.service.cm
   <http://org.osgi.service.cm/>.ManagedService, id=196,
   bundle=18/mvn:org.enquery.encryptedquery/encryptedquery-responder-data/1.0.0-SNAPSHOT]:
   Unexpected problem updating configuration
   org.apache.aries.jpa.responderPersistenUnit
   java.lang.IllegalArgumentException: *The persistence unit
   responderPersistenUnit has incomplete configuration and cannot
   be created.* The configuration
   is{hibernate.format_sql=true, javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider,
   hibernate.hbm2ddl.auto=none, hibernate.dialect=org.hibernate.dialect.MariaDBDialect, org.apache.karaf.features.configKey=org.apache.aries.jpa.responderPersistenUnit, felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/itests/target/exam/cdf383ba-08b3-4157-bec3-c131857d7108/etc/org.apache.aries.jpa.responderPersistenUnit.cfg,
   hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA,
   service.pid=org.apache.aries.jpa.responderPersistenUnit}
   at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365)
   ~[?:?]
   at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183)
   ~[?:?]
   at
   org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
   ~[?:?]
   at
   org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
   ~[8:org.apache.felix.configadmin:1.8.16]
   at
   org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
   at
   org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
   at
   org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
   at
   org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
   at
   org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141)
   [8:org.apache.felix.configadmin:1.8.16]
   at
   org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109)
   [8:org.apache.felix.configadmin:1.8.16]
   at java.lang.Thread.run(Thread.java:748) [?:?]


   Later I see PAX-JDBC configuring the DataSource:


   2018-05-25T09:01:24,065 | INFO  | CM Configuration Updater
   (ManagedService
   Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) |
   ServiceTrackerHelper             | 162 - org.ops4j.pax.jdbc.config
   - 1.3.0 | Obtained service dependency:
   (&(objectClass=org.osgi.service.jdbc.DataSourceFactory)(osgi.jdbc.driver.name
   <http://osgi.jdbc.driver.name/>=mariadb))
   2018-05-25T09:01:24,065 | INFO  | CM Configuration Updater
   (ManagedService
   Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) |
   DataSourceRegistration           | 162 - org.ops4j.pax.jdbc.config
   - 1.3.0 | *Found DataSourceFactory. Creating DataSource responder*
   2018-05-25T09:01:24,071 | INFO  | CM Configuration Updater
   (ManagedService
   Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) |
   DataSourceRegistration           | 162 - org.ops4j.pax.jdbc.config
   - 1.3.0 | Executing pre hook for DataSource responder
   2018-05-25T09:01:29,888 | INFO  | CM Configuration Updater
   (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
   | DataSourceRegistration           | 162 -
   org.ops4j.pax.jdbc.config - 1.3.0 | *Pre hook finished. Publishing
   DataSource responder*
   2018-05-25T09:01:29,890 | INFO  | CM Configuration Updater
   (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
   | DataSourceTracker                | 46 -
   org.apache.aries.jpa.container - 2.7.0 | *Found DataSource for
   responderPersistenUnit
   osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
   <http://osgi.jndi.service.name/>=responder)*
   2018-05-25T09:01:29,890 | DEBUG | CM Configuration Updater
   (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
   | AriesEntityManagerFactoryBuilder | 46 -
   org.apache.aries.jpa.container - 2.7.0 | No transaction type set
   in config, restoring the original value JTA
   2018-05-25T09:01:29,890 | INFO  | CM Configuration Updater
   (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
   | LogHelper                        | 134 - org.hibernate.core -
   5.2.9.Final | HHH000204: Processing PersistenceUnitInfo [
   name: responderPersistenUnit
   ...]
   2018-05-25T09:01:29,984 | INFO  | CM Configuration Updater
   (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
   | Dialect                          | 134 - org.hibernate.core -
   5.2.9.Final | HHH000400: *Using dialect:
   org.hibernate.dialect.MySQL5Dialect*


   After this, everything works normally. Looks like the errors I see
   are later corrected, so it may be just a timing issue.

   Best regards,
   Alex soto




   On May 25, 2018, at 8:01 AM, Paul McCulloch
   <[hidden email] <[hidden email]>> wrote:

   The dialect can be left out of the pu.xml though. I started down
   this path, but in the end have just relied on hibernate to select
   the correct dialect. I deploy the same bundles on H2, Oracle &
   MSSQL with this approach.


   On 25 May 2018 at 12:51, Jean-Baptiste Onofré <[hidden email]
   <[hidden email]>> wrote:

       Hi Paul,

       yes, I remember this discussion, but AFAIR, it's always
       overriden by the
       dialect in the persistence.xml.

       Regards
       JB

       On 25/05/2018 13:00, Paul McCulloch wrote:
Hibernate usually does a reasonable job of auto detecting the dialect,
in my experience. If you need to override this then Aries JPA supports
creating a configuration file /etc/org.apache.aries.jpa.<PU name>.cfg
where you can override hibernate.dialect. Beware if you have a "-" in
the PU name as I think fileinstall we try and create a factory config.

I can't recall where I got this info from. It might have been
here: http://karaf.922171.n3.nabble.com/Dynamic-parameters-in-persistence-xml-td4043602.html
       <http://karaf.922171.n3.nabble.com/Dynamic-parameters-in-persistence-xml-td4043602.html>

On 25 May 2018 at 06:46, Jean-Baptiste Onofré <[hidden email] <[hidden email]>
<[hidden email] <[hidden email]>>> wrote:

     Hi Alex,

     the dialect HAS to be in the persistence.xml (it's in the JPA spec).

     AFAIK, Aries JPA doesn't provide a mechanism to provide the dialect
     externally from the persistence.xml.

     Even the Aries JPA itests define the dialect there:

     https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40
       <https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40>
     <https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40
       <https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40>>

     Further more, dialect also depends of the engine you are using
     (hibernate, openjpa, eclipselink).

     Regards
     JB

     On 24/05/2018 21:26, Alex Soto wrote:
     > If I change my persistence.xml to this:
     > 
     > 
     > <persistence-unit name="responderPersistenUnit" transaction-type="JTA">
     > <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
       <http://osgi.jndi.service.name/>
     <http://osgi.jndi.service.name
       <http://osgi.jndi.service.name/>>=responder)</jta-data-source>
     >
       <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
       <http://osgi.jndi.service.name/>
     <http://osgi.jndi.service.name
       <http://osgi.jndi.service.name/>>=responder)</jta-data-source>  
     >  
     > </persistence-unit>
     >
     > And the configuration entries to:
     >
     >
       <config name="org.apache.aries.jpa.responderPersistenUnit">
     >  
     >
         javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
     >  
         *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver*
     >  
         hibernate.dialect=org.hibernate.dialect.MariaDBDialect
     >     hibernate.show_sql=false
     >     hibernate.format_sql=true
     >     hibernate.hbm2ddl.auto=none
     > </config>
     >
     > Then the error Is:
     >
     >
     > java.lang.IllegalArgumentException: Cannot rebind to
       a different
     > database driver, as per the JPA service specification
     > at
     >
   
        org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.processProperties(AriesEntityManagerFactoryBuilder.java:225)
     > ~[?:?]
     > at
     >
   
        org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:173) ~[?:?]
     > at
     >
   
        org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
     > ~[?:?]
     > at
     >
   
        org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
     > ~[8:org.apache.felix.configadmin:1.8.16]
     > at
     >
   
        org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
     > at
     >
   
        org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
     > at
     >
   
        org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
     > at
     >
   
        org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
     > at
       org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141)
     > [8:org.apache.felix.configadmin:1.8.16]
     > at
       org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109)
     > [8:org.apache.felix.configadmin:1.8.16]
     > at java.lang.Thread.run(Thread.java:748) [?:?]
     >
     >
     > If I remove the
     >
       line *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver
       *from the
     > config file above, then I get the previous error
       about configuration not
     > being completed.  What I am trying to do is to not
        hard code
     >  the /hibernate.dialect /inside the bundle, so I can
       switch to a
     > different database without having to rebuild.
     >
     > Also, my DataSource is already created by PAX JDBC
       Config and this I
     > don’t want to change, since I am using PreHook
       facility there to run
     > LiquiBase migrations.
     > Any hints or examples appreciated.
     >
     >
     > Best regards,
     > Alex soto
     >
     >
     >
     >
     >> On May 24, 2018, at 1:41 PM, Alex Soto
       <[hidden email] <[hidden email]>
       <[hidden email] <[hidden email]>>
     >> <[hidden email] <[hidden email]>
       <[hidden email]
       <[hidden email]>>>> wrote:
     >>
     >> Hello,  
     >>
     >> I am using Aries JPA 2.7.0, I am trying provide the JPA persistence
     >> configuration using configuration file.  So my persistence.xml.
     >>
     >>     <persistence version="2.0"
     >>     xmlns="http://java.sun.com/xml/ns/persistence
       <http://java.sun.com/xml/ns/persistence>
     <http://java.sun.com/xml/ns/persistence
       <http://java.sun.com/xml/ns/persistence>>"
     >>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
       <http://www.w3.org/2001/XMLSchema-instance>
     <http://www.w3.org/2001/XMLSchema-instance
       <http://www.w3.org/2001/XMLSchema-instance>>"
     >>     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
       <http://java.sun.com/xml/ns/persistence>
     <http://java.sun.com/xml/ns/persistence
       <http://java.sun.com/xml/ns/persistence>>
     >>   
        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
       <http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd>
     <http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
       <http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd>>">
     >>
     >>     <persistence-unit name="responderPersistenUnit"
     >>     transaction-type="JTA">
     >>   
      <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
     >>     </persistence-unit>
     >>     </persistence>
     >>
     >>
     >> I deploy config file as part of my feature:
     >>
     >>     <config name="org.apache.aries.jpa.responderPersistenUnit">
     >>         hibernate.dialect=org.hibernate.dialect.MariaDBDialect
     >>         hibernate.show_sql=false
     >>         hibernate.format_sql=true
     >>         hibernate.hbm2ddl.auto=none
     >>      
     >>   
        jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
       <http://osgi.jndi.service.name/>
     <http://osgi.jndi.service.name
       <http://osgi.jndi.service.name/>>=responder)
     >>        
     >>   
   
         non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
       <http://osgi.jndi.service.name/>
     <http://osgi.jndi.service.name
       <http://osgi.jndi.service.name/>>=responder)  
     >>      
     >>     </config>
     >>
     >> When I run, the following exception is thrown:
     >>
     >>
     >>     java.lang.IllegalArgumentException: The persistence unit
     >>     responderPersistenUnit has incomplete configuration and cannot be
     >>     created. The configuration
     >>   
      is{non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
       <http://osgi.jndi.service.name/>
     <http://osgi.jndi.service.name
       <http://osgi.jndi.service.name/>>=responder),
     >>   
        hibernate.format_sql=true, hibernate.hbm2ddl.auto=none,
     >>   
        hibernate.dialect=org.hibernate.dialect.MariaDBDialect,
     >>   
   
         jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
       <http://osgi.jndi.service.name/>
     <http://osgi.jndi.service.name
       <http://osgi.jndi.service.name/>>=responder), felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/dist/target/encryptedquery-responder-dist-1.0.0-SNAPSHOT/etc/org.apache.aries.jpa.responderPersistenUnit.cfg,
     >>   
   
         hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA, service.pid=org.apache.aries.jpa.responderPersistenUnit}
     >>   
   
         at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365)
     >>     ~[?:?]
     >>   
   
         at org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183)
     >>     ~[?:?]
     >>     at
     >>   
   
         org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
     >>     ~[?:?]
     >>     at
     >>   
   
         org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
     >>     ~[8:org.apache.felix.configadmin:1.8.16]
     >>     at
     >>   
   
         org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152) [8:org.apache.felix.configadmin:1.8.16]
     >>   
   
         at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85) [8:org.apache.felix.configadmin:1.8.16]
     >>   
   
         at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479) [8:org.apache.felix.configadmin:1.8.16]
     >>   
   
         at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435) [8:org.apache.felix.configadmin:1.8.16]
     >>     at
     >>   
   
         org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
     >>     at
     >>   
   
         org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
     >>     at java.lang.Thread.run(Thread.java:748) [?:?]
     >>
     >>
     >>
     >> So Aries JPA is finding the configuration properties
       I am providing,
     >> but still missing something.  What else is needed as
       configuration
     >> properties? Why is it not complete the persistent unit?
     >>
     >>
     >> Best regards,
     >> Alex soto
     >>
     >>
     >>
     >>
     >

     --
     --
     Jean-Baptiste Onofré
     [hidden email] <[hidden email]>
       <[hidden email] <[hidden email]>>
     http://blog.nanthrax.net <http://blog.nanthrax.net/>
     Talend - http://www.talend.com <http://www.talend.com/>



       -- 
       --
       Jean-Baptiste Onofré
       [hidden email] <[hidden email]>
       http://blog.nanthrax.net <http://blog.nanthrax.net/>
       Talend - http://www.talend.com <http://www.talend.com/>






-- 
--
Jean-Baptiste Onofré
[hidden email]
http://blog.nanthrax.net
Talend - http://www.talend.com



Reply | Threaded
Open this post in threaded view
|

Re: Aries JPA: The persistence unit has incomplete configuration and cannot be created.

jbonofre
In reply to this post by Alex Soto
That's on the Aries JPA scope.

I'm suggesting to create a Jira at Aries, we will tackle that.

Thanks,
Regards
JB

On 25/05/2018 17:19, Alex Soto wrote:

> Hi Tim:
>
> Agreed, it is brittle to depend on timing, I had arrived at the same
> conclusion looking a the Aries JPA code, but my experiment shows it is
> kind of possible, I was so close :)
>
> I am now (happily) using your suggested approach and it is working
> without any errors/warnings.   Now, I would like to request for this
> feature/enhancement (i.e. support JNDI DataSources) but I am not sure
> where to make it.  Is this something  controlled by the OSGi committee
> or is it an Aries JPA thing? 
>
> Thank you for the help.
>
> Best regards,
> Alex soto
>
>
>
>
>> On May 25, 2018, at 11:06 AM, Tim Ward <[hidden email]
>> <mailto:[hidden email]>> wrote:
>>
>> Alex,
>>
>> As you’ve noticed in the log there are some “odd things” going on.
>> What you’ve managed to do is to prod things in the correct order to
>> reach a state that is not normally accessible!
>>
>> So what’s happening is:
>>
>>  1. *Error while creating the Dummy EntityManagerFactory to allow
>>     weaving*. - This always happens for Hibernate can safely be
>>     ignored. Part of the JPA specification involves supporting
>>     load-time weaving of the entity types. This forces the Aries JPA
>>     container to eagerly create the EMF as early as possible to avoid
>>     “missing” the class load. This in turn means that Aries JPA can’t
>>     wait to locate the DataSource, and instead uses a “dummy”, which
>>     gets us far enough through the process to get a load-time weaver.
>>     Hibernate then explodes because it tries to do real things with
>>     the dummy datasource.
>>  2. *The persistence unit responderPersistenUnit has incomplete
>>     configuration and cannot be created. *This is your persistence
>>     unit configuration being injected into Aries JPA - it fails
>>     because it is using a mixture of persistence xml and
>>     configuration, and the configuration properties therefore have no
>>     database connection details/
>>  3. *Found DataSource for responderPersistenUnit
>>     osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)*Once
>>     PAX-JDBC registers the DataSource service it is located by Aries
>>     JPA and used to create the EMF
>>
>>
>> The critical point here is that Entry 2 happens before Entry 3, but
>> Aries JPA remembers the configuration that was injected into it in
>> Entry 2. Therefore once the DataSource is found Aries JPA still has
>> the configuration details injected from before. If you reversed the
>> order of 2 and 3 then it wouldn’t work.
>>
>> As Configuration Admin is asynchronous in its delivery of
>> Configurations it can be pretty unreliable to depend on this ordering,
>> although you could probably contrive a way of activating features to
>> encourage it to happen this way all the time. Programmatic assembly is
>> probably your friend here. 
>>
>> Best Regards,
>>
>> Tim
>>
>>
>>> On 25 May 2018, at 17:09, Jean-Baptiste Onofré <[hidden email]
>>> <mailto:[hidden email]>> wrote:
>>>
>>> Hi Alex,
>>>
>>> I think it's better to use cfg or persistence.xml, one or the other, not
>>> a mix of both.
>>>
>>> I'm using both in the samples, but I don't mix both in the same sample.
>>>
>>> Regards
>>> JB
>>>
>>> On 25/05/2018 16:00, Alex Soto wrote:
>>>> I will give a try to Tim’s suggestion, as it may be safer than what I am
>>>> doing now (with the errors in the log I can’t feel comfortable) but I do
>>>> agree there seems to be a gap.  To be clear, the gap (as indicated by
>>>> Tim), is the inability of using a DataSource registered in JNDI when
>>>> configuring the Persistence Unit via Configuration Admin, something that
>>>> is supported when using the persistence.xml file.
>>>>
>>>> Best regards,
>>>> Alex soto
>>>>
>>>>
>>>>
>>>>
>>>>> On May 25, 2018, at 9:37 AM, Paul McCulloch <[hidden email]
>>>>> <mailto:[hidden email]>
>>>>> <mailto:[hidden email]>> wrote:
>>>>>
>>>>> That's what I do Alex. I didn't think I needed the non-jta-datasource
>>>>> (& everything seems to work), but this thread has made me think I
>>>>> should go back & re-asses that. 
>>>>>
>>>>> I'll also look again at the Transaction Control stuff - it was at
>>>>> 0.0.1 when I last looked, so I was nervous about relying on it. It
>>>>> looks like it will fix my hack for MSSQL of having to fake an XA
>>>>> datasource (as Aries JPA transactions don't work with non XA
>>>>> datasources)..
>>>>>
>>>>> On 25 May 2018 at 14:21, Alex Soto <[hidden email]
>>>>> <mailto:[hidden email]>
>>>>> <mailto:[hidden email]>> wrote:
>>>>>
>>>>>    Hi All,
>>>>>
>>>>>    Thanks for input.  I think I found a sweet spot that seems to
>>>>>    work, although I wish somebody from AriesJPA can confirm this is a
>>>>>    valid approach.
>>>>>    I removed the Dialect and the other Hibernate specific settings
>>>>>    out of my persistence.xml, but I have to keep the data source
>>>>>    reference to JNDI:
>>>>>
>>>>>    <persistence-unit name="responderPersistenUnit" transaction-type="JTA">
>>>>>     <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>>>>>    <http://osgi.jndi.service.name/>=responder)</jta-data-source>
>>>>>     </persistence-unit>
>>>>>
>>>>>    The Pax-exam configuration file
>>>>>    /org.ops4j.datasource-responder.cfg/ remains the same:
>>>>>
>>>>>        osgi.jdbc.driver.name <http://osgi.jdbc.driver.name/> = mariadb
>>>>>        dataSourceName=responder
>>>>>        url
>>>>>        = jdbc:mariadb://localhost:3306/responder?characterEncoding=UTF-8&useServerPrepStmts=true
>>>>>        user=XXX
>>>>>        password=XXX
>>>>>        databaseName=responder
>>>>>        ops4j.preHook=responderDB
>>>>>
>>>>>
>>>>>    AriesJPA configuration in my feature provides the dialect and the
>>>>>    provider:
>>>>>
>>>>>    <config name="org.apache.aries.jpa.responderPersistenUnit">
>>>>>     
>>>>>      javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
>>>>>        hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>>>>>        hibernate.show_sql=false
>>>>>        hibernate.format_sql=true
>>>>>        hibernate.hbm2ddl.auto=none
>>>>>     </config>
>>>>>
>>>>>    When I run, first I can see in the log AriesJPA Container:
>>>>>
>>>>>    2018-05-25T09:01:22,580 | DEBUG | features-3-thread-1 |
>>>>>    PersistenceBundleTracker         | 46 -
>>>>>    org.apache.aries.jpa.container - 2.7.0 | Matching JPA contract for
>>>>>    possible persistence bundle encryptedquery-responder-data
>>>>>    2018-05-25T09:01:22,594 | INFO  | features-3-thread-1 |
>>>>>    PersistenceBundleTracker         | 46 -
>>>>>    org.apache.aries.jpa.container - 2.7.0 | Found persistence unit
>>>>>    responderPersistenUnit in bundle encryptedquery-responder-data
>>>>>    with provider null.
>>>>>    2018-05-25T09:01:22,596 | INFO  | features-3-thread-1 |
>>>>>    PersistenceProviderTracker       | 46 -
>>>>>    org.apache.aries.jpa.container - 2.7.0 | Found provider for
>>>>>    responderPersistenUnit org.hibernate.jpa.HibernatePersistenceProvider
>>>>>    2018-05-25T09:01:22,618 | INFO  | features-3-thread-1 | LogHelper
>>>>>                           | 134 - org.hibernate.core - 5.2.9.Final |
>>>>>    HHH000204: Processing PersistenceUnitInfo [
>>>>>    name: responderPersistenUnit
>>>>>    ...]
>>>>>    2018-05-25T09:01:22,688 | INFO  | features-3-thread-1 | Version  
>>>>>                           | 134 - org.hibernate.core - 5.2.9.Final |
>>>>>    HHH000412: Hibernate Core {5.2.9.Final}
>>>>>    2018-05-25T09:01:22,691 | INFO  | features-3-thread-1 |
>>>>>    Environment                      | 134 - org.hibernate.core -
>>>>>    5.2.9.Final | HHH000206: hibernate.properties not found
>>>>>    2018-05-25T09:01:22,750 | INFO  | features-3-thread-1 | Version  
>>>>>                           | 133 -
>>>>>    org.hibernate.common.hibernate-commons-annotations - 5.0.1.Final |
>>>>>    HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
>>>>>    2018-05-25T09:01:23,330 | WARN  | features-3-thread-1 |
>>>>>    JdbcEnvironmentInitiator         | 134 - org.hibernate.core -
>>>>>    5.2.9.Final | HHH000342: Could not obtain connection to query
>>>>>    metadata : Unable to determine Dialect to use [name=,
>>>>>    majorVersion=0]; user must register resolver or explicitly set
>>>>>    'hibernate.dialect'
>>>>>    2018-05-25T09:01:23,332 *| DEBUG |* features-3-thread-1 |
>>>>>    PersistenceProviderTracker       | 46 -
>>>>>    org.apache.aries.jpa.container - 2.7.0 | *Error while creating the
>>>>>    Dummy EntityManagerFactory to allow weaving*.
>>>>>    org.hibernate.service.spi.ServiceException: Unable to create
>>>>>    requested service
>>>>> [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
>>>>>    at
>>>>>    org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:271)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:233)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
>>>>>    ~[?:?]
>>>>>    at
>>>>>   
>>>>> org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:242)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:858)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:885)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.hibernate.osgi.OsgiPersistenceProvider.createContainerEntityManagerFactory(OsgiPersistenceProvider.java:96)
>>>>>    ~[?:?]
>>>>>    at
>>>>>   
>>>>> org.apache.aries.jpa.container.impl.PersistenceProviderTracker.createAndCloseDummyEMF(PersistenceProviderTracker.java:105)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:86)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:44)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:318)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.apache.aries.jpa.container.impl.PersistenceBundleTracker.trackProvider(PersistenceBundleTracker.java:229)
>>>>>    ~[?:?]
>>>>>    at
>>>>>   
>>>>> org.apache.aries.jpa.container.impl.PersistenceBundleTracker.findPersistenceUnits(PersistenceBundleTracker.java:213)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:98)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:44)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:469)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:415)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:444)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4579)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.apache.felix.framework.Felix.activateBundle(Felix.java:2231)
>>>>>    ~[?:?]
>>>>>    at org.apache.felix.framework.Felix.startBundle(Felix.java:2146)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.apache.felix.framework.BundleImpl.start(BundleImpl.java:984)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.apache.karaf.features.internal.service.BundleInstallSupportImpl.startBundle(BundleInstallSupportImpl.java:161)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1116)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:996)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1025)
>>>>>    ~[?:?]
>>>>>    at
>>>>>   
>>>>> org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:964)
>>>>>    ~[?:?]
>>>>>    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
>>>>>    at
>>>>>    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>>>>>    [?:?]
>>>>>    at
>>>>>    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>>>>>    [?:?]
>>>>>    at java.lang.Thread.run(Thread.java:748) [?:?]
>>>>>    Caused by: org.hibernate.HibernateException: Access to
>>>>>    DialectResolutionInfo cannot be null when 'hibernate.dialect'
>>>>> not set
>>>>>    at
>>>>>    org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:137)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:259)
>>>>>    ~[?:?]
>>>>>    ... 46 more
>>>>>
>>>>>
>>>>>    Notice the above exception is logged as DEBUG level, so I think it
>>>>>    can be ignored.  Later I see this error:
>>>>>
>>>>>    2018-05-25T09:01:23,354 | ERROR | CM Configuration Updater
>>>>>    (ManagedService
>>>>>    Update: pid=[org.apache.aries.jpa.responderPersistenUnit])
>>>>>    | configadmin                      | 8 -
>>>>>    org.apache.felix.configadmin - 1.8.16 | [org.osgi.service.cm
>>>>>    <http://org.osgi.service.cm/>.ManagedService, id=196,
>>>>>    bundle=18/mvn:org.enquery.encryptedquery/encryptedquery-responder-data/1.0.0-SNAPSHOT]:
>>>>>    Unexpected problem updating configuration
>>>>>    org.apache.aries.jpa.responderPersistenUnit
>>>>>    java.lang.IllegalArgumentException: *The persistence unit
>>>>>    responderPersistenUnit has incomplete configuration and cannot
>>>>>    be created.* The configuration
>>>>>    is{hibernate.format_sql=true, javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider,
>>>>>    hibernate.hbm2ddl.auto=none, hibernate.dialect=org.hibernate.dialect.MariaDBDialect,
>>>>> org.apache.karaf.features.configKey=org.apache.aries.jpa.responderPersistenUnit,
>>>>> felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/itests/target/exam/cdf383ba-08b3-4157-bec3-c131857d7108/etc/org.apache.aries.jpa.responderPersistenUnit.cfg,
>>>>>    hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA,
>>>>>    service.pid=org.apache.aries.jpa.responderPersistenUnit}
>>>>>    at
>>>>> org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365)
>>>>>    ~[?:?]
>>>>>    at
>>>>> org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
>>>>>    ~[?:?]
>>>>>    at
>>>>>    org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>>>>>    ~[8:org.apache.felix.configadmin:1.8.16]
>>>>>    at
>>>>>    org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152)
>>>>> [8:org.apache.felix.configadmin:1.8.16]
>>>>>    at
>>>>>    org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85)
>>>>> [8:org.apache.felix.configadmin:1.8.16]
>>>>>    at
>>>>>    org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479)
>>>>> [8:org.apache.felix.configadmin:1.8.16]
>>>>>    at
>>>>>    org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435)
>>>>> [8:org.apache.felix.configadmin:1.8.16]
>>>>>    at
>>>>>    org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141)
>>>>>    [8:org.apache.felix.configadmin:1.8.16]
>>>>>    at
>>>>>    org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109)
>>>>>    [8:org.apache.felix.configadmin:1.8.16]
>>>>>    at java.lang.Thread.run(Thread.java:748) [?:?]
>>>>>
>>>>>
>>>>>    Later I see PAX-JDBC configuring the DataSource:
>>>>>
>>>>>
>>>>>    2018-05-25T09:01:24,065 | INFO  | CM Configuration Updater
>>>>>    (ManagedService
>>>>>    Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) |
>>>>>    ServiceTrackerHelper             | 162 - org.ops4j.pax.jdbc.config
>>>>>    - 1.3.0 | Obtained service dependency:
>>>>>    (&(objectClass=org.osgi.service.jdbc.DataSourceFactory)(osgi.jdbc.driver.name
>>>>>    <http://osgi.jdbc.driver.name/>=mariadb))
>>>>>    2018-05-25T09:01:24,065 | INFO  | CM Configuration Updater
>>>>>    (ManagedService
>>>>>    Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) |
>>>>>    DataSourceRegistration           | 162 - org.ops4j.pax.jdbc.config
>>>>>    - 1.3.0 | *Found DataSourceFactory. Creating DataSource responder*
>>>>>    2018-05-25T09:01:24,071 | INFO  | CM Configuration Updater
>>>>>    (ManagedService
>>>>>    Update: pid=[org.apache.aries.jpa.responderPersistenUnit]) |
>>>>>    DataSourceRegistration           | 162 - org.ops4j.pax.jdbc.config
>>>>>    - 1.3.0 | Executing pre hook for DataSource responder
>>>>>    2018-05-25T09:01:29,888 | INFO  | CM Configuration Updater
>>>>>    (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
>>>>>    | DataSourceRegistration           | 162 -
>>>>>    org.ops4j.pax.jdbc.config - 1.3.0 | *Pre hook finished. Publishing
>>>>>    DataSource responder*
>>>>>    2018-05-25T09:01:29,890 | INFO  | CM Configuration Updater
>>>>>    (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
>>>>>    | DataSourceTracker                | 46 -
>>>>>    org.apache.aries.jpa.container - 2.7.0 | *Found DataSource for
>>>>>    responderPersistenUnit
>>>>>    osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>>>>>    <http://osgi.jndi.service.name/>=responder)*
>>>>>    2018-05-25T09:01:29,890 | DEBUG | CM Configuration Updater
>>>>>    (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
>>>>>    | AriesEntityManagerFactoryBuilder | 46 -
>>>>>    org.apache.aries.jpa.container - 2.7.0 | No transaction type set
>>>>>    in config, restoring the original value JTA
>>>>>    2018-05-25T09:01:29,890 | INFO  | CM Configuration Updater
>>>>>    (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
>>>>>    | LogHelper                        | 134 - org.hibernate.core -
>>>>>    5.2.9.Final | HHH000204: Processing PersistenceUnitInfo [
>>>>>    name: responderPersistenUnit
>>>>>    ...]
>>>>>    2018-05-25T09:01:29,984 | INFO  | CM Configuration Updater
>>>>>    (ManagedServiceFactory Update: factoryPid=[org.ops4j.datasource])
>>>>>    | Dialect                          | 134 - org.hibernate.core -
>>>>>    5.2.9.Final | HHH000400: *Using dialect:
>>>>>    org.hibernate.dialect.MySQL5Dialect*
>>>>>
>>>>>
>>>>>    After this, everything works normally. Looks like the errors I see
>>>>>    are later corrected, so it may be just a timing issue.
>>>>>
>>>>>    Best regards,
>>>>>    Alex soto
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>>    On May 25, 2018, at 8:01 AM, Paul McCulloch
>>>>>>    <[hidden email]
>>>>>> <mailto:[hidden email]> <mailto:[hidden email]>> wrote:
>>>>>>
>>>>>>    The dialect can be left out of the pu.xml though. I started down
>>>>>>    this path, but in the end have just relied on hibernate to select
>>>>>>    the correct dialect. I deploy the same bundles on H2, Oracle &
>>>>>>    MSSQL with this approach.
>>>>>>
>>>>>>
>>>>>>    On 25 May 2018 at 12:51, Jean-Baptiste Onofré <[hidden email]
>>>>>> <mailto:[hidden email]>
>>>>>>    <mailto:[hidden email]>> wrote:
>>>>>>
>>>>>>        Hi Paul,
>>>>>>
>>>>>>        yes, I remember this discussion, but AFAIR, it's always
>>>>>>        overriden by the
>>>>>>        dialect in the persistence.xml.
>>>>>>
>>>>>>        Regards
>>>>>>        JB
>>>>>>
>>>>>>        On 25/05/2018 13:00, Paul McCulloch wrote:
>>>>>>> Hibernate usually does a reasonable job of auto detecting the
>>>>>>> dialect,
>>>>>>> in my experience. If you need to override this then Aries JPA
>>>>>>> supports
>>>>>>> creating a configuration file /etc/org.apache.aries.jpa.<PU name>.cfg
>>>>>>> where you can override hibernate.dialect. Beware if you have a "-" in
>>>>>>> the PU name as I think fileinstall we try and create a factory
>>>>>>> config.
>>>>>>>
>>>>>>> I can't recall where I got this info from. It might have been
>>>>>>> here: http://karaf.922171.n3.nabble.com/Dynamic-parameters-in-persistence-xml-td4043602.html
>>>>>>        <http://karaf.922171.n3.nabble.com/Dynamic-parameters-in-persistence-xml-td4043602.html>
>>>>>>>
>>>>>>> On 25 May 2018 at 06:46, Jean-Baptiste Onofré <[hidden email]
>>>>>>> <mailto:[hidden email]> <mailto:[hidden email]>
>>>>>>> <mailto:[hidden email] <mailto:[hidden email]>>> wrote:
>>>>>>>
>>>>>>>      Hi Alex,
>>>>>>>
>>>>>>>      the dialect HAS to be in the persistence.xml (it's in the
>>>>>>> JPA spec).
>>>>>>>
>>>>>>>      AFAIK, Aries JPA doesn't provide a mechanism to provide the
>>>>>>> dialect
>>>>>>>      externally from the persistence.xml.
>>>>>>>
>>>>>>>      Even the Aries JPA itests define the dialect there:
>>>>>>>
>>>>>>>    
>>>>>>>  https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40
>>>>>>        <https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40>
>>>>>>>    
>>>>>>>  <https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40
>>>>>>        <https://github.com/apache/aries-jpa/blob/master/itests/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml#L40>>
>>>>>>>
>>>>>>>      Further more, dialect also depends of the engine you are using
>>>>>>>      (hibernate, openjpa, eclipselink).
>>>>>>>
>>>>>>>      Regards
>>>>>>>      JB
>>>>>>>
>>>>>>>      On 24/05/2018 21:26, Alex Soto wrote:
>>>>>>>      > If I change my persistence.xml to this:
>>>>>>>      > 
>>>>>>>      > 
>>>>>>>      >
>>>>>>> <persistence-unit name="responderPersistenUnit" transaction-type="JTA">
>>>>>>>      >
>>>>>>> <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>>>>>>        <http://osgi.jndi.service.name/>
>>>>>>>      <http://osgi.jndi.service.name <http://osgi.jndi.service.name/>
>>>>>>        <http://osgi.jndi.service.name/>>=responder)</jta-data-source>
>>>>>>>      >
>>>>>>        <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>>>>>>        <http://osgi.jndi.service.name/>
>>>>>>>      <http://osgi.jndi.service.name <http://osgi.jndi.service.name/>
>>>>>>        <http://osgi.jndi.service.name/>>=responder)</jta-data-source>  
>>>>>>>      >  
>>>>>>>      > </persistence-unit>
>>>>>>>      >
>>>>>>>      > And the configuration entries to:
>>>>>>>      >
>>>>>>>      >
>>>>>>        <config name="org.apache.aries.jpa.responderPersistenUnit">
>>>>>>>      >  
>>>>>>>      >
>>>>>>          javax.persistence.provider=org.hibernate.jpa.HibernatePersistenceProvider
>>>>>>>      >  
>>>>>>          *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver*
>>>>>>>      >  
>>>>>>          hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>>>>>>>      >     hibernate.show_sql=false
>>>>>>>      >     hibernate.format_sql=true
>>>>>>>      >     hibernate.hbm2ddl.auto=none
>>>>>>>      > </config>
>>>>>>>      >
>>>>>>>      > Then the error Is:
>>>>>>>      >
>>>>>>>      >
>>>>>>>      > java.lang.IllegalArgumentException: Cannot rebind to
>>>>>>        a different
>>>>>>>      > database driver, as per the JPA service specification
>>>>>>>      > at
>>>>>>>      >
>>>>>>>    
>>>>>>        
>>>>>> org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.processProperties(AriesEntityManagerFactoryBuilder.java:225)
>>>>>>>      > ~[?:?]
>>>>>>>      > at
>>>>>>>      >
>>>>>>>    
>>>>>>        
>>>>>> org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:173) ~[?:?]
>>>>>>>      > at
>>>>>>>      >
>>>>>>>    
>>>>>>         org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
>>>>>>>      > ~[?:?]
>>>>>>>      > at
>>>>>>>      >
>>>>>>>    
>>>>>>         org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>>>>>>>      > ~[8:org.apache.felix.configadmin:1.8.16]
>>>>>>>      > at
>>>>>>>      >
>>>>>>>    
>>>>>>         org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152)
>>>>>> [8:org.apache.felix.configadmin:1.8.16]
>>>>>>>      > at
>>>>>>>      >
>>>>>>>    
>>>>>>         org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85)
>>>>>> [8:org.apache.felix.configadmin:1.8.16]
>>>>>>>      > at
>>>>>>>      >
>>>>>>>    
>>>>>>        
>>>>>> org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479)
>>>>>> [8:org.apache.felix.configadmin:1.8.16]
>>>>>>>      > at
>>>>>>>      >
>>>>>>>    
>>>>>>         org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435)
>>>>>> [8:org.apache.felix.configadmin:1.8.16]
>>>>>>>      > at
>>>>>>        org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141)
>>>>>>>      > [8:org.apache.felix.configadmin:1.8.16]
>>>>>>>      > at
>>>>>>        org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109)
>>>>>>>      > [8:org.apache.felix.configadmin:1.8.16]
>>>>>>>      > at java.lang.Thread.run(Thread.java:748) [?:?]
>>>>>>>      >
>>>>>>>      >
>>>>>>>      > If I remove the
>>>>>>>      >
>>>>>>        line *javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver
>>>>>>        *from the
>>>>>>>      > config file above, then I get the previous error
>>>>>>        about configuration not
>>>>>>>      > being completed.  What I am trying to do is to not
>>>>>>         hard code
>>>>>>>      >  the /hibernate.dialect /inside the bundle, so I can
>>>>>>        switch to a
>>>>>>>      > different database without having to rebuild.
>>>>>>>      >
>>>>>>>      > Also, my DataSource is already created by PAX JDBC
>>>>>>        Config and this I
>>>>>>>      > don’t want to change, since I am using PreHook
>>>>>>        facility there to run
>>>>>>>      > LiquiBase migrations.
>>>>>>>      > Any hints or examples appreciated.
>>>>>>>      >
>>>>>>>      >
>>>>>>>      > Best regards,
>>>>>>>      > Alex soto
>>>>>>>      >
>>>>>>>      >
>>>>>>>      >
>>>>>>>      >
>>>>>>>      >> On May 24, 2018, at 1:41 PM, Alex Soto
>>>>>>        <[hidden email]
>>>>>> <mailto:[hidden email]> <mailto:[hidden email]>
>>>>>>        <mailto:[hidden email] <mailto:[hidden email]>>
>>>>>>>      >> <mailto:[hidden email] <mailto:[hidden email]>
>>>>>>        <mailto:[hidden email]
>>>>>>        <mailto:[hidden email]>>>> wrote:
>>>>>>>      >>
>>>>>>>      >> Hello,  
>>>>>>>      >>
>>>>>>>      >> I am using Aries JPA 2.7.0, I am trying provide the JPA
>>>>>>> persistence
>>>>>>>      >> configuration using configuration file.  So my
>>>>>>> persistence.xml.
>>>>>>>      >>
>>>>>>>      >>     <persistence version="2.0"
>>>>>>>      >>     xmlns="http://java.sun.com/xml/ns/persistence
>>>>>>        <http://java.sun.com/xml/ns/persistence>
>>>>>>>      <http://java.sun.com/xml/ns/persistence
>>>>>>        <http://java.sun.com/xml/ns/persistence>>"
>>>>>>>      >>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
>>>>>>        <http://www.w3.org/2001/XMLSchema-instance>
>>>>>>>      <http://www.w3.org/2001/XMLSchema-instance
>>>>>>        <http://www.w3.org/2001/XMLSchema-instance>>"
>>>>>>>      >>   
>>>>>>>  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
>>>>>>        <http://java.sun.com/xml/ns/persistence>
>>>>>>>      <http://java.sun.com/xml/ns/persistence
>>>>>>        <http://java.sun.com/xml/ns/persistence>>
>>>>>>>      >>   
>>>>>>         http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
>>>>>>        <http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd>
>>>>>>>      <http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
>>>>>>        <http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd>>">
>>>>>>>      >>
>>>>>>>      >>     <persistence-unit name="responderPersistenUnit"
>>>>>>>      >>     transaction-type="JTA">
>>>>>>>      >>   
>>>>>>>    
>>>>>>>   <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
>>>>>>>      >>     </persistence-unit>
>>>>>>>      >>     </persistence>
>>>>>>>      >>
>>>>>>>      >>
>>>>>>>      >> I deploy config file as part of my feature:
>>>>>>>      >>
>>>>>>>      >>   
>>>>>>>  <config name="org.apache.aries.jpa.responderPersistenUnit">
>>>>>>>      >>      
>>>>>>>   hibernate.dialect=org.hibernate.dialect.MariaDBDialect
>>>>>>>      >>         hibernate.show_sql=false
>>>>>>>      >>         hibernate.format_sql=true
>>>>>>>      >>         hibernate.hbm2ddl.auto=none
>>>>>>>      >>      
>>>>>>>      >>   
>>>>>>>    
>>>>>>>     jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>>>>>>        <http://osgi.jndi.service.name/>
>>>>>>>      <http://osgi.jndi.service.name <http://osgi.jndi.service.name/>
>>>>>>        <http://osgi.jndi.service.name/>>=responder)
>>>>>>>      >>        
>>>>>>>      >>   
>>>>>>>    
>>>>>>          non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>>>>>>        <http://osgi.jndi.service.name/>
>>>>>>>      <http://osgi.jndi.service.name <http://osgi.jndi.service.name/>
>>>>>>        <http://osgi.jndi.service.name/>>=responder)  
>>>>>>>      >>      
>>>>>>>      >>     </config>
>>>>>>>      >>
>>>>>>>      >> When I run, the following exception is thrown:
>>>>>>>      >>
>>>>>>>      >>
>>>>>>>      >>     java.lang.IllegalArgumentException: The persistence unit
>>>>>>>      >>     responderPersistenUnit has incomplete
>>>>>>> configuration and cannot be
>>>>>>>      >>     created. The configuration
>>>>>>>      >>   
>>>>>>>    
>>>>>>>   is{non-jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>>>>>>        <http://osgi.jndi.service.name/>
>>>>>>>      <http://osgi.jndi.service.name <http://osgi.jndi.service.name/>
>>>>>>        <http://osgi.jndi.service.name/>>=responder),
>>>>>>>      >>   
>>>>>>         hibernate.format_sql=true, hibernate.hbm2ddl.auto=none,
>>>>>>>      >>   
>>>>>>         hibernate.dialect=org.hibernate.dialect.MariaDBDialect,
>>>>>>>      >>   
>>>>>>>    
>>>>>>          jta-data-source=osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
>>>>>>        <http://osgi.jndi.service.name/>
>>>>>>>      <http://osgi.jndi.service.name <http://osgi.jndi.service.name/>
>>>>>>        <http://osgi.jndi.service.name/>>=responder),
>>>>>> felix.fileinstall.filename=file:/Users/asoto/git/encryptedquery/responder/dist/target/encryptedquery-responder-dist-1.0.0-SNAPSHOT/etc/org.apache.aries.jpa.responderPersistenUnit.cfg,
>>>>>>>      >>   
>>>>>>>    
>>>>>>          hibernate.show_sql=false, javax.persistence.spi.PersistenceUnitTransactionType=JTA,
>>>>>> service.pid=org.apache.aries.jpa.responderPersistenUnit}
>>>>>>>      >>   
>>>>>>>    
>>>>>>          at
>>>>>> org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createAndPublishEMF(AriesEntityManagerFactoryBuilder.java:365)
>>>>>>>      >>     ~[?:?]
>>>>>>>      >>   
>>>>>>>    
>>>>>>          at
>>>>>> org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder.createEntityManagerFactory(AriesEntityManagerFactoryBuilder.java:183)
>>>>>>>      >>     ~[?:?]
>>>>>>>      >>     at
>>>>>>>      >>   
>>>>>>>    
>>>>>>          org.apache.aries.jpa.container.impl.ManagedEMF.updated(ManagedEMF.java:75)
>>>>>>>      >>     ~[?:?]
>>>>>>>      >>     at
>>>>>>>      >>   
>>>>>>>    
>>>>>>          org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)
>>>>>>>      >>     ~[8:org.apache.felix.configadmin:1.8.16]
>>>>>>>      >>     at
>>>>>>>      >>   
>>>>>>>    
>>>>>>          org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152)
>>>>>> [8:org.apache.felix.configadmin:1.8.16]
>>>>>>>      >>   
>>>>>>>    
>>>>>>          at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85)
>>>>>> [8:org.apache.felix.configadmin:1.8.16]
>>>>>>>      >>   
>>>>>>>    
>>>>>>          at
>>>>>> org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1479)
>>>>>> [8:org.apache.felix.configadmin:1.8.16]
>>>>>>>      >>   
>>>>>>>    
>>>>>>          at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1435)
>>>>>> [8:org.apache.felix.configadmin:1.8.16]
>>>>>>>      >>     at
>>>>>>>      >>   
>>>>>>>    
>>>>>>          org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) [8:org.apache.felix.configadmin:1.8.16]
>>>>>>>      >>     at
>>>>>>>      >>   
>>>>>>>    
>>>>>>          org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) [8:org.apache.felix.configadmin:1.8.16]
>>>>>>>      >>     at java.lang.Thread.run(Thread.java:748) [?:?]
>>>>>>>      >>
>>>>>>>      >>
>>>>>>>      >>
>>>>>>>      >> So Aries JPA is finding the configuration properties
>>>>>>        I am providing,
>>>>>>>      >> but still missing something.  What else is needed as
>>>>>>        configuration
>>>>>>>      >> properties? Why is it not complete the persistent unit?
>>>>>>>      >>
>>>>>>>      >>
>>>>>>>      >> Best regards,
>>>>>>>      >> Alex soto
>>>>>>>      >>
>>>>>>>      >>
>>>>>>>      >>
>>>>>>>      >>
>>>>>>>      >
>>>>>>>
>>>>>>>      --
>>>>>>>      --
>>>>>>>      Jean-Baptiste Onofré
>>>>>>>      [hidden email]
>>>>>>> <mailto:[hidden email]> <mailto:[hidden email]>
>>>>>>        <mailto:[hidden email] <mailto:[hidden email]>>
>>>>>>>      http://blog.nanthrax.net
>>>>>>> <http://blog.nanthrax.net/> <http://blog.nanthrax.net/>
>>>>>>>      Talend - http://www.talend.com
>>>>>>> <http://www.talend.com/> <http://www.talend.com/>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>        -- 
>>>>>>        --
>>>>>>        Jean-Baptiste Onofré
>>>>>>        [hidden email]
>>>>>> <mailto:[hidden email]> <mailto:[hidden email]>
>>>>>>        http://blog.nanthrax.net
>>>>>> <http://blog.nanthrax.net/> <http://blog.nanthrax.net/>
>>>>>>        Talend - http://www.talend.com
>>>>>> <http://www.talend.com/> <http://www.talend.com/>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>> -- 
>>> --
>>> Jean-Baptiste Onofré
>>> [hidden email] <mailto:[hidden email]>
>>> http://blog.nanthrax.net <http://blog.nanthrax.net/>
>>> Talend - http://www.talend.com <http://www.talend.com/>
>>
>

--
--
Jean-Baptiste Onofré
[hidden email]
http://blog.nanthrax.net
Talend - http://www.talend.com