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 <francois.pa...@openobject.fr> 
> 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:mariadb://localhost:3306/responder?characterEncoding=UTF-8&useServerPrepStmts=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 <francois.pa...@openobject.fr 
>>> <mailto:francois.pa...@openobject.fr>> 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 <alex.s...@envieta.com 
>>>>> <mailto:alex.s...@envieta.com>> 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=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
>>>>>  
>>>>> <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 via email to