markus_reinsch
I'm new here

AccessUtil.release in Workflow führt zu Exception

Jump to solution

Hallo,

wenn ich die Methode AccessUtil.release in einem Workflow-Skript aufrufe, bekomme ich eine Exception (Code + Exception s.u.).

Ein direktes release auf dem Objekt funktioniert (Code s.u.)

Allerdings möchte ich AccessUtil.release nutzen, um auch abhängige Objekte freigeben zu können.

// Code der funktioniert

context.getStoreElement().release();

// Code der zu Fehler führt

result = de.espirit.firstspirit.access.AccessUtil.release(context.getStoreElement(), false);

context.logInfo(result.getResult());

Aus der Beanshell heraus ist der Aufruf möglich:

result = de.espirit.firstspirit.access.AccessUtil.release(e, false);

result.getResult();

Stacktrace:

Fehler bei der Skriptausführung in Zeile 9.

ERROR 17.11.2011 16:04:46.858 (de.espirit.firstspirit.client.action.WorkflowAction): Error creating task - de.espirit.firstspirit.access.script.ExecutionException: Method Invocation result.getResult at line 10

FSVersion=4.2.446.45868#2115;JDK=1.6.0_22 32bit Sun Microsystems Inc.;OS=Windows 7 6.1 x86;Date=17.11.2011 16:04:46

de.espirit.firstspirit.access.script.ExecutionException: Method Invocation result.getResult at line 10

          at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:120)

          at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:96)

          at de.espirit.firstspirit.client.gui.applications.ApplicationTabRegistry$IdentifiableExecutable.execute(ApplicationTabRegistry.java:140)

          at de.espirit.firstspirit.server.taskmanagement.TaskImpl.doTransition(TaskImpl.java:1076)

          at de.espirit.firstspirit.server.taskmanagement.TaskImpl.doTransition(TaskImpl.java:1012)

          at de.espirit.firstspirit.client.action.WorkflowAction.startWorkflow(WorkflowAction.java:432)

          at de.espirit.firstspirit.client.action.WorkflowAction.startWorkflow(WorkflowAction.java:65)

          at de.espirit.firstspirit.client.action.WorkflowAction.startWorkflow(WorkflowAction.java:74)

          at de.espirit.firstspirit.client.action.WorkflowUtil.startWorkflow(WorkflowUtil.java:66)

          at de.espirit.firstspirit.client.action.WorkflowMenuAction$WFStartAction.actionPerformed(WorkflowMenuAction.java:272)

          at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

          at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

          at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

          at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

          at javax.swing.AbstractButton.doClick(Unknown Source)

          at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)

          at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)

          at java.awt.Component.processMouseEvent(Unknown Source)

          at javax.swing.JComponent.processMouseEvent(Unknown Source)

          at java.awt.Component.processEvent(Unknown Source)

          at java.awt.Container.processEvent(Unknown Source)

          at java.awt.Component.dispatchEventImpl(Unknown Source)

          at java.awt.Container.dispatchEventImpl(Unknown Source)

          at java.awt.Component.dispatchEvent(Unknown Source)

          at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

          at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

          at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

          at java.awt.Container.dispatchEventImpl(Unknown Source)

          at java.awt.Component.dispatchEvent(Unknown Source)

          at java.awt.EventQueue.dispatchEvent(Unknown Source)

          at de.espirit.firstspirit.client.AWTDispatchingEventQueue.defaultDispatchEvent(AWTDispatchingEventQueue.java:130)

          at de.espirit.firstspirit.client.AWTDispatchingEventQueue._dispatchEvent(AWTDispatchingEventQueue.java:115)

          at de.espirit.firstspirit.client.AWTDispatchingEventQueue.dispatchEvent(AWTDispatchingEventQueue.java:108)

          at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)

          at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)

          at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

          at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

          at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

          at java.awt.EventDispatchThread.run(Unknown Source)

Caused by: de.espirit.firstspirit.server.storemanagement.ReleaseFailedException: could not lock element 'homepage' (ID=113797) - currently locked by 'user'

          at de.espirit.firstspirit.server.storemanagement.ServerReleaseAction.lock(ServerReleaseAction.java:701)

          at de.espirit.firstspirit.server.storemanagement.ServerReleaseAction.initReleaseList(ServerReleaseAction.java:276)

          at de.espirit.firstspirit.server.storemanagement.ServerReleaseAction.call(ServerReleaseAction.java:165)

          at de.espirit.firstspirit.server.storemanagement.ServerReleaseAction.call(ServerReleaseAction.java:62)

          at de.espirit.firstspirit.server.action.ServerActionManagerImpl$ServerActionCallableWrapper.call(ServerActionManagerImpl.java:415)

          at de.espirit.firstspirit.server.action.ServerActionManagerImpl$ServerActionCallableWrapper.call(ServerActionManagerImpl.java:396)

          at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:520)

          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:36)

Caused by: de.espirit.firstspirit.access.store.LockException: Element 113797 is already locked by another session

          at de.espirit.firstspirit.store.access.DefaultStoreElement._setLock(DefaultStoreElement.java:467)

          at de.espirit.firstspirit.store.access.DefaultStoreElement.setLock(DefaultStoreElement.java:441)

          at de.espirit.firstspirit.store.access.DefaultStoreElement.setLock(DefaultStoreElement.java:432)

          at de.espirit.firstspirit.server.storemanagement.ServerReleaseAction.lock(ServerReleaseAction.java:683)

          at de.espirit.firstspirit.server.storemanagement.ServerReleaseAction.initReleaseList(ServerReleaseAction.java:276)

          at de.espirit.firstspirit.server.storemanagement.ServerReleaseAction.call(ServerReleaseAction.java:165)

          at de.espirit.firstspirit.server.storemanagement.ServerReleaseAction.call(ServerReleaseAction.java:62)

          at de.espirit.firstspirit.server.action.ServerActionManagerImpl$ServerActionCallableWrapper.call(ServerActionManagerImpl.java:415)

          at de.espirit.firstspirit.server.action.ServerActionManagerImpl$ServerActionCallableWrapper.call(ServerActionManagerImpl.java:396)

          at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:520)

          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 de.espirit.firstspirit.client.io.ServerCaller.callManager(ServerCaller.java:372)

          at de.espirit.firstspirit.io.DefaultClientHandler.callManager(DefaultClientHandler.java:49)

          at de.espirit.firstspirit.client.io.RemoteManagerCaller.invoke(RemoteManagerCaller.java:52)

          at de.espirit.firstspirit.server.$Proxy57.checkAndThrow(Unknown Source)

          at de.espirit.firstspirit.server.action.AbstractServerActionHandle.checkAndThrow(AbstractServerActionHandle.java:52)

          at de.espirit.firstspirit.server.action.AbstractServerActionHandle.getResult(AbstractServerActionHandle.java:65)

          at de.espirit.firstspirit.server.action.AbstractServerActionHandle.getResult(AbstractServerActionHandle.java:57)

          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

          at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

          at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

          at java.lang.reflect.Method.invoke(Unknown Source)

          at bsh.Reflect.invokeMethod(Unknown Source)

          at bsh.Reflect.invokeObjectMethod(Unknown Source)

          at bsh.Name.invokeMethod(Unknown Source)

          at bsh.BSHMethodInvocation.eval(Unknown Source)

          at bsh.BSHPrimaryExpression.eval(Unknown Source)

          at bsh.BSHPrimaryExpression.eval(Unknown Source)

          at bsh.BSHArguments.getArguments(Unknown Source)

          at bsh.BSHMethodInvocation.eval(Unknown Source)

          at bsh.BSHPrimaryExpression.eval(Unknown Source)

          at bsh.BSHPrimaryExpression.eval(Unknown Source)

          at bsh.BSHBlock.evalBlock(Unknown Source)

          at bsh.BSHBlock.eval(Unknown Source)

          at bsh.BshMethod.invokeImpl(Unknown Source)

          at bsh.BshMethod.invoke(Unknown Source)

          at bsh.BshMethod.invoke(Unknown Source)

          at bsh.This.invokeMethod(Unknown Source)

          at bsh.This.invokeMethod(Unknown Source)

          at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:111)

          at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:96)

          at de.espirit.firstspirit.client.gui.applications.ApplicationTabRegistry$IdentifiableExecutable.execute(ApplicationTabRegistry.java:140)

          at de.espirit.firstspirit.server.taskmanagement.TaskImpl.doTransition(TaskImpl.java:1076)

          at de.espirit.firstspirit.server.taskmanagement.TaskImpl.doTransition(TaskImpl.java:1012)

          at de.espirit.firstspirit.client.action.WorkflowAction.startWorkflow(WorkflowAction.java:432)

          at de.espirit.firstspirit.client.action.WorkflowAction.startWorkflow(WorkflowAction.java:65)

          at de.espirit.firstspirit.client.action.WorkflowAction.startWorkflow(WorkflowAction.java:74)

          at de.espirit.firstspirit.client.action.WorkflowUtil.startWorkflow(WorkflowUtil.java:66)

          at de.espirit.firstspirit.client.action.WorkflowMenuAction$WFStartAction.actionPerformed(WorkflowMenuAction.java:272)

          at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

          at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

          at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

          at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

          at javax.swing.AbstractButton.doClick(Unknown Source)

          at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)

          at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)

Viele Grüße

0 Kudos
1 Solution

Accepted Solutions

Hallo Herr Reinsch,

auch wenn ich Ihnen gerade bereits über das entsprechende Helpdeskticket geantwortet habe, hier nochmal die Antwort für alle Mitleser Smiley Wink

> Eine Vermutung wäre, dass AccessUtil.release nicht in der gleichen Session wie der Workflow arbeitet.

Korrekt - AccessUtil arbeitet auf dem Server. Da ein Arbeitsablauf einen Knoten bearbeitet, um ihn weiterschalten zu können, muss bei der Verwendung einer anderen Session der Knoten explizit aus dem Bearbeitungsmodus genommen werden und vor dem Weiterschalten muss der Bearbeitungsmodus wieder gesetzt werden. Ein entsprechendes Beispiel findet sich auch im Demoprojekt, hier der beispielhafte Quellcode für diesen Anwendungsfall:

storeElement = context.getStoreElement();

if(storeElement instanceof Page) {

storeElement.setLock(false, true);

recursive = true;

} else {

storeElement.setLock(false, false);

}

result = de.espirit.firstspirit.access.AccessUtil.release(storeElement, false);

context.logInfo(result.getResult());

storeElement.setLock(true, false);

context.doTransition("<Name of Transition>");

Viele Grüsse aus Dortmund,

  Holger Höbbel

View solution in original post

0 Kudos
4 Replies
markus_reinsch
I'm new here

offensichtlich gibt es zu dem Problem keine Lösung ich habe daher ein Bugticket dazu erstellt: Help-20111121-183

0 Kudos

das Element 'homepage' ist bereits gelocked.

Caused by: de.espirit.firstspirit.server.storemanagement.ReleaseFailedException: could not lock element 'homepage' (ID=113797) - currently locked by 'user'

0 Kudos

das Element 'homepage' ist bereits gelocked.

Caused by: de.espirit.firstspirit.server.storemanagement.ReleaseFailedException: could not lock element 'homepage' (ID=113797) - currently locked by 'user'

Ich habe das Objekt nicht über den FS-Client gelockt (Strg-E)!

Dieser Lock scheint mir ein impliziter Lock vom Workflow zu sein.

Wie gesagt: Wenn ich context.getStoreElement().release() aufrufe, funktioniert es.

Warum funktioniert dann AccessUtil.release nicht?

Eine Vermutung wäre, dass AccessUtil.release nicht in der gleichen Session wie der Workflow arbeitet.

0 Kudos

Hallo Herr Reinsch,

auch wenn ich Ihnen gerade bereits über das entsprechende Helpdeskticket geantwortet habe, hier nochmal die Antwort für alle Mitleser Smiley Wink

> Eine Vermutung wäre, dass AccessUtil.release nicht in der gleichen Session wie der Workflow arbeitet.

Korrekt - AccessUtil arbeitet auf dem Server. Da ein Arbeitsablauf einen Knoten bearbeitet, um ihn weiterschalten zu können, muss bei der Verwendung einer anderen Session der Knoten explizit aus dem Bearbeitungsmodus genommen werden und vor dem Weiterschalten muss der Bearbeitungsmodus wieder gesetzt werden. Ein entsprechendes Beispiel findet sich auch im Demoprojekt, hier der beispielhafte Quellcode für diesen Anwendungsfall:

storeElement = context.getStoreElement();

if(storeElement instanceof Page) {

storeElement.setLock(false, true);

recursive = true;

} else {

storeElement.setLock(false, false);

}

result = de.espirit.firstspirit.access.AccessUtil.release(storeElement, false);

context.logInfo(result.getResult());

storeElement.setLock(true, false);

context.doTransition("<Name of Transition>");

Viele Grüsse aus Dortmund,

  Holger Höbbel

0 Kudos