2013-09-03 16 views
12

Jednostki trwałości w pliku persistence.xml są tworzone podczas budowania aplikacji. Czy chcę zmienić adres URL bazy danych w czasie wykonywania, czy istnieje jakiś sposób modyfikacji jednostki utrwalania w środowisku wykonawczym? Miałem użyć innej bazy danych, innej niż pre-binded po dystrybucji.Dynamicznie zmieniająca się jednostka trwałości - JPA

Używam EclipseLink (JPA 2.1)

+0

Czy używasz dowolnego serwera? –

+0

Nop. Jest to samodzielna aplikacja. Serwery baz danych to Oracle-12c i SQL Server 9.0.x –

Odpowiedz

25

Zachowaj plik jednostki trwałości (Persistence.xml) w takiej postaci, w jakiej się znajduje. Można nadpisać właściwości w nim w następujący sposób.

EntityManagerFactory managerFactory = null; 
Map<String, String> persistenceMap = new HashMap<String, String>(); 

persistenceMap.put("javax.persistence.jdbc.url", "<url>"); 
persistenceMap.put("javax.persistence.jdbc.user", "<username>"); 
persistenceMap.put("javax.persistence.jdbc.password", "<password>"); 
persistenceMap.put("javax.persistence.jdbc.driver", "<driver>"); 

managerFactory = Persistence.createEntityManagerFactory("<current persistence unit>", persistenceMap); 
manager = managerFactory.createEntityManager(); 
0

W długowieczne Architektury Session należy stworzyć ramy Plug-in-.

Dlatego należy utworzyć inny repozytorium wątków i grup.

To może być Twój klasy Loader-Tree

  • System-klasy Loader (zwykle URLClassLoader, zawiera Entitys)
    • JPA-Class-ładowarki
      • Załaduj JPA .jar z persistence.xml wewnątrz, określ konfigurację bazy danych z modułu ładującego klasy aplikacji
      • Wymień swoją jednostkę podmiotu zarządzającego/fabrykę sesji.
      • Załaduj wszelkie wtyczki potrzebne do pracy z bazą danych. Wykonaj testy jednostkowe (; D) i testy integracji wtyczek.
2

Można użyć Persistence.createEntityManagerFactory (MAP), aby przejść do wyboru właściwości URL bazy danych i inne ustawienia.

+0

Brzmi nieźle. Pozwól mi spróbować. –