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 <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";
>>     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é
jbono...@apache.org
http://blog.nanthrax.net
Talend - http://www.talend.com

Reply via email to