Migration Release 2015.05 nach 2016.06

Voraussetzungen für das Release

Die Systemanforderungen haben sich für das Release 2016.06 wie folgt geändert:

  • JDK 1.8 (vorher 1.7)
  • Servlet Container 3.1 (vorher 3.0)

Diese Systemkomponenten sind in folgenden Distributionen enthalten, welche bei einzelnen Community-Mitgliedern im Einsatz sind.

  • Open SuSE Leap 42.1
  • SuSE SLES 12 SP 1
  • Ubuntu 16.04 LTS

Versionsnummern für Produkte von Open Source Drittanbietern

MyCoRe und die darauf basierenden Anwendungen nutzen eine Reihe von Bibliotheken anderer Open-Source-Projekte. Die für das Release 2016.06 verwendeten sind hier aufgelistet, sofern sie für die Ergänzung duch eigenen Code relevant sind. Einige Bibliotheken werden nur intern benötigt oder befriedigen Abhängigkeiten. Diese sind hier nicht erwähnt.

  • jdom2 - 2.0.6
  • log4j - 2.6.1
  • postgres - 9.4-1206-jdbc42 - optional
  • servlet - 3.1.0

Umstellung auf log4j 2.x

Mit Umstellung auf das Release 2016.06 wurde auch der Einsatz log4j mit Version 2.x beschlossen. Der folgende Abschitt beschreibt die notwendigen Umstellungen eigenen Java-Codes und der log4j Konfiguration. Eine Übersichte der erforderlichen Änderungen bekommt man unter https://logging.apache.org/log4j/2.x/manual/migration.html . Die wichtigsten Punkte sind:

  • Der Import erfolgt jetzt von org.apache.logging.log4j .
  • Die Instanz des Loggers wird jetzt mit LogManager.getLogger([ggf. xyz.class]) geholt.
  • Aus der Datei mycore.properties können alle Einträge log4j.logger.... für den alten Logger entfernt werden.
  • Die Konfiguration des Logging-Systemes muss nun in der Datei log4j2.xml unter src/main/resources festgelegt werden (siehe unten).
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
  <appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{ISO8601} %-5p %X{loginId} %c{1}: %m%n%ex" />
    </Console>
  </appenders>
  <loggers>
    <root level="info">
      <appender-ref ref="Console" />
    </root>
    <logger name="org.hibernate" level="error" />
    <logger name="org.mycore.frontend.editor.validation" level="info" />
    ...
  </loggers>
</configuration>

Umstellung auf die Java-Persistence-API (JPA)

Mit Release 2016.06 wurde die Persistence-API für Datenbanken auf JPA-Nutzung umgestellt. Damit entfallen die Hibernate-Konfigurationen ersatzlos. Die Konfiguration der Datenbankanbindung findet statt dessen in der persistence.xml statt. Dabei können die Einträge aus der hibernate.cgf.xml in die persistence.xml übernommen werden. Eine Vorlage der Konfiguration befindet sich im configdir.template .

Wichtig ist, dass die persistence.xml in einem META-INF -Verzeichnis im CLASSPATH liegen muss.

Nutzung der neuen WebCLI mit Websockets

Das LTS 2016.06 bringt eine neue WebCLI mit, die Websockets nutzt. Verwendet man einen Tomcat hinter einem Apache mit mod_proxy_ajp, sind folgende Anpassungen nötig.

  • ggf. Aktualisierung des Apache auf 2.4.5 (oder höher)
  • Installation von proxy_wstunnel (unter Ubuntu mit sudo a2enmod proxy_wstunnel )
  • Anpassung der Konfiguration (am Beispiel MIR):
        #Forward all WebSocket connections via HTTP
        ProxyPass /mir/ws/ ws://localhost:{HTTP-Port}/mir/ws/

        #Forward other via AJP
        ProxyPass /mir ajp://localhost:{AJP-Port}/mir
        ProxyPassReverse /mir
        ajp://localhost:{AJP-Port}/mir
      

Falls es auch noch zukünftige WebSocket-Einsätze geben sollte, dann sollten diese unterhalb von $WebAppBaseDir/ws/{Komponente oder Modul}/... laufen. Im Falle der Web-CLI für MIR ist das: /mir/ws/mycore-webcli/socket .

Solr

ToDo

ACLs

ToDo

Nutzung von Apache-Ant als Build Tool

Einige ältere, oft komplexe Anwendungen basieren in ihrem Build-Prozess noch auf Apache-Ant. Auch mit Release 2016.06 kann die Anwendung grundsätzlich so weiter gebaut werden. Dabei sind einige Dinge jedoch zu beachten.

Laden der erforderlichen Jars via pom.xml

Das MyCoRe Release ist komplett auf den Maven Build Prozess ausgerichtet. Für die Nutzung unter Ant-Build ist das MyCoRe-complete.jar erforderlich. Dieses und alle sonstigen erforderlichen JARs können via Maven pom.xml integriert werden. Leider ist die Apache Maven-Ant-Task obsolete und wird seit 2014 nicht mehr unterstützt. Daher wurde der folgende, recht simple Weg genutzt, alle erforderlichen Dateien entsprechend zu laden. Grundlage bilde eine eigene pom.xml , welche verarbeitet wird. Nachfolgend ein Beispiel:

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  
  <groupId>org.mycore</groupId>
  <artifactId>application-model</artifactId>
  <version>5.1</version>
  
  <properties>
    <mycore.version>2015.05.0.1-SNAPSHOT</mycore.version>
    <postgres.version>9.4-1206-jdbc42</postgres.version>
    ...
  </properties>
  
  <pluginRepositories>
    <pluginRepository>
      <id>MyCoRe HQ</id>
      <url>http://artifactory.mycore.de/mycore-releases</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </pluginRepository>
    <pluginRepository>
      <id>MyCoRe HQ Snapshots</id>
      <url>http://artifactory.mycore.de/mycore-snapshots</url>
      <releases>
        <enabled>false</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </pluginRepository>
  </pluginRepositories>
  
  <repositories>
    <repository>
      <id>local</id>
      <url>file:///home/dptadmin/.m2/repository</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
    <repository>
      <id>MyCoRe HQ</id>
      <url>http://artifactory.mycore.de/mycore-releases</url>
      <snapshots>
        <enabled>false</enabled>
        <updatePolicy>always</updatePolicy>
        <checksumPolicy>warn</checksumPolicy>
      </snapshots>
    </repository>
    <repository>
      <id>MyCoRe HQ Snapshots</id>
      <url>http://artifactory.mycore.de/mycore-snapshots</url>
      <releases>
        <enabled>false</enabled>
        <updatePolicy>always</updatePolicy>
        <checksumPolicy>warn</checksumPolicy>
      </releases>
      <snapshots>
        <enabled>true</enabled>
        <updatePolicy>always</updatePolicy>
        <checksumPolicy>warn</checksumPolicy>
      </snapshots>
    </repository>
  </repositories>
  
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <configuration>
          <outputDirectory>
            ${build.directory}/lib
          </outputDirectory>
        </configuration>
      </plugin>
    </plugins>
  </build>
  
  <dependencies>
    <dependency>
      <groupId>org.mycore</groupId>
      <artifactId>mycore-complete</artifactId>
      <version>${mycore.version}</version>
    </dependency>
    ...
    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>${postgres.version}</version>
    </dependency>    
  </dependencies>
</project>

Nun kann der Aufruf über Ant wie folgend ausgeführt werden. dabei werden alle JARs in das Verzeichnis lib unter dem angegebenen Parameter build.directory gespeichert.

<target name="resolve" description="resolve libraries">
  <echo level="info">Resolve jars with maven</echo>
  <exec executable="/usr/local/bin/mvn">
    <arg value="-fpom.xml" />
    <arg value="-Dbuild.directory=..." />
    <arg value="dependency:copy-dependencies" />
  </exec>
</target>

Nutzung der BuildTools

MyCoRe birngt im mycore-complete.jar die Komponente buildtools und die Datei integrate.xml mit. Somit werden für die folgenden AntTasks Ergänzungen aus dem Kern geladen. Die Auswahl der zu bearbeitenden Komponenten erfolgt über das Property MCR.Components.Exclude .

  • complie - Ergänzt Compile-Läufe in der Anwendung
  • config - Ergänzt Konfigurationsdateien in der Anwendung
  • create.default-rules - Ergänzt Permission Konfigurationen in der Anwendung
  • create.scripts - Ergänzt Skripte im CLI der Anwendung
  • create.users - Ergänzt Benutzerdaten in der Anwendung
  • i18n - ergänzt Übersetzungsdateien in der Anwendung
  • webapp - ergänzt Dateien im Web-Bereich der Anwendung

Die buildtools werden in der project -Zeile der build.xml mit xmlns:mcr="antlib:org.mycore.buildtools" definiert. Danach stehen folgende AntTasks zusätzlich zur Verfügung:

  • mcr:integrate target="..." classpathref="build.classpath" - initialisiert den Aufruf der integrate.xml über die nicht-ausgeschlossenen Komponenten
  • mcr:config propertyfile="${build.config}/mycore.properties" mergefile="..." - mischt die im Attribut mergefile benannte Datei in das propertyfile
  • mcr:config action="addInclude" "propertyfile="${build.config}/mycore.properties" kex="MCR...." value="..." - ergänzt in der Property-Datei propertyfile das Item key um den angegebenen value

 Jens Kupferschmidt, Kathleen Neumann - 2016-07-25