Search the FirstSpirit Knowledge Base
Ich habe da ein Problem in einem Server Script.
Ich möchte gerne über diesen Weg ein bestimmtes Media-Verzeichnis mit allen darin liegenden Media-Elementen freigeben.
Angefangen habe ich mit dem unten aufgeführten Script "media_freigabe", in dem ich versuche Verzeichnisse und Medien im MediaStore freizugeben.
Leider klappt das nicht, es kommt die unten aufgeführte Fehlermeldung.
Für media_freigabe ist unter Eigenschaften eine eigene Connection konfiguriert worden mit entprechenden Rechten.
An der Connection oder den Rechten kann es also eigentlich nicht liegen, da die Aktion ausgeführt wird, wenn ich dort den Sitestore anspreche.
Hierbei lassen sich die Elemente locken.
Auch eine Abfrage für ein bestimmtes Verzeichnis im MediaStore (z.B. Refenrenzname = "presse"), p = child.getReferenceName(); und dann if ("presse".equals(p)), hat nicht geklappt.
Vielen Dank und Grüße
Petra Hewera-Harz
Script zur Freigabe im MediaStore für Verzeichnisse und Medien "media_freigabe":
//!Beanshell
import java.util.*;
import java.lang.Long;
import de.espirit.firstspirit.access.ReferenceEntry;
import de.espirit.firstspirit.storage.*;
import de.espirit.firstspirit.access.*;
import de.espirit.firstspirit.access.project.*;
import de.espirit.firstspirit.agency.StoreAgent;
import de.espirit.firstspirit.access.store.*;
import de.espirit.firstspirit.access.store.Store.Type;
import de.espirit.firstspirit.access.store.mediastore.*;
connection.getProjectById(context.getProject().getId()).getUserService();
storeAgent = context.requestSpecialist(StoreAgent.TYPE);
mediaStore = (MediaStoreRoot)storeAgent.getStore(Type.MEDIASTORE);
List<StoreElement> children = mediaStore.getChildren(StoreElement.class, true).toList();
for (StoreElement child : children) {
ordner = child.getParent();
child.setLock(true);
child.release(false);
ordner.setLock(true);
ordner.release(false);
}
Fehlermeldung zum Script "media_freigabe":
INFO 25.11.2013 13:04:06.870 (de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl): starting task 'media_freigabe' - schedule entry 'Publizierung barmenia.de - manuell' (id=32116)
INFO 25.11.2013 13:04:06.872 (de.espirit.firstspirit.server.sessionmanagement.SessionManagerImpl): new session (ID=8529769402629195111, user=Hewera-Harz, userID=2854, type=DUMMY) created
INFO 25.11.2013 13:04:06.872 (de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor): skript connection created: 8529769402629195111, user=Hewera-Harz
INFO 25.11.2013 13:04:06.873 (de.espirit.firstspirit.server.sessionmanagement.SessionManagerImpl): new session (ID=4146234305482954207, user=Hewera-Harz, userID=2854, type=DUMMY) created
INFO 25.11.2013 13:04:06.894 (de.espirit.firstspirit.store.access.AccessStoreBuilder): MEDIASTORE loaded in 2ms
INFO 25.11.2013 13:04:23.851 (de.espirit.firstspirit.store.access.AccessStoreBuilder): MEDIASTORE loaded in 36ms
ERROR 25.11.2013 13:04:23.893 (de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor): error during script execution : de.espirit.firstspirit.access.script.ExecutionException: Method Invocation child.setLock : at Line: 31 : in file: inline evaluation of: ``__execute() { //!Beanshell import java.util.*; import java.lang.Long; import d . . . '' : child .setLock ( true )
Target exception: java.lang.UnsupportedOperationException: de.espirit.firstspirit.store.access.LanguageInfoImpl.setLock()
at line 31
de.espirit.firstspirit.access.script.ExecutionException: Method Invocation child.setLock : at Line: 31 : in file: inline evaluation of: ``__execute() { //!Beanshell import java.util.*; import java.lang.Long; import d . . . '' : child .setLock ( true )
Target exception: java.lang.UnsupportedOperationException: de.espirit.firstspirit.store.access.LanguageInfoImpl.setLock()
at line 31
at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:108)
at de.espirit.firstspirit.common.ScriptUtil.execute(ScriptUtil.java:97)
at de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor.run(ScriptTaskExecutor.java:134)
at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.executeLocal(ScheduleManagerImpl.java:2174)
at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.executeLocal(ScheduleManagerImpl.java:2157)
at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.call(ScheduleManagerImpl.java:2085)
at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:549)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:419)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
at de.espirit.common.util.SuspendableThread.run(SuspendableThread.java:37)
Caused by: java.lang.UnsupportedOperationException: de.espirit.firstspirit.store.access.LanguageInfoImpl.setLock()
at de.espirit.firstspirit.store.access.AbstractStoreElement.setLock(AbstractStoreElement.java:1117)
at de.espirit.firstspirit.store.access.AbstractStoreElement.setLock(AbstractStoreElement.java:1109)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at bsh.Reflect.invokeMethod(Reflect.java:146)
at bsh.Reflect.invokeObjectMethod(Reflect.java:79)
at bsh.Name.invokeMethod(Name.java:858)
at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:75)
at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102)
at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47)
at bsh.BSHBlock.evalBlock(BSHBlock.java:130)
at bsh.BSHBlock.eval(BSHBlock.java:80)
at bsh.BSHBlock.eval(BSHBlock.java:46)
at bsh.BSHEnhancedForStatement.eval(BSHEnhancedForStatement.java:80)
at bsh.BSHBlock.evalBlock(BSHBlock.java:130)
at bsh.BSHBlock.eval(BSHBlock.java:80)
at bsh.BshMethod.invokeImpl(BshMethod.java:362)
at bsh.BshMethod.invoke(BshMethod.java:258)
at bsh.BshMethod.invoke(BshMethod.java:161)
at bsh.PreparsedScript.invoke(PreparsedScript.java:65)
at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:99)
... 16 more
INFO 25.11.2013 13:04:23.895 (de.espirit.firstspirit.server.sessionmanagement.SessionManagerImpl): Session terminated (ID=4146234305482954207, user=Hewera-Harz (Petra Hewera-Harz)(dummy)), number of sessions now 16
INFO 25.11.2013 13:04:23.895 (de.espirit.firstspirit.server.sessionmanagement.SessionManagerImpl): close dummy session (ID=8529769402629195111, user=Hewera-Harz)
INFO 25.11.2013 13:04:23.895 (de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl): finished task 'media_freigabe' - schedule entry 'Publizierung barmenia.de - manuell' (id=32116)
Test-Script für Freigabe im SiteStore (funktioniert einwandfrei):
//!Beanshell
import java.util.*;
import java.lang.Long;
import de.espirit.firstspirit.access.ReferenceEntry;
import de.espirit.firstspirit.storage.*;
import de.espirit.firstspirit.access.*;
import de.espirit.firstspirit.access.project.*;
import de.espirit.firstspirit.agency.StoreAgent;
import de.espirit.firstspirit.access.store.*;
import de.espirit.firstspirit.access.store.Store.Type;
import de.espirit.firstspirit.access.store.sitestore.*;
connection.getProjectById(context.getProject().getId()).getUserService();
storeAgent = context.requestSpecialist(StoreAgent.TYPE);
siteStore = (SiteStoreRoot)storeAgent.getStore(Type.SITESTORE);
List<StoreElement> children = siteStore.getChildren(StoreElement.class, true).toList();
for (StoreElement child : children) {
if (child instanceof PageRef) {
ordner = child.getParent();
child.setLock(true);
child.release(false);
ordner.setLock(true);
ordner.release(false);
}
}
Klasse das klappt jetzt schon mal.
Zu meiner Zusatzfrage:
Wenn ich nur einen bestimmten Ordner und seine Media-Elemente freigeben will?
Danke und Grüße
Petra Hewera-Harz
Das erste Skript wird auch durchlaufen, wenn dort ebenfalls eine Typ-Überprüfung eingebaut wird.
Noch eine Anmerkung: Das "toList()" auf dem Ergebnis von "geChildren(..)" ist überflüssig und kann potentiell (zu)viel Heap-Speicher verbrauchen (bei großen Teilbäumen).
Leider klappt das auch nach dem Einbau einer Typ Abfrage nicht. Vielleicht frage ich auch nach den falschen Typen.
zu dem toList() >> einfach weglassen?
Gruß
Petra Hewera-Harz
neuer Code:
//!Beanshell
import java.util.*;
import java.lang.Long;
import de.espirit.firstspirit.access.ReferenceEntry;
import de.espirit.firstspirit.storage.*;
import de.espirit.firstspirit.access.*;
import de.espirit.firstspirit.access.project.*;
import de.espirit.firstspirit.agency.StoreAgent;
import de.espirit.firstspirit.access.store.*;
import de.espirit.firstspirit.access.store.Store.Type;
import de.espirit.firstspirit.access.store.mediastore.*;
connection.getProjectById(context.getProject().getId()).getUserService();
storeAgent = context.requestSpecialist(StoreAgent.TYPE);
mediaStore = (MediaStoreRoot)storeAgent.getStore(Type.MEDIASTORE);
List<StoreElement> children = mediaStore.getChildren(StoreElement.class, true).toList();
for (StoreElement child : children) {
if (child instanceof MediaElement || child instanceof MediaFolder ) {
ordner = child.getParent();
child.setLock(true);
child.release(false);
ordner.setLock(true);
ordner.release(false);
}
}
Fehlermeldung:
INFO 25.11.2013 15:00:42.809 (de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl): starting task 'media_freigabe' - schedule entry 'Publizierung barmenia.de - manuell' (id=32116)
INFO 25.11.2013 15:00:42.812 (de.espirit.firstspirit.server.sessionmanagement.SessionManagerImpl): new session (ID=2604291777312557049, user=Hewera-Harz, userID=2854, type=DUMMY) created
INFO 25.11.2013 15:00:42.812 (de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor): skript connection created: 2604291777312557049, user=Hewera-Harz
INFO 25.11.2013 15:00:42.812 (de.espirit.firstspirit.server.sessionmanagement.SessionManagerImpl): new session (ID=6666269535698150598, user=Hewera-Harz, userID=2854, type=DUMMY) created
INFO 25.11.2013 15:00:42.826 (de.espirit.firstspirit.store.access.AccessStoreBuilder): MEDIASTORE loaded in 0ms
INFO 25.11.2013 15:00:42.914 (de.espirit.firstspirit.store.access.AccessStoreBuilder): MEDIASTORE loaded in 0ms
ERROR 25.11.2013 15:00:42.945 (de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor): error during script execution : de.espirit.firstspirit.access.script.ExecutionException: Method Invocation child.setLock : at Line: 25 : in file: inline evaluation of: ``__execute() { //!Beanshell import java.util.*; import java.lang.Long; import d . . . '' : child .setLock ( true )
Target exception: java.lang.UnsupportedOperationException: de.espirit.firstspirit.store.access.mediastore.FileImpl.setLock()
at line 25
de.espirit.firstspirit.access.script.ExecutionException: Method Invocation child.setLock : at Line: 25 : in file: inline evaluation of: ``__execute() { //!Beanshell import java.util.*; import java.lang.Long; import d . . . '' : child .setLock ( true )
Target exception: java.lang.UnsupportedOperationException: de.espirit.firstspirit.store.access.mediastore.FileImpl.setLock()
at line 25
at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:108)
at de.espirit.firstspirit.common.ScriptUtil.execute(ScriptUtil.java:97)
at de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor.run(ScriptTaskExecutor.java:134)
at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.executeLocal(ScheduleManagerImpl.java:2174)
at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.executeLocal(ScheduleManagerImpl.java:2157)
at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.call(ScheduleManagerImpl.java:2085)
at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:549)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:419)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
at de.espirit.common.util.SuspendableThread.run(SuspendableThread.java:37)
Caused by: java.lang.UnsupportedOperationException: de.espirit.firstspirit.store.access.mediastore.FileImpl.setLock()
at de.espirit.firstspirit.store.access.AbstractStoreElement.setLock(AbstractStoreElement.java:1117)
at de.espirit.firstspirit.store.access.AbstractStoreElement.setLock(AbstractStoreElement.java:1109)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at bsh.Reflect.invokeMethod(Reflect.java:146)
at bsh.Reflect.invokeObjectMethod(Reflect.java:79)
at bsh.Name.invokeMethod(Name.java:858)
at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:75)
at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102)
at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47)
at bsh.BSHBlock.evalBlock(BSHBlock.java:130)
at bsh.BSHBlock.eval(BSHBlock.java:80)
at bsh.BSHBlock.eval(BSHBlock.java:46)
at bsh.BSHIfStatement.eval(BSHIfStatement.java:48)
at bsh.BSHBlock.evalBlock(BSHBlock.java:130)
at bsh.BSHBlock.eval(BSHBlock.java:80)
at bsh.BSHBlock.eval(BSHBlock.java:46)
at bsh.BSHEnhancedForStatement.eval(BSHEnhancedForStatement.java:80)
at bsh.BSHBlock.evalBlock(BSHBlock.java:130)
at bsh.BSHBlock.eval(BSHBlock.java:80)
at bsh.BshMethod.invokeImpl(BshMethod.java:362)
at bsh.BshMethod.invoke(BshMethod.java:258)
at bsh.BshMethod.invoke(BshMethod.java:161)
at bsh.PreparsedScript.invoke(PreparsedScript.java:65)
at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:99)
... 16 more
INFO 25.11.2013 15:00:42.947 (de.espirit.firstspirit.server.sessionmanagement.SessionManagerImpl): Session terminated (ID=6666269535698150598, user=Hewera-Harz (Petra Hewera-Harz)(dummy)), number of sessions now 17
INFO 25.11.2013 15:00:42.947 (de.espirit.firstspirit.server.sessionmanagement.SessionManagerImpl): close dummy session (ID=2604291777312557049, user=Hewera-Harz)
INFO 25.11.2013 15:00:42.947 (de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl): finished task 'media_freigabe' - schedule entry 'Publizierung barmenia.de - manuell' (id=32116)
Test auf "MediaElement" bitte ersetzen durch "Media", dann sollte es klappen.
zu dem toList() >> einfach weglassen?
Ja, ich würde das einfach inline schreiben:
for (StoreElement child : mediaStore.getChildren(StoreElement.class, true))
Ansonsten muss der Typ noch angepasst werden (List -> Iterable).
Klasse das klappt jetzt schon mal.
Zu meiner Zusatzfrage:
Wenn ich nur einen bestimmten Ordner und seine Media-Elemente freigeben will?
Danke und Grüße
Petra Hewera-Harz
Nach ein paar Versuchen bin ich selber drauf gekommen
Auf jeden Fall besten Dank für die Hilfe und die Denkanregungen
Gruß
Petra Hewera-Harz
der Code sieht nun so aus:
for (StoreElement child : mediaStore.getChildren(StoreElement.class, true)) {
if (child instanceof MediaFolder ) {
p = child.getUid();
if ("presse".equals(p)) {
child.setLock(true);
child.release(true);
}
}
}