Pracujemy z JPA i próbujemy trzymać się standardowej specyfikacji (i omijać funkcje specyficzne dla Hibernacji).Odwołując się do identyfikatora artefaktu słoika zależności użytkownika od persistence.xml
Używamy jednego projektu (nazwijmy go X) wewnątrz innego projektu (A) jako zależności Mavena.
Musimy JPA skanować projektu X dla podmiotów, jak również projektu skanowania A.
W tym celu dodaliśmy linię
<jar-file>lib/X-v5-4.0.jar</jar-file>
wewnątrz
<persistence-unit>
w persistence.xml. To działa dobrze.
Problem, który wciąż mamy, polega na tym, że musimy teraz określić wersję projektu X w nie tylko pom.xml, ale także w pliku persistence.xml. Jest to przepis na problemy z wdrożeniami w przyszłości.
Musimy wymyślić systemu filtrowania przy użyciu zasobów Maven:
<jar-file>lib/X-v5-${x-version}.jar</jar-file>
w persistence.xml i
<properties>
<x-version>4.0</x-version>
</properties>
i $ {x-version} w pom.xml.
Działa to, ale nadal nie jest doskonały, ponieważ będziemy musieli pamiętać o aktualizacji numeru wersji w niestandardowej lokalizacji za każdym razem, gdy projekt X otrzyma nową wersję.
Idealnie chcielibyśmy mieć sytuację, w której możemy dostosować informacje o wersji w części pom.xml dotyczącej zależności, a zmiany zostaną automatycznie propagowane do pliku persistence.xml. Zredukowalibyśmy w ten sposób wiele możliwych błędów w przyszłości.
Czy to możliwe?
EDIT (Nasze rozwiązanie):
dodaliśmy plik o nazwie jpa.xml. Definiujemy entityManagerFactory, persistenceAnnotationBeanPostProcessor i transactionManager w nim. Ważną częścią jest fasola entityManagerFactory. Posiada właściwość "packagesToScan", która pozwala wskazać określone pakiety do skanowania pod kątem encji, aby umieścić w kontekście utrwalania.
Kod urywek:
<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>
Jestem pewien, widać zaletę: jak odnosimy się do tych bibliotek przez podpisanie pakietu, nie musimy już martwić się o numery wersji słoiku.
Zabrakło mi w tej samej sytuacji z mojego projektu. Czy kiedykolwiek znalazłeś dobre rozwiązanie dla tego problemu? –
@EricB. Dodałem rozwiązanie jako zmianę do mojego pytania. Mam nadzieję, że to pomoże. – Zaan
Dzięki. Skończyło się na tym samym użyciu, z zastrzeżeniem, że nie jest to standard WZP. Ale zrezygnowałem ze standardowego rozwiązania JPA. Znalazłem wtyczkę o nazwie 'jpa-maven-plugin' (http://ljnelson.github.io/jpa-maven-plugin/), której można użyć do aktualizacji pliku persistence.xml podczas budowania maven. –