AccessUtil.release in Workflow führt zu Exception
Author: markus_reinsch
Publication Date: 11/17/2011 15:07
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
-
Author: hoebbel - 11/22/2011 9:16
Hallo Herr Reinsch,
auch wenn ich Ihnen gerade bereits über das entsprechende Helpdeskticket geantwortet habe, hier nochmal die Antwort für alle Mitleser :smileywink:
> 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
Please sign in to leave a comment.
Comments
1 comment