Welche Aktionen führen zu project.lock ?

Ich habe eine Frage, die evtl. mit dem Verbesserungsvorschlag https://community.e-spirit.com/ideas/1042 zu tun hat.

Wir haben in unserem Projekt auch eine Funktion, die die Zuordnung von Benutzer zu Gruppen durch normale Benutzer erlaubt. Dies war erforderlich, da im FirstSpirit aktuell nur ProjektAdmins diese Funktion ausüben dürfen.

Nun haben wir immer wieder die Situation, dass bei der Ausführung dieses Skriptes ein Fehler auftritt.

Dieser hängt wohl damit zusammen, dass zur Userverwaltung das Projekt vom Skript gelocked werden muss:

          project.lock();

          selectedGroup.addUser(selectedUser);

          project.save();

Obwohl zu 100% sichergestellt ist, dass kein Admin am Admin-Client angemeldet war und extrem unwahrscheinlich ist, dass zeitlich ein zweiter Benutzer, dieses Skript aufgerufen hat, erscheint bei der Kollege ein Fehler. In der Vergangenheit haben wir dies oft abgewiesen - beim Nachstellen durch die IT konnte das Skript auch immer ausgeführt werden.

Nun möchte unser Fachbereich für dieses Thema eine bessere Lösung für dieses Thema haben. Bzw. wir sollten auch wissen, wann und warum das Projekt zu diesem Zeitpunkt nicht gesperrt werden kann.

Eine Vermutung wäre, dass ein periodisches Deployment-Skript das Projekt sperrt. In diesem Skript ist folgender Code enthalten:

import de.espirit.firstspirit.access.AdminService;

...

AdminService adminService = connection.getAdminService();
scheduleStorage = adminService.getScheduleStorage();

Verursacht der AdminService die Sperre des Projektes?

Vielen Dank und Gruß aus Schwaben,

Thomas Walter

Labels (1)
0 Kudos
1 Reply
gockel
Crownpeak employee
Crownpeak employee

Re: Welche Aktionen führen zu project.lock ?

Hallo,

Obwohl zu 100% sichergestellt ist, dass kein Admin am Admin-Client  angemeldet war und extrem unwahrscheinlich ist, dass zeitlich ein  zweiter Benutzer, dieses Skript aufgerufen hat, erscheint bei der  Kollege ein Fehler.

Hat evtl. das Skript selber den Lock verursacht und ist dieser vielleicht liegen geblieben? Es sollte sichergestellt werden, dass der unlock() - Aufruf in einem finally Block steht. (Vergl. auch https://community.e-spirit.com/message/1722#1722 )

Eine Vermutung wäre, dass ein periodisches Deployment-Skript das Projekt sperrt. In diesem Skript ist folgender Code enthalten:

import de.espirit.firstspirit.access.AdminService;

...

AdminService adminService = connection.getAdminService();
scheduleStorage = adminService.getScheduleStorage();

Verursacht der AdminService die Sperre des Projektes?

Dies ist definitiv auszuschließen, zumindest sofern dies der einzige Code ist, der in dem Skript verwendet wird.

Bzw. wir sollten auch wissen, wann und warum das Projekt zu diesem Zeitpunkt nicht gesperrt werden kann.

Hierzu würde ich vorschlagen, dass Sie die vermutlich auftretende LockException auswerten und ausgeben, welcher Benutzer das Projekt gelockt hat.

import de.espirit.firstspirit.access.store.LockException;

try {
     project.lock();
     // changes ...
     project.save();
} catch(LockException lockFailed) {
     context.logError("lock failed -> project already locked by " + lockFailed.getUserLoginName());
} finally {
     project.unlock();
}


0 Kudos