marcfr
Elite Observer

CorporateContent per Beanshell-Skript

Jump to solution

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

1 Solution

Accepted Solutions

Lösung gefunden:

Läuft das Skript mit einer eigenen Verbindung, dann wird der Lock gelöst.

View solution in original post

4 Replies
marcfr
Elite Observer

Über eine Antwort wäre ich sehr dankbar 🙂

0 Kudos

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.

0 Kudos

Ich habe Ihren Vorschlag soeben mal versucht. Das Ergebnis ist leider dasselbe: Das Paket bleibt durch das Abbrechen des Auftrags gelockt.

0 Kudos

Lösung gefunden:

Läuft das Skript mit einer eigenen Verbindung, dann wird der Lock gelöst.