- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Medium mit Arbeitsablauf freigeben
Hallo,
ich habe fรผr die Redakteure einen Arbeitsablauf zur Freigabe eines Mediums erstellt.
Der funktioniert auch (Medium wird freigegeben) nur bekomme ich am Ende des Arbeitsablaufs eine Fehlermeldung
Error creating task - java.lang.IllegalStateException: node not locked
genaue Meldung -> mldg.txt
Script zur Freigabe:
medium = context.getStoreElement();
mediumID = medium.getUid();
if(!medium.isLocked()) {
medium.setLock(true);
}
medium.release();
medium.setLock(false);
context.logInfo("======= ENDE: Freigabe Medium",);
context.doTransition("frg_ok");
Den รbergang "frg_ok" gibt es und ich hab auch die notwendigen Rechte.
Der Fehler muss nach der letzten zeile auftreten (wenn ich nach den ..doTrasistion... eine Logausgabe angebe, weird diese noch ausgegeben und danach tritt der Fehler auf.
Woran liegt es, dass dieser Fehler auftritt (was sagt er mir eigentlich) und wie kann ich ihn beheben?
- Labels:
-
Developers
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Der Fehler besagt, dass das Objekt nicht im Bearbeitungsmodus war.
Statt den Bearbeitungsmodus fรผr das Medium grundsรคtzlich zu beenden:
medium.setLock(false);
wรคre es korrekter, den Bearbeitungsstatus des Mediums zwischenzuspeichern und den Bearbeitungsmodus nur zu beenden wenn das Medium nicht darin war. [Oder in diesem Fall das Beenden des Bearbeitungsmodus einfach dem Workflow zu รผberlassen . Der Fehler fliegt, wenn der Workflow nach dem weiterschalten den Bearbeitungsmodus beenden will]
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
aha, Danke fรผr die Info. Nun funktionierts .
bm = medium.isLocked();
if(!bm) {
medium.setLock(true);
}
medium.release();
if(!bm) {
medium.setLock(false);
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Genereller Hinweis zum Setzen von Locks รผber die API.
1. Locks sollten immer im try / finally block stehen
2. Es sollten "immer" nicht rekursive Locks gesetzt werden.
boolean wasLocked = medium.isLocked();
try {
if ( ! wasLocked) {
medium.setLock(true, false); // lock non-recursive
}
medium.release(false); // non recursive release
} catch(LockException lockFailed) {
context.logError("lock failed -> medium already locked by " + lockFailed.getUserLoginName());
} finally {
try {
if ( ! wasLocked) {
medium.setLock(false, false); // unlock non-recursive
}
} catch(Exception unlockFailed){
// proper error handling
}
}
zu 1.)
Der try/finally Block stellt sicher, dass das Objekt (in diesem Fall das Medium) auch im Fall eines Fehlers wieder entsperrt wird. Ansonsten bleibt das Objekt auf dem Server fรผr die Dauer der Session mit der der Lock gesetzt wurde, erhalten. Das kann bei einem Skript auf dem Server mitunter fรผr die gesamte Laufzeit des FirstSpirit Servers sein.
zu 2.)
Da es sich in diesem Fall um ein Medium handelt, wรผrde ein rekursiver Lock den gleichen Effekt haben wie der nicht rekursive Lock. Man sollte sich allerdings angewรถhnen immer "nicht-rekursive" Locks zu verwenden, auรer man benรถtigt explizit einen "rekurisven" Lock (z.B. bei Page)

