mscholz3
I'm new here

Zugriff auf AccessControlDb in einer Executable im isolated-Modus

Jump to solution

Hallo liebe Community,

wie führen gerade eine IT-Infrastruktur Wechsel durch. Der neue FS-Server läuft nun im isolated-Modus.

Bisher läuft die Umstellung der Module auf isolated ganz gut. Nur bei einer Sache haben wir gerade noch Problem.

Wir bekommen in unseren Executable-Klassen keinen Zugriff auf die AccessControlDb bzw. auf das Objekt selbst. Leider gibt es bisher unseres Wissens nach keinen "offiziellen" Weg, wie man in einer Executable-Klasse die AC-DB aufruft.

Bisher haben wir es per Reflektion gelöst:

import java.io.IOException;

import java.lang.reflect.Method;

import de.espirit.firstspirit.access.schedule.*;

import de.espirit.firstspirit.acl.db.AccessControlDb;

Method method = context.getClass().getDeclaredMethod("getAccessControlDb");

method.setAccessible(true);

AccessControlDb accessControlDb =  (AccessControlDb) method.invoke(context);

Wenn wir diesen Code in einem Task-Script aufrufen, dann funktioniert alles prima.

Rufen wir allerdings den gleichen Code in einer Executable-Klasse auf, bekommen wir folgenden Fehler:

Caused by: java.lang.ClassCastException: class de.espirit.firstspirit.acl.db.AccessControlDb cannot be cast to class de.espirit.firstspirit.acl.db.AccessControlDb (de.espirit.firstspirit.acl.db.AccessControlDb is in unnamed module of loader de.espirit.common.FactoryRegistry$LibrariesLoader @397fbdb; de.espirit.firstspirit.acl.db.AccessControlDb is in unnamed module of loader de.espirit.firstspirit.server.module.SafeFindUrlClassLoader @8a2f74b)

Damit er die Klasse überhaupt findet, liefern wir zu unserem Modul die crc7.jar (aus fs-security.fsm) mit. Ohne diese Jar bekommen wir die Meldung, dass er AccessControlD nicht findet/kennt.

Im Legacy-Modus hatten wir die jar immer nur als "provided" in unserem Code.

Folgendes haben wir erfolglos ausprobiert:

  1. Den Scope von crc7.jar in der module-isolated.xml auf global gestellt.
  2. Das AccessControlDb-Objekt in einem extra Script-Taks als Property hinzugefügt:

context.setProperty("accessControlDb", accessControlDb);

Das hatte funktioniert, jedoch beim Casten im Modul wieder das gleiche Problem:

final AccessControlDb accessControlDb = (AccessControlDb) context.getProperty("accessControlDb"); --> Gleicher Fehler

Habt ihr Ideen wie ich das Objekt bekomme? Was machen wir hier falsch? Müssen wir vielleicht eine andere Jar mitliefern?

Und außerdem ganz wichtig:

Gibt es vielleicht bereits einen "richtigen" Weg um auf die AccessControlDb zuzugreifen?

Die einzige Aussage dazu habe ich in einem Thread gefunden, wo sich zuletzt 2011 ein Entwicklern hierzu geäußert hat:

https://community.e-spirit.com/message/5010#5010

Zu dem vorgeschlagenen „LegacyAccessControlDbProvider“ finde ich in der Doku nichts.

Ich weiß auch nicht aus welcher FS-Bibliothek dieser Provider kommt.

Liebe Grüße

Marcel

11 Replies

Hallo Stefan,

wir haben bereits die Anpassungen in den Projekten durchgeführt. In einem Projekt fehlt uns noch eine Sache und zwar die Größe der Datei.

de.espirit.firstspirit.acl.File hatte die Methode getLength().

Die neue Klasse "de.espirit.firstspirit.scheduling.agency.FileEntry" bietet diese Methode nicht an. Wie komme ich nun an die richtige Größe ran?

Liebe Grüße

Marcel

0 Kudos

Hallo Marcel,

das ist unschön. Leider scheint es aktuell keinen API-Weg zu dieser Information zu geben. Könnte aber leicht einzubauen sein.

Da müsstest du wohl einen Feature-Request hier in der Community einstellen und dich potentiell vorerst über "den alten Weg" bedienen. Ich glaube, der wurde noch nicht ausgebaut.

Beste Grüße

Stefan