karaf-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jean-Baptiste Onofré ...@nanthrax.net>
Subject Re: Aries JPA: The persistence unit has incomplete configuration and cannot be created.
Date Fri, 25 May 2018 15:49:31 GMT
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 <tim.ward@paremus.com
>> <mailto:tim.ward@paremus.com>> 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é <jb@nanthrax.net
>>> <mailto:jb@nanthrax.net>> 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 <pkmcculloch@gmail.com
>>>>> <mailto:pkmcculloch@gmail.com>
>>>>> <mailto:pkmcculloch@gmail.com>> 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 <alex.soto@envieta.com
>>>>> <mailto:alex.soto@envieta.com>
>>>>> <mailto:alex.soto@envieta.com>> 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
>>>>>>    <pkmcculloch@gmail.com
>>>>>> <mailto:pkmcculloch@gmail.com> <mailto:pkmcculloch@gmail.com>> 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é <jb@nanthrax.net
>>>>>> <mailto:jb@nanthrax.net>
>>>>>>    <mailto:jb@nanthrax.net>> 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é <jb@nanthrax.net
>>>>>>> <mailto:jb@nanthrax.net> <mailto:jb@nanthrax.net>
>>>>>>> <mailto:jb@nanthrax.net <mailto:jb@nanthrax.net>>> 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
>>>>>>        <alex.soto@envieta.com
>>>>>> <mailto:alex.soto@envieta.com> <mailto:alex.soto@envieta.com>
>>>>>>        <mailto:alex.soto@envieta.com <mailto:alex.soto@envieta.com>>
>>>>>>>      >> <mailto:alex.soto@envieta.com <mailto:alex.soto@envieta.com>
>>>>>>        <mailto:alex.soto@envieta.com
>>>>>>        <mailto:alex.soto@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>
>>>>>>>      <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é
>>>>>>>      jbonofre@apache.org
>>>>>>> <mailto:jbonofre@apache.org> <mailto:jbonofre@apache.org>
>>>>>>        <mailto:jbonofre@apache.org <mailto:jbonofre@apache.org>>
>>>>>>>      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é
>>>>>>        jbonofre@apache.org
>>>>>> <mailto:jbonofre@apache.org> <mailto:jbonofre@apache.org>
>>>>>>        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é
>>> jbonofre@apache.org <mailto:jbonofre@apache.org>
>>> http://blog.nanthrax.net <http://blog.nanthrax.net/>
>>> Talend - http://www.talend.com <http://www.talend.com/>
>>
> 

-- 
--
Jean-Baptiste Onofré
jbonofre@apache.org
http://blog.nanthrax.net
Talend - http://www.talend.com


Mime
View raw message