pollehn
I'm new here

Zeitlich gesteuerte Aktualisierung von Dateien im Mediastore

Jump to solution

Hallo zusammen,

ich würde gern mit Hilfe der Auftragsverwaltung einen Task anlegen, welcher eine zeitlich gesteuerte Aktualisierung einer JSON-Datei im Mediastore realisiert. Für diesen Zweck habe ich ein kleines Plugin entwickelt, welches ich als Bibliothek serverweit bekannt gemacht habe. Den Aufruf der Bibliothek habe ich mittels Beanshell Skript getestet und konnte damit verifizieren, dass die Bibliothek das tut was sie soll.

Wenn ich jetzt allerdings versuche das Ganze in der Auftragsverwaltung meines Projektes als Aktion auszuführen, kommt es zu einer SecurtyException.

Nachfolgend einmal der (scheinbar) problematische Code und Fehlerlog:

ScheduleContext scheduleContext = (ScheduleContext) context;

StoreAgent storeAgent = context.requestSpecialist(StoreAgent.TYPE);

if (storeAgent != null) {

    Store mediaStore = storeAgent.getStore(Store.Type.MEDIASTORE);

    MediaImpl medium = (MediaImpl) mediaStore.getStoreElement(jsonMediaId, IDProvider.UidType.MEDIASTORE_LEAF);

    {...}

    medium.setLock(true, false);

    de.espirit.firstspirit.access.store.mediastore.File mFile = medium.getFile(scheduleContext.getProject().getMasterLanguage());

    mFile.setFile(jsonTempFile.length(), fis, "json");

    medium.setParseFile(false);

    medium.save("Aktualisierte JSON-Menüstuktur", false);

    medium.setLock(false, false);

    {...}

}

ERROR 

  [–] 04.03.2021 16:06:50 ERROR 04.03.2021 16:06:50.648 {uID=0,seID=145005,pID=113297} (de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor): error during script execution : de.espirit.firstspirit.access.script.ExecutionException: Method Invocation execute : at Line: 4 : in file: inline evaluation of: ``__execute() { //!Beanshell import de.adesso.firstspirit.intranet.maginal.Intrane . . . '' : .execute ( context )
Called from method: __execute
Target exception: java.lang.SecurityException: changes not allowed for current connection
at line 4
FSVersion=5.2.190910.78562;JDK=11.0.6 64bit Oracle Corporation;OS=Linux 3.10.0-1160.6.1.el7.x86_64 amd64;Date=04.03.2021 16:06:50 (I)
de.espirit.firstspirit.access.script.ExecutionException: Method Invocation execute : at Line: 4 : in file: inline evaluation of: ``__execute() { //!Beanshell import de.adesso.firstspirit.intranet.maginal.Intrane . . . '' : .execute ( context )
Called from method: __execute
Target exception: java.lang.SecurityException: changes not allowed for current connection
at line 4
  at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:109)
  at de.espirit.firstspirit.server.script.PermissionsScriptEngine$PermissionsExecutable.lambda$execute$1(PermissionsScriptEngine.java:83)
  at java.base/java.security.AccessController.doPrivileged(Native Method)
  at de.espirit.firstspirit.server.script.PermissionsScriptEngine$PermissionsExecutable.execute(PermissionsScriptEngine.java:88)
  at de.espirit.firstspirit.server.script.PermissionsScriptEngine$PermissionsExecutable.execute(PermissionsScriptEngine.java:83)
  at de.espirit.firstspirit.common.ScriptUtil.execute(ScriptUtil.java:106)
  at de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor.run(ScriptTaskExecutor.java:127)
  at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.executeLocal(ScheduleManagerImpl.java:2506)
  at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.executeLocal(ScheduleManagerImpl.java:2489)
  at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.call(ScheduleManagerImpl.java:2421)
  at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:590)
  at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
  at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:436)
  at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
  at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
  at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
  at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
  at java.base/java.lang.Thread.run(Thread.java:834)
  at de.espirit.common.util.SuspendableThread.run(SuspendableThread.java:56)
Caused by: java.lang.SecurityException: changes not allowed for current connection
  at de.espirit.firstspirit.server.scheduler.RestrictedTaskSecurityManager.checkAccess(RestrictedTaskSecurityManager.java:29)
  at de.espirit.firstspirit.store.access.AbstractStoreElement.checkAccess(AbstractStoreElement.java:1443)
  at de.espirit.firstspirit.store.access.DefaultStoreElement.setLock(DefaultStoreElement.java:449)
  at de.espirit.firstspirit.store.access.DefaultStoreElement.setLock(DefaultStoreElement.java:441)
  at de.adesso.firstspirit.intranet.maginal.IntranetMaginalJsonCreatorExecutable.writeToMediastore(IntranetMaginalJsonCreatorExecutable.java:104)
  at de.adesso.firstspirit.intranet.maginal.IntranetMaginalJsonCreatorExecutable.execute(IntranetMaginalJsonCreatorExecutable.java:47)
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.base/java.lang.reflect.Method.invoke(Method.java:566)
  at bsh.Reflect.invokeMethod(Reflect.java:185)
  at bsh.Reflect.invokeObjectMethod(Reflect.java:118)
  at bsh.BSHPrimarySuffix.doName(BSHPrimarySuffix.java:176)
  at bsh.BSHPrimarySuffix.doSuffix(BSHPrimarySuffix.java:120)
  at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:80)
  at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47)
  at bsh.BSHBlock.evalBlock(BSHBlock.java:130)
  at bsh.BSHBlock.eval(BSHBlock.java:80)
  at bsh.BshMethod.invokeImpl(BshMethod.java:371)
  at bsh.BshMethod.invoke(BshMethod.java:267)
  at bsh.BshMethod.invoke(BshMethod.java:170)
  at bsh.PreparsedScript.invoke(PreparsedScript.java:66)
  at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:100)
... 18 more

Gibt es etwas, was ich zur Realisierung meines Vorhabens noch beachten muss oder ist das eventuell einfach nicht möglich?

Vielen Dank schon mal für eure Hilfe!

Viele Grüße

Richard

0 Kudos
1 Solution

Accepted Solutions
hoebbel
Crownpeak employee

Hallo Richard,

die Fehlermeldung "changes not allowed for current connection" deutet darauf hin, dass Du versuchst, die Änderungen mit der Session des Auftrags direkt durchzuführen. Das wird unterbunden.

Lösung: In der Skript-Aktion unter Eigenschaften den Haken "Eigene Verbindung" aktivieren und die Zugangsdaten von einem Benutzer verwenden, der ausreichend Rechte hat, um die entsprechenden Änderungen durchzuführen:

409217_pastedImage_0.png

Viele Grüße

Holger

View solution in original post

0 Kudos
2 Replies
hoebbel
Crownpeak employee

Hallo Richard,

die Fehlermeldung "changes not allowed for current connection" deutet darauf hin, dass Du versuchst, die Änderungen mit der Session des Auftrags direkt durchzuführen. Das wird unterbunden.

Lösung: In der Skript-Aktion unter Eigenschaften den Haken "Eigene Verbindung" aktivieren und die Zugangsdaten von einem Benutzer verwenden, der ausreichend Rechte hat, um die entsprechenden Änderungen durchzuführen:

409217_pastedImage_0.png

Viele Grüße

Holger

0 Kudos

Hallo Holger,

tausend Dank für die schnelle Hilfe! Daran hat es tatsächlich gelegen. Smiley Happy

Viele Grüße

Richard

0 Kudos