Hewera-Harz
Returning Observer

Freigabe von Media-Elementen und Media-Ordnern über Server Script

Jump to solution

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);

                       

    }                   

               

   

}

0 Kudos
1 Solution

Accepted Solutions

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

View solution in original post

0 Kudos
5 Replies
Peter_Jodeleit
Crownpeak employee

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).

Peter
0 Kudos

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)

0 Kudos

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).

Peter
0 Kudos

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

0 Kudos

Nach ein paar Versuchen bin ich selber drauf gekommen Smiley Happy

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);

      

                   

                        }                   

              }           

   

}

0 Kudos