Migrationsanleitung von 2.0 auf 2.1

Die wichtigste Neuerung von 2.0 auf 2.1 aus Sicht der Anwendungs-Migration ist die Verwendung von Maven. Mit Maven holt sich die Anwendung alle notwendigen Bibliotheken in den jeweils angegebenen Versionen selbst. Auch MyCoRe wird als eine solche Bibliothek eingebunden und muss nun nicht mehr mit heruntergeladen und kompiliert werden.
Hinweis
Die Migrationsanleitung geht von MyCoRe 2.0-fixes oder höher als Ausgangsbasis aus.

Allgemeine Schritte zur Anwendungsmigration

Die eigene Anwendung muss auf den Codestand des Release 2.1 gebracht werden. Dies kann am besten mit Hilfe der aktuellen DocPortal-Version realisiert werden. Da jede Anwendung verschieden ist, und mehr oder weniger stark von DocPortal abweicht, kann an dieser Stelle nicht im Detail auf die jeweilige Vorgehensweise eingegangen werden. Es wird jedoch auf wichtige Änderungen hingewiesen, um Anhaltspunkte für die eigene Migration zu geben. Bei Fragen kann die Community am besten jeweils direkt helfen - einfach mal nachfragen!

Umstellung auf Maven

Für die Umstellung auf Maven muss auf Anwendungsseite nicht viel getan werden. Relevant wird dies vor allem, wenn für die eigene Anwendung auch Anpassungen am MyCoRe-Kern gemacht wurden. Da MyCoRe nun via Maven als mycore.jar eingebunden wird, muss hier ein anderer Weg beschritten werden, um diese Anpassungen einzupflegen. Fragen Sie hierzu am besten direkt auf der Mailingliste nach.

Als Vorlage für die eigene Anwendung ist DocPortal 2.1-fixes zu verwenden. Um die eigene Anwendung Maven-fähig zu machen, sind folgende Schritte notwendig:

  1. altes lib-Verzeichnis löschen und aus neuer DocPortal-Version übernehmen (enthält nur noch maven-ant-tasks-2.1.1.jar)
  2. pom.xml.template aus docportal/config in das config-Verzeichnis der eigenen Anwendung übernehmen und nach pom.xml kopieren - hier können später eigene Anpassungen vorgenommen werden
  3. aktuelle build.xml aus docportal übernehmen und ggf. wieder an eigenen Build-Prozess anpassen
  4. mit dem Aufruf ant resolve wird nun Maven angestossen und holt alle in der pom.xml angegebenen notwendigen Bibliotheken (inkl. der mycore.jar) - dies kann beim ersten Aufruf mehrere Minuten dauern

Modularisierung - zweite Runde

Im Modul-Verzeichnis von DocPortal 2.1-fixes befinden sich nun neben dem Anwendungsmodul docportal weitere Module, deren Bedeutung hier kurz aufgelistet wird:

Modulverzeichnis docportal/modules
ModulBeschreibung
commonenthält Stylesheets, Skripte, Code und XML-Dateien, die für alle Anwendungen, unabhängig vom speziellen Datenmodell oder Layout relevant sind
docportalalle anwendungsspezifischen Dateien - üblicherweise durch eigene Anwendung zu ersetzen
mavenist zur Erstellung von eigenen Anwendungsmodulen, z.B. wie IView2; es bietet also eine zusätzliche Ebene um jar-Dateien zu kopieren
myliwiBeispielmodul als Vorlage für eine mögliche Erweiterung der eigenen Anwendung auf Basis von DocPortal
sampleusersBeispielnutzer, wie sie in DocPortal verwendet werden, können entsprechend durch eigene Nutzer ersetzt bzw. als Vorlage genutzt werden

Im Zuge dieser stärkeren Auftrennung ist auch die searchfields.xml modularisiert worden. Die searchfields.xml wurde aufgeteilt in Suchfelder für Metadaten und Derivate und sind nun im Verzeichnis modules/docportal/config zu finden. Auf diese Art können für jedes Modul weitere Suchfelder definiert werden. Ein Beispiel dafür bietet das myliwi-Modul.

Zur Anpassung der eigenen Anwendung an diese fein-granularere Modulstruktur empfehlen wir das Modulverzeichnis von DocPortal 2.1-fixes zu übernehmen und die eigenen Dateien entsprechend des docportal-Modules als Vorlage im eigenen Anwendungsmodul abzulegen.

Weitere Schritte

Seit dem letzten Release wurde vor allem viel im MyCoRe-Kern überarbeitet. Dadurch ändern sich teilweise auch Schnittstellen. Ein vollständiger Überblick kann an dieser Stelle leider nicht gegeben werden. Sollten Dinge nach der Umstellung nicht mehr funktionieren, bitten wir um Rückmeldung an die MyCoRe-User-Liste. Wir ergänzen die Punkte dann an dieser Stelle.

Bereits bekannte nötige Anpassungen sind:

Bei Benutzung des xsl-Parameters: CurrentGroups
dieser existiert mehr nicht, stattdessen ist die xsl-Funktion isCurrentUserInRole() zu verwenden. Dazu muss xmlns:mcrxsl="xalan://org.mycore.common.xml.MCRXMLFunctions" in (documents).xsl definiert sein. Beispiel: xsl:if test="mcrxsl:isCurrentUserInRole('AdminGroup')"

Datenmigration

Es gibt zwei Möglichkeiten die Daten einer bestehenden Anwendung zu migrieren. Läuft die MyCoRe-Anwendung als WAR im Webserver, kann das Update via Kommandozeile eingespielt und erst später die Anwendung selbst auf Version 2.1 und somit den Zugriff auf die migrierten Daten aktualisiert werden (offline).

Wird keine WAR-Datei genutzt oder sind viele Daten zu migrieren und während des Migrationsvorganges soll die Anwendung nicht nur lesend ("read only") nutzbar sein, ist die Online-Migration eine Alternative.

Offline-Migration

Während die 2.0er-Web-Anwendung läuft wird via Kommandozeile der Datenbestand auf 2.1 aktualisiert. Dazu muss in den mycore.private.properties der Eintrag MCR.Components.Exclude "migration20-21" entfernt werden, damit die Migrations-Kommandos verfügbar sind. Die Anwendung danach wie gehabt bauen (ant create.jar create.scripts create.webapp).

Nun kann die MyCoRe-Kommandozeile (CLI) aufgerufen und die Migrationskommandos genutzt werden. Dort kann die Web-Anwendung in den Nur-Lese-Modus versetzt werden:

set website read only Datenmigration wird aktuell durchgeführt

Im nächsten Schritt, kann die Datenmigration gestartet werden:

migrate xmltable

Dies kann je nach Datenbestand einige Zeit dauern! Wenn das Kommando erfolgreich abgeschlossen wurde, kann nun auch die Webanwendung aktualisiert werden (neu erstelltes WAR einspielen). Zum Abschluss der Migration kann man, wie im letzten Abschnitt beschrieben, aufräumen.

Online-Migration

Die Online-Migration erfolgt wie die Offline-Migration, nur mit folgenden Unterschieden:
In der mycore.private.properties muss das Kommentarzeichen vor folgender Anweisung entfernt werden:

#MCR.Metadata.Store.DefaultClass=org.mycore.datamodel.MCRMigratingXMLStore

Damit werden Metadaten, sowohl in der Datenbank als auch im IFS gesucht und ggf. migriert (auf den IFS-Store mit Versionierung).

Diese Migration kann durch den Befehl migrate xmltable beschleunigt werden, der dann viele Warnungen erzeugt. Diese können in dem Fall ignoriert werden. Sind alle Daten migriert, befinden sich selbige im IFS2 und man kann das Property wieder deaktivieren.

Abschluss

Nach der Migration kann man bei MCR.Components.Exclude wieder "migration20-21" eintragen, die Anwendung neu bauen und starten und dann in der Datenbank die Tabelle MCRXMLTABLE löschen.

Weiterhin muss im "data"-Verzeichnis der Anwendung das "ehcache"-Verzeichnis gelöscht werden, weil mit Version 2.1 eine neuere Version als Second-Level-Cache benutzt wird, die mit dem alten Cache-Format Probleme hat und Warnungen erzeugt.

Integration des neuen Bildbetrachters (IView2)

Im Gegensatz zur ersten Version des Bildbetrachters, bietet die Version 2 keine Option zum Deaktivieren des Image-Caches mehr an. Es werden für alle Bilder Kacheln angelegt, auf deren Basis der deutlich schnellere und funktional umfangreichere Bildbetrachter arbeitet. Damit der neue Bildbetrachter genutzt werden kann, muss dieser aktiviert und die bereits erfassten Bilder neu gekachelt werden.

Vorbereitung

Damit die IView2-Komponente von MyCoRe zur Verfügung steht, muss der folgende Abschnitt in der pom.xml (zu finden im config-Verzeichnis der Anwendung) vorhanden sein:

      <dependencies>
        ...
        <dependency>
          <groupId>org.mycore</groupId>
          <artifactId>iview2-preview</artifactId>
          <version>${project.version}</version>
        </dependency>
      </dependencies>

Im zweiten Schritt muss die mycore.properties.private dahin gehend erweitert werden, dass das maven-Modul verwendet und die (veraltete) iview-Komponente ausgeschlossen wird.

 MCR.Modules.Application=common,docportal,sampleusers,maven

#exclude these mycore components
 MCR.Components.Exclude=migration20-21,iview
Hinweis
Bei der Angabe der Module ist die Reihenfolge relevant, da Inhalte bewusst überschrieben werden! Das Maven-Modul muss daher nach dem common- und docportal-Modul (bzw. dem eigenen Anwendungs-Modul) stehen.

Dadurch wird sichergestellt, dass die entsprechenden Bibliotheken geladen werden und der Anwendung bei Betrieb zur Verfügung stehen. Der Aufruf ant resolve zeigt nun, dass IView2 als "application module" geladen wurde. Weiterhin sollte am Ende des Aufrufes ein BUILD SUCCESSFUL das erfolgreiche Laden aller benötigten Bibliotheken bestätigen. Ist dem nicht so, prüfen Sie, ob ein Zugang zum Internet vorhanden ist, da die Anwendung die nötigen Quellen von verschiedenen Servern bezieht. Falls kein Zugang zum Netz möglich ist, muss das .m2-Verzeichnis von einem anderen Rechner mit Netzzugang, auf dem die gleiche Anwendung bzw. ein DocPortal läuft, kopiert werden. Hier hilft auch gerne die Community weiter!

Kacheln der Bilder

Nach erfolgreicher Konfiguration müssen nun Skripte und Webanwendung neu erstellt werden:

ant create.jar create.scripts create.webapp

Daraufhin kann die MyCoRe-Kommandozeile gestartet werden, um die in MyCoRe abgelegten Bilder für den neuen Bildbetrachter aufzubereiten. Konkret bedeutet dies, dass Kacheln für die verschiedenen Auflösungen erstellt werden:

build/bin/mycore.sh bzw. build/bin/mycore.bat

help tile

Der Tile-Befehl erstellt die Kacheln. Für alle Derivate lautet der Aufruf dann entsprechend

tile images of all derivates

Pro Bild benötigt dieser Vorgang ca. 2-3 Sekunden. Da das Kacheln asynchron abläuft, kann die Kommandozeile jederzeit mit exit verlassen werden. In diesem Fall wird der Vorgang unterbrochen und arbeitet im Hintergrund weiter, sobald zum Beispiel die Webanwendung (neu) gestartet wird. Wird ein Bild aufgerufen, für das noch keine Kacheln erstellt wurden, wird der IView2 nicht dargestellt. Die Anwendung kann aber trotzdem ganz normal genutzt werden.

Um den alten Imagecache zu löschen muss in der MyCoRe-Kommandozeile der Befehl delete image cache for all derivates aufgerufen werden. Danach kann in den mycore.properties.private die imaging-Komponente ausgeschlossen werden.

#exclude these mycore components
 MCR.Components.Exclude=migration20-21,imaging,iview

Webanwendung

Gegebenenfalls müssen noch Stylesheets (XSL) angepasst werden. Einige Templates wurden übernommen, z.B. derivateView, andere werden nicht mehr unterstützt (alt iview.getSupport, neu iview2.getSupport). Die Einbindung kann z.B. wie folgt aussehen:

<xsl:call-template name="derivateView">
  <xsl:with-param name="derivateID" select="$deriv" />
</xsl:call-template>

Weitere Informationen dazu entnehmen Sie bitte der Dokumentation zum Bildbetrachter.