emForRepo = emFactory.createEntityManager(); (1)
DbProductDataProviderFactory productDataProviderFactory = new DbProductDataProviderFactory(tocName, "1.2.3",
new ProductDatabaseBean(emForRepo)); (2)
IRuntimeRepositoryManager runtimeRepositoryManager = new DetachedContentRuntimeRepositoryManager.Builder(
productDataProviderFactory).build();
IRuntimeRepository runtimeRepository = runtimeRepositoryManager.getCurrentRuntimeRepository();
testDeployedData(runtimeRepository);
Auslesen der Produktdaten
Zum Auslesen der Produktdaten zur Laufzeit wird ein DbProductDataProvider
zur Verfügung gestellt. Der DbProductDataProvider
ist eine Implementierung von org.faktorips.runtime.productdataprovider.IProductDataProvider
und bietet Zugriff auf die Produktdaten. Zusätzlich ermöglicht sie Produktdaten auf Aktualität zu prüfen und ggf. neu zu laden, wenn inzwischen neuere Daten zur Verfügung stehen.
ProductDatabase
Der Zugriff auf die Datenbank ist über die Stateless EJB ProductDatabaseBean
gekapselt. Sie erhält einen EntityManager
für die Persistence Unit faktorips-productdataservice-jpa
per Konstruktor(-Injection). Das Business Interface ProductDatabase
enthält die Methode getActiveTocVersion
, die aus der Datenbank die mit dem Status ACTIVE
markierte Version abruft.
Der Server muss ein Data Source mit dem JNDI Namen ips-product-data
zur Verfügung stellen.
DbProductDataProviderFactory
Ein DbProductDataProvider
wird über eine DbProductDataProviderFactory
erstellt. Dieser benötigt neben der ProductDatabase
zusätzlich den Namen und die Modell-Version (siehe Versionierung) des gewünschten Produktdaten-Projekts.
Verwendung mit DetachedContentRuntimeRepository
Sollen Produktdaten aus der Datenbank in einer Anwendung verwendet werden, wird ein DetachedContentRuntimeRepository
benötigt. Dieses wiederum wird von einem DetachedContentRuntimeRepositoryManager
erzeugt. Dieser kümmert sich außerdem darum, die Aktualität der Produktdaten bei jedem Abruf zu überprüfen und ggf. ein neues DetachedContentRuntimeRepository
mit neuem DbProductDataProvider
zur nun aktiven Produktdaten-Version zu erzeugen. Dem Builder des DetachedContentRuntimeRepositoryManager
wird dazu die DbProductDataProviderFactory
übergeben.
1 | Der EntityManager kann in einer JEE (6+) Umgebung auch per Injection gesetzt werden |
2 | Die Modellversion kann in der Anwendung konfiguriert werden oder zur Laufzeit aus dem Modell-TOC gelesen werden |