Search the FirstSpirit Knowledge Base
Hallo zusammen,
wir rufen per Skript die CorporateContent-Funktionalität auf. Das funktioniert soweit auch. Allerdings, wenn während das Skript läuft, der Auftrag abgebrochen wird, dann ist das Paket gesperrt und kann nicht wieder entsperrt werden (nur ein FS-Server-Neustart löst das Problem).
Das Skript sieht wie folgt aus:
us = context.getUserService();
ps = us.getStore(de.espirit.firstspirit.access.store.Store.Type.PAGESTORE, false);
md = us.getStore(de.espirit.firstspirit.access.store.Store.Type.MEDIASTORE, false);
children = ps.getChildren();
mediaFolder = md.getStoreElement("images", IDProvider.UidType.MEDIASTORE_FOLDER);
mediaPackage = mediaFolder.getPackage();
if(mediaPackage != null){
try{ | ||
//create new version: | ||
if(!mediaPackage.isLocked()) | ||
mediaPackage.lock(); |
packageVersion = mediaPackage.createVersion("" + new Date().getTime(), "" + new Date().getTime(), true); | |||
packageManager = context.getConnection().getService(PackageManager.SERVICE_NAME); | |||
//save package: | |||
try{ | |||
mediaPackage.save(); | |||
mediaPackage.unlock(); | |||
mediaPackage.publishPackage(); | |||
} | |||
catch(Exception e){ | |||
context.logError("error: " + e.getMessage()); | |||
} | |||
finally { | |||
if(mediaPackage.isLocked()) | |||
mediaPackage.unlock(); | |||
} | |||
} | |||
catch(Exception e){ | |||
context.logError("error: " + e.getMessage()); | |||
} | |||
finally{ | |||
if(mediaPackage.isLocked()) | |||
mediaPackage.unlock(); | |||
}//finally | |||
}//if
Als Fehler kommt dann:
Target exception: de.espirit.firstspirit.server.NotLockedException: object 3685687 locked in different session (project 2645901, session 3411552831525479586)
-> die Session "3411552831525479586" gibt es aber laut ServerMonitoring nicht mehr.
Müsste codetechnisch etwas angepasst werden?
Viele Grüße,
Marc Friedemann
Lösung gefunden:
Läuft das Skript mit einer eigenen Verbindung, dann wird der Lock gelöst.
Über eine Antwort wäre ich sehr dankbar 🙂
Ich würde das unlock in den (ersten) finally-block setzen. Ansonsten würdes du z.B. einen Unlock machen, wenn das Paket von wem anders gelockt ist. Eventuell blockt auch der PackageManager selbst das Paket? Die Sitzung sieht man ja nicht unbedingt.
Ich habe Ihren Vorschlag soeben mal versucht. Das Ergebnis ist leider dasselbe: Das Paket bleibt durch das Abbrechen des Auftrags gelockt.
Lösung gefunden:
Läuft das Skript mit einer eigenen Verbindung, dann wird der Lock gelöst.