- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Exception bei setLock(): lock is not supported for release store elements
Hallo zusammen,
aktuell arbeiten wir an einem Script, dass alle Inhaltsseiten mit einem bestimmten Seitentemplate auf ein anderes Template รคndern. Hierfรผr benutzen wir folgende Methode:
private static int migrateSiteTemplateOfAll(PageTemplate sourceSiteTemplate, PageTemplate targetSiteTemplate) throws LockException, ElementDeletedException {
int count = 0;
/* Iterierung รผber alle Referenzen auf die Seitevorlage */
for(ReferenceEntry referenceEntry:sourceSiteTemplate.getIncomingReferences()){
// Prรผfen ob es sich um eine Inhaltsseite handelt
if(referenceEntry.getStoreType().equals(Store.Type.PAGESTORE) && (referenceEntry.getReferencedObject() instanceof Page)){
Page page = (Page)referenceEntry.getReferencedObject();
try {
logger.info("Diese Seite wird grade umgebogen " + page.getUid());
boolean isReleased = page.isReleased();
page.setLock(true, true);
//Vorlage umbiegen
page.setTemplate(targetSiteTemplate);
page.save(fs_comment_switch);
if (isReleased) {
page.release(true);
}
count++;
}finally{
if(page != null){
page.setLock(false, true);
}
}
}
}
return count;
}
Nun gibt es ab und zu eine UnsupportedOperationException schon beim ersten setLock in Zeile 11.:
Exception in thread "main" java.lang.UnsupportedOperationException: lock is not supported for release store elements
at de.espirit.firstspirit.store.access.DefaultStoreElement.setLock(DefaultStoreElement.java:452)
at de.espirit.firstspirit.store.access.DefaultStoreElement.setLock(DefaultStoreElement.java:446)
at com.nord.fs.migration.StartSiteMigration.migrateSiteTemplateOfAll(StartSiteMigration.java:74)
at com.nord.fs.migration.StartSiteMigration.main(StartSiteMigration.java:31)
Warum und wann diese Exception auftritt kann ich mir nicht erklรคren, da sie nach nach keinem Muster auftritt. Nach einer Exception ist es z.B hรคndisch mรถglich im SiteArchitect das Template zu รคndern.
Grundsรคtzlich gibt es folgenden Teil in der setLock Methode, der diese Exception hervorruft:
if (this.getStore().isRelease()) {
throw new UnsupportedOperationException("lock is not supported for release store elements");
}
Warum nun this.getStore().isRelease() nun manchmal true oder false ist, verstehe ich nicht. Hatte auch schon in der Doku und im Forum geschaut und bin nicht fรผndig geworden.
Vielleicht erkennt ja hier jemand das Problem und kann mir weiterhelfen. Ich hoffe ich habe euch hierfรผr genug Informationen geliefert, falls nicht bitte Bescheid geben.
Vielen Danke schon mal im Voraus!
Lieben Gruร,
Sebastian
- Labels:
-
Developers
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Sebastian,
die Exception kommt, da versucht wird ein Objekt aus dem Released-State zu รคndern. Diese Elemente sind sozusagen "read only" und kรถnnen somit nicht geรคndert werden.
Warum genau dir die ReferencedEntries aus getIncommingReferences() teilweise Objekte aus dem Released store zurรผckgeben, kann ich dir gerade nicht genau sagen.
Versuche mal dir explizit die Page aus dem Current-State zu holen und dann die Operation auf diesem Objekt durchzufรผhren, etwa wie folgt:
PageStoreRoot notReleasedPageStoreRoot = (PageStoreRoot) targetSiteTemplate.getProject().getUserService().getStore(Store.Type.PAGESTORE, false);
...
Page currentPage = (Page) notReleasedPageStoreRoot.getStoreElement(page.getId());
(Unschรถner Code, weil du dir hier jedes Mal den Store erneut holst, aber zur schnellen รberprรผfung, ob es dein Problem lรถst, sollte es reichen. ๐ )
Siehe hierzu auch: UserService (FirstSpirit Access-API)
Ich hoffe die Idee hilft dir.
Beste Grรผรe
Sandro
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Sebastian,
die Exception kommt, da versucht wird ein Objekt aus dem Released-State zu รคndern. Diese Elemente sind sozusagen "read only" und kรถnnen somit nicht geรคndert werden.
Warum genau dir die ReferencedEntries aus getIncommingReferences() teilweise Objekte aus dem Released store zurรผckgeben, kann ich dir gerade nicht genau sagen.
Versuche mal dir explizit die Page aus dem Current-State zu holen und dann die Operation auf diesem Objekt durchzufรผhren, etwa wie folgt:
PageStoreRoot notReleasedPageStoreRoot = (PageStoreRoot) targetSiteTemplate.getProject().getUserService().getStore(Store.Type.PAGESTORE, false);
...
Page currentPage = (Page) notReleasedPageStoreRoot.getStoreElement(page.getId());
(Unschรถner Code, weil du dir hier jedes Mal den Store erneut holst, aber zur schnellen รberprรผfung, ob es dein Problem lรถst, sollte es reichen. ๐ )
Siehe hierzu auch: UserService (FirstSpirit Access-API)
Ich hoffe die Idee hilft dir.
Beste Grรผรe
Sandro
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Die Erklรคrung fรผr das Verhalten ist, das auch Seiten im Freigabestand eine Referenz auf ihr Template haben. Und damit haben also Templates auch eingehende Referenzen aus dem Freigabestand. Die รberprรผfung, welche Variante du gerade betrachtest, kannst du in Zeile 8 einfรผgen:
if (!page.getStore().isRelease()) { ... }
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Vielen Dank fรผr die Antworten. Das Script lรคuft nun ohne Probleme durch und tut was es soll.

