2021.06 2022.06

Datenbank - JPA

Diese Dokumentationsseite beschreibt die Integration der Java Persistence API (JPA) ab Release 2016.06.

Allgemeines

Mit Release 2016.06 wurde die Datenbankanbindung in MyCoRe von der direkten Nutzung von Hibernate auf die Java Persistence API (JPA) umgestellt. Dies hat den Vorteil, dass bei Bedarf die darunter liegende Hibernate-API gegen eine andere JPA Implementation ausgetauscht werden kann.

Konfiguration

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.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
  version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
  <persistence-unit name="MyCoRe" transaction-type="RESOURCE_LOCAL">
     
    <mapping-file>META-INF/mycore-base-mappings.xml</mapping-file>
    <mapping-file>META-INF/mycore-ifs-mappings.xml</mapping-file>
    <mapping-file>META-INF/mycore-iview2-mappings.xml</mapping-file>
    <mapping-file>META-INF/mycore-pi-mappings.xml</mapping-file>
    <mapping-file>META-INF/mycore-user2-mappings.xml</mapping-file>
    
    <properties>

      <!--  PostgreSQL -->
      <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
      <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://127.0.0.1/MY_DATABASE?currentSchema=MY_SCHEMA" />

      <property name="javax.persistence.jdbc.user" value="DATABASE_USER" />
      <property name="javax.persistence.jdbc.password" value="DATABASE_PASSWORD" />
      
      <property name="hibernate.default_schema" value="" />
      <property name="hibernate.hbm2ddl.auto" value="update" />

      <!-- second-level cache  -->
      <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.internal.NoCachingRegionFactory" />
      <property name="hibernate.cache.use_second_level_cache" value="false" />
      <property name="hibernate.cache.use_query_cache" value="false"/>
      
      <!-- Set batch_size to "0" in case of SQL batch Errors -->
      <property name="hibernate.jdbc.batch_size" value="2000" />
      <property name="hibernate.default_batch_fetch_size" value="100" />
      
      <!-- Echo all executed SQL to stdout -->
      <property name="hibernate.show.sql" value="true" />
      <property name="hibernate.format.sql" value="true" />
      
      <!-- configuration pool via c3p0 -->
      <!-- HowTo: http://howtodoinjava.com/hibernate/hibernate-c3p0-connection-pool-configuration-tutorial/ -->
      <property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider" />
      <property name="hibernate.c3p0.min_size" value="5" />
      <property name="hibernate.c3p0.max_size" value="60" />
      <property name="hibernate.c3p0.acquire_increment" value="2" />
      <property name="hibernate.c3p0.max_statements" value="30" />
      <property name="hibernate.c3p0.timeout" value="1800" />

    </properties>
  </persistence-unit>
</persistence>

Konfigurationsdatei: resources/META-INF/persistence.xml

Datenbank-Treiber

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.

Hinweis bei Performance-Problemen

Sollt die Anwendung wiederholt abstürzen, da es mit der Anzahl der freien Datenbankverbindungen Ausnahmen gibt, könnte folgende zusätzliche Konfiguration helfen. Tote Sessions werden dann automatisch geschlossen.

1
2
3
      <property name="hibernate.c3p0.unreturnedConnectionTimeout" value="1800" />
      <property name="hibernate.c3p0.debugUnreturnedConnectionStackTraces" value="true" />
  

Konfigurationsdatei: resources/META-INF/persistence.xml