Stiamo lavorando con JPA e stiamo cercando di attenerci alle specifiche standard (ed evitare le funzionalità specifiche di Hibernate).Riferendosi all'oggetto del vaso di dipendenza di Maven da persistence.xml
Usiamo un progetto (chiamiamolo X) all'interno di un altro progetto (A) come dipendenza da Maven.
Abbiamo bisogno di APP a eseguire la scansione del progetto X per Enti, nonché progetto di scansione A.
A tal fine, abbiamo aggiunto una linea
<jar-file>lib/X-v5-4.0.jar</jar-file>
all'interno
<persistence-unit>
in persistence.xml. Funziona bene
Il problema che abbiamo ancora è che ora dobbiamo specificare la versione del progetto X non solo in pom.xml ma anche in persistence.xml. Questa è una ricetta per i problemi con gli schieramenti in futuro.
Siamo venuti su con un sistema che utilizza Maven filtraggio delle risorse:
<jar-file>lib/X-v5-${x-version}.jar</jar-file>
in persistence.xml e
<properties>
<x-version>4.0</x-version>
</properties>
e $ {x-version} in pom.xml.
Questo funziona ma non è ancora perfetto, poiché dovremo ricordarci di aggiornare il numero di versione in una posizione non standard ogni volta che il progetto X ottiene una nuova versione.
Idealmente, ci piacerebbe avere una situazione in cui possiamo regolare le informazioni sulla versione nella parte delle dipendenze di pom.xml e le modifiche si propagheranno automaticamente a persistence.xml. Ridurremmo un sacco di errori possibili in future distribuzioni in questo modo.
È possibile?
EDIT (LA NOSTRA SOLUZIONE):
abbiamo aggiunto un file chiamato jpa.xml. Definiamo un entityManagerFactory, un persistenceAnnotationBeanPostProcessor e un transactionManager in esso. La parte importante qui è il bean entityManagerFactory. Ha una proprietà "packagesToScan" che consente di indicare pacchetti specifici per la scansione delle entità da inserire nel contesto di persistenza.
Un frammento di codice:
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="jpaDataSource" />
<property name="loadTimeWeaver">
<bean
class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
</property>
<property name="packagesToScan">
<list>
<value>org.com.our.external.library.package1</value>
<value>org.com.our.external.library.package2</value>
<value>org.com.our.external.library.package3</value>
</list>
</property>
</bean>
sono sicuro che si vede il vantaggio: come ci si riferisce a queste librerie di firma pacchetto, non dobbiamo più preoccupare di vaso numeri di versione.
ho incontrato la stessa situazione con il mio progetto. Hai mai trovato una buona soluzione per questo problema? –
@EricB. Ho aggiunto la soluzione come modifica alla mia domanda. Spero che aiuti. – Zaan
Grazie. Ho finito per usare la stessa cosa, con l'avvertenza che non è uno standard JPA. Ma ho rinunciato alla soluzione standard JPA. Ho trovato un plugin chiamato 'jpa-maven-plugin' (http://ljnelson.github.io/jpa-maven-plugin/) che puoi usare per aggiornare il file persistence.xml durante una build di maven. –