Diese Dokumentationsseite beschreibt die Integration der Java Persistence API (JPA)
Die Java Persistence API (JPA) ist eine Spezifikation für das Speichern, Aktualisieren und Abrufen von Daten in Java-Anwendungen. MyCoRe verwendet JPA, um die Datenbankanbindung zu realisieren.
Grundsätzlich bringt der MyCoRe-Kern bereits alle erforderlichen Grundeinstellungen mit. Lediglich die
Konfigurationsdatei persistence.xml
muss in den Konfigurationsordner abgelegt werden. Hier sind nur noch einige wenige Parameter
wie der Datenbankname MY_DATABASE
, das Schema MY_SCHEMA
, der Datenbankbenutzer DATABASE_USER
und das Passwort DATABASE_PASSWORD
anzupassen.
Je nach verwendeter MyCoRe-Komponente müssen weitere Mapping-Dateien hinzugefügt oder entfernt werden.
MyCoRe-Komponente | Mapping-Datei |
---|---|
mycore-base | META-INF/mycore-base-mappings.xml |
mycore-user2 | META-INF/mycore-user2-mappings.xml |
mycore-acl | META-INF/mycore-acl-mappings.xml |
mycore-iview2 | META-INF/mycore-iview2-mappings.xml |
mycore-pi | META-INF/mycore-pi-mappings.xml |
mycore-viewer | META-INF/mycore-viewer-mappings.xml |
mycore-jobqueue | META-INF/mycore-jobqueue-mappings.xml |
|
|
Konfigurationsdatei: resources/META-INF/persistence.xml
Außerdem muss für die Verwendung von HikariCP der Treiber in der pom.xml der Anwendung hinzugefügt werden.
|
|
pom.xml
Ab Release 2024.06 wird empfohlen die Konfiguration über die mycore.properties zu realisieren. Die persistence.xml wird weiterhin unterstützt, jedoch bietet die Konfiguration per mycore.properties einige Vorteile.
|
|
Konfigurationsdatei: mycore.properties
Die Konfiguration erfolgt über PersistenceUnitDescriptors, die die Konfiguration der JPA-Verbindung steuern. Es können verschiedene
Implementierungen von PersistenceUnitDescriptors verwendet werden, welche über das Konzept der konfigurierbaren
Klasseninstanzen mit dem Property MCR.JPA.PersistenceUnit.DescriptorName.Class
konfiguriert werden.
Der verwendete PersistenceUnitDescriptor wird über das Property MCR.JPA.PersistenceUnitName
mit dem
Standardwert MyCoRe
Konfiguriert.
MyCoRe bringt die beiden Standardimplementierungen org.mycore.backend.jpa.MCRPersistenceUnitDescriptor
und
org.mycore.backend.jpa.MCRSimpleConfigPersistenceUnitDescriptor
mit.
org.mycore.backend.jpa.MCRPersistenceUnitDescriptor
bietet folgende Konfigurationsmöglichkeiten:
Property | Persistence.xml equivalent | Standardproperty | Standardwert |
---|---|---|---|
MCR.JPA.PersistenceUnit.MyCoRe.PersistenceProviderClassName | persistence/persistence-unit/provider | MCR.JPA.ProviderClassName | org.hibernate.jpa.HibernatePersistenceProvider |
MCR.JPA.PersistenceUnit.MyCoRe.TransactionType | persistence/persistence-unit@transaction-type | MCR.JPA.TransactionType | RESOURCE_LOCAL |
MCR.JPA.PersistenceUnit.MyCoRe.ValidationMode | persistence/persistence-unit/validation-mode | MCR.JPA.ValidationMode | AUTO |
MCR.JPA.PersistenceUnit.MyCoRe.SharedCacheMode | persistence/persistence-unit/shared-cache-mode | MCR.JPA.SharedCacheMode | NONE |
MCR.JPA.PersistenceUnit.MyCoRe.ManagedClassNames | persistence/persistence-unit/class | MCR.JPA.ManagedClassNames | |
MCR.JPA.PersistenceUnit.MyCoRe.MappingFileNames | persistence/persistence-unit/mapping-file | MCR.JPA.MappingFileNames | Je nach verwendeten Modul |
Die Properties innerhalb des <properties>
Elements in der persistence.xml
werden über die Standard JPA-Property-Namen in Kombination mit dem Prefix MCR.JPA.PersistenceUnit.MyCoRe.Properties.
konfiguriert, z.B.
|
|
Konfigurationsdatei: mycore.properties
JPA Property | MyCoRe Property |
---|---|
jakarta.persistence.jdbc.driver | MCR.JPA.Driver |
jakarta.persistence.jdbc.url | MCR.JPA.URL |
jakarta.persistence.jdbc.user | MCR.JPA.User |
jakarta.persistence.jdbc.password | MCR.JPA.Password |
hibernate.cache.use_second_level_cache | MCR.JPA.Cache.UseSecondLevelCache |
hibernate.cache.use_query_cache | MCR.JPA.Cache.UseQueryCache |
hibernate.cache.region.factory_class | MCR.JPA.Cache.RegionFactoryClass |
hibernate.globally_quoted_identifiers_skip_column_definitions | MCR.JPA.GloballyQuotedIdentifiers.SkipColumnDefinitions |
hibernate.globally_quoted_identifiers | MCR.JPA.GloballyQuotedIdentifiers |
hibernate.show_sql | MCR.JPA.ShowSql |
hibernate.hbm2ddl.auto | MCR.JPA.Hbm2ddlAuto |
hibernate.default_schema | MCR.JPA.DefaultSchema |
hibernate.connection.provider_class | MCR.JPA.Connection.ProviderClass |
hibernate.hikari.maximumPoolSize | MCR.JPA.Connection.MaximumPoolSize |
hibernate.hikari.minimumIdle | MCR.JPA.Connection.MinimumIdle |
hibernate.hikari.idleTimeout | MCR.JPA.Connection.IdleTimeout |
hibernate.hikari.maxLifetime | MCR.JPA.Connection.MaxLifetime |
hibernate.hikari.connectionTimeout | MCR.JPA.Connection.ConnectionTimeout |
hibernate.hikari.leakDetectionThreshold | MCR.JPA.Connection.LeakDetectionThreshold |
hibernate.hikari.registerMbeans | MCR.JPA.Connection.RegisterMbeans |
Die Klasse MCRSimpleConfigPersistenceUnitDescriptor erweitert MCRPersistenceUnitDescriptor und bietet einfachere Alternativen zur Konfiguration der Properties, um die Länge der Properties zu reduzieren und die Namenskonventionen von MyCoRe einzuhalten.
Der für den Zugriff auf die Datenbank notwendige JDBC-Treiber (i.d.R. eine JAR-Datei) kann im lib
Ordner des Konfigurationsverzeichnisses abgelegt werden.
Alternativ kann der Treiber auch in der pom.xml
der Anwendung als Dependency hinzugefügt werden. Dies
funktioniert jedoch nur, wenn die Anwendung als WAR-Datei verpackt wird.
Sollten in der Anwendung vermehrt Meldungen wie Connection leak detection triggered
auftauchen, dann ist
das ein Hinweis, dass Verbindungen nicht rechtzeitig geschlossen werden. Das kann daran liegen, dass ein
langwieriger Prozess läuft. In diesem Fall kann die hibernate.hikari.leakDetectionThreshold
erhöht werden.
HikariCP überprüft in regelmäßigen Abständen, ob eine Verbindung länger als die angegebene Zeit offen ist. Ist das
der Fall, wird eine Warnung ausgegeben. Der Standardwert beträgt 2 Sekunden. Der Wert wird in Millisekunden angegeben.
Sollte der Wert auf 0 gesetzt werden, wird die Überprüfung deaktiviert.
Sollte die Meldung jedoch auch bei kurzen Prozessen auftreten, dann sollte die Anwendung genauer untersucht werden,
um die Ursache zu finden. Es handelt sich in der Regel um ein Problem im Programmcode der Anwendung, das behoben
werden muss.
Es ist nicht empfehlenswert, die Verbindungen automatisch durch den Pool schließen zu lassen.
HikariCP does not, in principle, believe that the pool should coverup connection leaks. We disagree with the reasoning behind C3P0's unreturned connection handling. The leak detection is there to help you pinpoint the source of the leak. That should provide enough clues to track down the configuration or coding error.
|
|
Konfiguration per persistence.xml: resources/META-INF/persistence.xml
|
|
Konfiguration per mycore.properties: mycore.properties