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 <[email protected]> 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: > > 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. > 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/ > 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é <[email protected] >> <mailto:[email protected]>> 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 <[email protected] >>>> <mailto:[email protected]> >>>> <mailto:[email protected] <mailto:[email protected]>>> 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 <[email protected] >>>> <mailto:[email protected]> >>>> <mailto:[email protected] <mailto:[email protected]>>> 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/ >>>> <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/ >>>> <http://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=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/ >>>> <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/ >>>> <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/ >>>> <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 >>>>> <[email protected] <mailto:[email protected]> >>>>> <mailto:[email protected] <mailto:[email protected]>>> 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é <[email protected] >>>>> <mailto:[email protected]> >>>>> <mailto:[email protected] <mailto:[email protected]>>> 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> >>>>> >>>>> <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é <[email protected] >>>>>> <mailto:[email protected]> <mailto:[email protected] >>>>>> <mailto:[email protected]>> >>>>>> <mailto:[email protected] <mailto:[email protected]> >>>>>> <mailto:[email protected] <mailto:[email protected]>>>> 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>> >>>>>> >>>>>> <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/> >>>>> <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/> >>>>> <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 >>>>> <[email protected] <mailto:[email protected]> >>>>> <mailto:[email protected] <mailto:[email protected]>> >>>>> <mailto:[email protected] <mailto:[email protected]> >>>>> <mailto:[email protected] <mailto:[email protected]>>> >>>>>> >> <mailto:[email protected] <mailto:[email protected]> >>>>>> <mailto:[email protected] <mailto:[email protected]>> >>>>> <mailto:[email protected] <mailto:[email protected]> >>>>> <mailto:[email protected] <mailto:[email protected]>>>>> >>>>> 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>> >>>>>> <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>> >>>>>> <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 >>>>>> <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>> >>>>>> <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/> >>>>> <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/> >>>>> <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/> >>>>> <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/> >>>>> <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é >>>>>> [email protected] <mailto:[email protected]> >>>>>> <mailto:[email protected] <mailto:[email protected]>> >>>>> <mailto:[email protected] <mailto:[email protected]> >>>>> <mailto:[email protected] <mailto:[email protected]>>> >>>>>> http://blog.nanthrax.net <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/ <http://www.talend.com/>> >>>>>> >>>>>> >>>>> >>>>> -- >>>>> -- >>>>> Jean-Baptiste Onofré >>>>> [email protected] <mailto:[email protected]> >>>>> <mailto:[email protected] <mailto:[email protected]>> >>>>> http://blog.nanthrax.net <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/ <http://www.talend.com/>> >>>>> >>>>> >>>> >>>> >>> >> >> -- >> -- >> Jean-Baptiste Onofré >> [email protected] <mailto:[email protected]> >> http://blog.nanthrax.net <http://blog.nanthrax.net/> >> Talend - http://www.talend.com <http://www.talend.com/>
