Tanze Samba mit mir… – ARIS-Reports und jcfis

22.03.2014 |  | Allgemein | Kommentare geschlossen

Verschiedene Gründe sprechen dafür, per ARIS-Report auf eine Datei zugreifen zu wollen, etwa um eine eine Konfigurationsdatei einzulesen, oder ein Reportergebnis abzulegen. So lange die Datei auf dem ARIS-Server liegt, auf dem auch der Report läuft, kommt man mit der Reportklasse Packages.java.io.File, also der Java-Klasse java.io.File weiter. Liegt sie auf einem entfernten Rechner oder wird für den Zugriff irgendeine Form der Authentifizierung benötigt, so sind für den Zugriff weitergehende Mechanismen erforderlich.

Für eine ganze Reihe von Zugriffsmöglichkeiten erweist sich der zu treibende Aufwand als überschaubar und mit Java-Bordmitteln beherrschbar. Liegt das Dokument zum Beispiel auf einem Server, über den per HTTP zugegriffen werden kann, kann der Zugriff zum Beispiel wie folgt realisiert werden:

Mit einfachen Mitteln kann man diese Form des Dateizugriffs auf Verbindungen erweitern, die eine Authentifizierung erfordern, alleine für eine in der Praxis wichtige Art der Verbindung geht dies nicht: Auf Windows-Verzeichnisse kann auf diese Weise nicht korrekt zugegriffen werden. Genauer gesagt tritt ein Problem dann auf, wenn beim Zugriff auf die Windows-Verzeichnisse ein Benutzer benötigt wird.

Kann auf ein Windows-Verzeichnis ohne Authentifizierung zugegriffen werden, so reicht es mit oben gezeigter Funktion aus, einfach

aufzurufen. Wer die Syntax für den Aufruf einschließlich Authentifizierung recherchiert, wird vermutlich

probieren, und scheitern. Der Aufruf funktioniert nicht. Der Hintergrund ist, dass natürlich Microsofts Formen des Dateizugriffs und der Dateifreigabe sich keinesfalls in die Welt der Internetstandards einpassen. Auch wenn der Parameter in (**) den formalen Konventionen einer URL genügt: Einem von Java interpretierbaren Standard für eine Authentifizierung genügt die Windowsauthentifizierung nicht. Selbst bei (*) ist festzuhalten, dass sich das Betriebssystem Windows um den Dateizugriff kümmert, nicht etwa eine Java-Implementierung, was den Versuch der Rettung nahelegt: Man sorgt eben dafür, dass sich das Betriebssystem schon authentifiziert. Dazu lässt man den ARIS-Serverdienst unter einem Benutzer laufen, der ohne zusätzliche Anmeldung Zugriff auf den Share besitzt.

Aus zwei Gründen ist diese Lösung aber extrem unbefriedigend: Zum einen wird man zumindest in einer größeren Infrastruktur zu Recht Mühe haben, den Administrator davon zu überzeugen, den Benutzer, unter dem der Windows-Dienst des ARIS-Servers läuft, zu ändern, zum anderen funktioniert dies nicht in einer Umgebung, die mehrere Domänen aufweist, zum Beispiel, weil es für Systementwicklung, Integrationstest und Produktion drei verschiedene Windows-Domänen gibt, die man sicher nicht zueinander in Vertrauensstellungen setzen will.

Es bleibt also die Nutzung von Samba. Die entsprechende Java-Bibliothek lautet jcifs (siehe http://jcifs.samba.org). In meinem Beitrag „Mächtigeres ARIS-Reporting dank externer Java-Bibliotheken“ (siehe http://blog.headframe.de/machtigeres-aris-reporting-dank-externer-java-bibliotheken/) habe ich beschrieben, wie man externe Java-Bibliothek in ARIS-Reports einbindet. Eine entsprechende Klasse (ClassloaderSupport.js) ist diesem Beitrag unkommentiert angefügt.

Um Zugriff auf ein Sambafile zu bekomme muss ich nun einen Server, einen Dateinamen (einschließlich Pfad), einen Benutzer, eine Domäne und gegebenenfalls einen Port und weitere Parameter angeben. Die Bibliothek jcifs verlangt die URL in folgendem Format:

Dieses kann man wie folgt aufbauen:

Der Umgang mit den Samba-Files ist wiederum wenig tückenreich. Will man etwa den Inhalt eines Files als Bytes erhalten, ist dies wenig komplexer als bei einer lokalen Datei.

Wer noch einer höheren Geschwindigkeit bedarf, kann (wie auch übrigens auch im Beispiel des http-Zugriffs) noch etwas an dem Vorgehen ändern, jedes Byte einzeln zu lesen.

Im Anhang befindet sich der vollständige Code für weitere Dateizugriffe wie Löschen und Schreiben von Samba-Files. (siehe Seite 2)

Tags:

Dies ist nur ein GravatarSascha Zinflou

Interdisziplinär denkender und handelnder Mathematiker mit mehr als zehnjähriger Erfahrung im Bereich „Softwareentwicklung und -anwendung”.

Seiten: 1 2