Migration Release 2015.05 nach 2016.06

Transcrição

Migration Release 2015.05 nach 2016.06
Migration Release 2015.05 nach
2016.06
by Jens Kupferschmidt, Kathleen Neumann
2016-07-25
Diese Seite fasst alle Informationen für die Migration vom
LTS-Release 2015.05 zum LTS-Release 2016.06 zusammen.
Table of contents
1 Voraussetzungen für das Release................................................................................. 2
1.1 Versionsnummern für Produkte von Open Source Drittanbietern...........................2
2 Umstellung auf log4j 2.x..............................................................................................2
3 Umstellung auf die Java-Persistence-API (JPA).......................................................... 3
4 Nutzung der neuen WebCLI mit Websockets..............................................................3
5 Solr................................................................................................................................ 3
6 ACLs............................................................................................................................. 3
7 Nutzung von Apache-Ant als Build Tool.................................................................... 4
7.1 Laden der erforderlichen Jars via pom.xml............................................................ 4
7.2 Nutzung der BuildTools..........................................................................................5
Migration Release 2015.05 nach 2016.06
1 Voraussetzungen für das Release
Die Systemanforderungen ( ../../documentation/getting_started/requirements.html) 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
1.1 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
2 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 ( 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
Seite 2 von 5
Migration Release 2015.05 nach 2016.06
ref="Console" /> </root> <logger name="org.hibernate" level="error" /> <logger
name="org.mycore.frontend.editor.validation" level="info" /> ... </loggers> </
configuration>
3 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 ( http://www.mycore.de/
viewvc/viewvc.cgi/mycore/branches/mycore-2016.06.0.x/mycore-base/src/main/
resources/configdir.template/) .
Wichtig ist, dass die persistence.xml in einem META-INF -Verzeichnis im
CLASSPATH liegen muss.
4 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 .
5 Solr
ToDo
6 ACLs
ToDo
Seite 3 von 5
Migration Release 2015.05 nach 2016.06
7 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.
7.1 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>mavendependency-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>
Seite 4 von 5
Migration Release 2015.05 nach 2016.06
<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>
7.2 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
Seite 5 von 5