Blog

Artifactory mit einer "filesystem-oracle"-Konfiguration

Zu einer guten Entwicklungsinfrastruktur gehören viele Dinge. Beginnend mit einem SDK geht es weiter mit einem Quelltext-Versionierungssystem und einer IDE bis hin zu einem Build-Server für automatisierte Builds u.v.m. Ein sehr wichtiges Element in dieser natürlichen Ordnung ist allerdings übergreifend: das Repository. In einem Repository werden verschiedene Entwicklungsartefakte gespeichert. Artifactory ist eine solche Repository-Lösung und die Erstellung einer „filesystem-oracle“-Konfiguration ist Gegenstand dieses Beitrags.

Mit Artifactory können Daten auf zwei Weisen persistiert werden. Bei der ersten Variante werden alle Daten in einer Datenbank gespeichert, die Binärdaten in BLOBs, bei der zweiten Variante werden die Binärdaten direkt auf dem Dateisystem und nur noch Metainformationen in einer Datenbank abgelegt. Letztere Variante ist natürlich vorzuziehen, da weniger Applikationsschichten bei Zugriffen involviert sind und der Server dadurch nicht so stark ausgelastet wird.

Im Auslieferungszustand bietet Artifactory die folgenden Konfigurationen zur Speicherung an.

Datenspeicherung in BLOBs:
derby
mysql
postgresql
oracle10
mssql

Datenspeicherung auf dem Dateisystem:
filesystem-mysql
filesystem-derby
filesystem-mssql

Diese Konfigurationen sind im heruntergeladenen Archiv zu finden unter
etc/repo/<Konfigurationsname>/repo.xml

Viele große Unternehmen benutzen das Oracle RDBMS. Es ist robust und performant. Wünschenswert ist es, Artifactory so zu konfigurieren, dass die Datenbank des Unternehmens genutzt wird. Jedoch möchte man aus bereits genanntem Grund die Binärdaten auf das Dateisystem auslagern. Für diesen Fall fehlt leider eine entsprechende „filesystem-oracle“-Konfiguration.

Um zu verstehen, wie die Konfigurationen von Artifactory aufgebaut sind, muss man wissen, dass es auf Apache Jackrabbit basiert. Jackrabbit, das die JSRs 170 und 283 implementiert, ist der Teil von Artifactory, der für die Datenspeicherung zuständig ist. Die Technik ist denkbar einfach, es werden zu speichernde Daten mittels JDBC in einer beliebigen Datenbank abgelegt, für die es einen entsprechenden Treiber gibt. Die Konfiguration, die angelegt werden soll, bezieht sich also ausschließlich auf Jackrabbit.

Entscheidend für die Datenspeicherung ist das „DataStore“-Tag in der Konfigurations-XML-Datei. Im zugehörigen Attribut „class“ wird der vollständige Name der Klasse hinterlegt, die für die Datenspeicherung verantwortlich ist. Artifactory bringt zwei relevante mit:

<DataStore class="org.artifactory.jcr.jackrabbit.ArtifactoryDbDataStoreImpl">
<DataStore class="org.artifactory.jcr.jackrabbit.ArtifactoryFileDataStoreImpl">

Die Klassennamen sind sprechend (gute Arbeit, so soll es sein). Trotzdem eine Erläuterung:
ArtifactoryDbDataStoreImpl – Zuständig für Datenspeicherung in BLOBs
ArtifactoryFileDataStoreImpl – Zuständig für Datenspeicherung auf Dateisystemen

Zusammenfassend sei gesagt, dass des Rätsels Lösung das Ersetzen des „class“ Attributs durch „org.artifactory.jcr.jackrabbit.ArtifactoryFileDataStoreImpl“ im „DataStore“-Tag der mitgelieferten „oracle10“-Konfiguration ist.
Außerdem werden die Kindelemente

<param value="true"/>
<param value="1g"/>
<param value="${rep.home}/cache"/>

durch

<param value="${rep.home}/filestore"/>

ersetzt. Letzteres ist der Pfad zum Verzeichnis auf dem Dateisystem, in dem die Binärdaten abgelegt werden.

Und damit ist eine weitere Open Source-Lösung in eine Enterprise-Infrastruktur einpflegbar. Leider bleibt es ein Rätsel, warum eine solch gefragte Repository-Konfiguration nicht mit ausgeliefert wird.

Holisticon AG — Teile diesen Artikel

Über den Autor

Antwort hinterlassen