Robert Schulte created ARIES-1992:
-------------------------------------
Summary: Override PersistenceUnit props are lost if DataSource is
not yet available
Key: ARIES-1992
URL: https://issues.apache.org/jira/browse/ARIES-1992
Project: Aries
Issue Type: Bug
Components: JPA
Affects Versions: jpa-2.7.2
Environment: Karaf 4.2.8 on Windows 10 and Alpine
* Pax JDBC
* Hibernate ORM 5.4
Reporter: Robert Schulte
h1. Overview
We have a similar setup to the one described here:
[http://karaf.922171.n3.nabble.com/Aries-JPA-The-persistence-unit-has-incomplete-configuration-and-cannot-be-created-td4053148.html]
We use
* Apache Karaf
* Pax JDBC
* Aries JPA
* Hibernate ORM
We use Pax JDBC to configure a DataSource and also use the pre-hook for
Liquibase migration. Since we support multiple databases, we have to set
_org.hibernate.dialect_ dynamically. We have a bundle with persistence.xml,
that sets a default _org.hibernate.dialect_ . We overwrite the dialect by
setting it in org.apache.aries.jpa.<pu-name>.cfg in ${karaf.etc}.
After migrating from Karaf 4.1.4 to 4.2.8 (jpa 2.6.1 -> 2.7.2) this does not
work anymore
h1. Steps to Reproduce
# Start Karaf
# Deploy a PersistenceUnit and DataSource
# Add an org.apache.aries.jpa.<pu-name>.cfg file in ${karaf.etc}. Set a new
property.
# Inspect the properties of the corresponding EntityManagerFactory (by
executing {{service:list EntityManagerFactory}})
# Restart Karaf
# Inspect the properties of the EntityManagerFactory (by executing
{{service:list EntityManagerFactory}}) again
h1. Actual Results
# The properties of the EntityManagerFactory change during a Karaf restart.
# The additional properties from
${karaf.etc}/org.apache.aries.jpa.<pu-name>.cfg are not applied
# An error is logged
{noformat}
java.lang.IllegalArgumentException: The persistence unit <pu-name> has
incomplete configuration and cannot be created.
{noformat}
h1. Expected Results
# The published EMF before restarting should be identical to the EMF after
restarting Karaf
h1. Conjecture
[ManagedEMF|https://github.com/apache/aries-jpa/blob/master/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/ManagedEMF.java#L75]
is notified about updated props before a DataSource is available. This results
in the aforementioned {{IllegalArgumentException}}. The props from the Config
Admin's call to {{updated}} are now lost. When a DS or DSF is discovered by the
respective ServiceTracker, an EMF will be created and published, but the
override properties will not be passed again since they have already been
handed to the ManagedService.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)