Locking record and creation of new records

0
Hello everyone, Is there any way to: - Lock database changes on a set of records of a certain entity - Prevent the creation of new record in a locked entity - Prevent the creation of relation to an entity which is locked  
asked
2 answers
1

Masterman

I use the Object Locking module - you can find it in the app store.  Last update was to 5.21.1, but it should work in 6.x

Mike

*** Edit For Response to Comment ***

The locks are placed on objects, not entities.  So to

  • prevent creation of a new object in an entity that is locked, you could have some microflow logic that would retrieve any currently locked objects of the entity you with to lock.  If any are retrieved, don't proceed with the microflow
  • prevent change of an association - use the same logic as for preventing creation of a new object - see if there are any currently locked objects of the entity you want to lock out.

Hope that helps.

answered
0

I tried to use the AcquireObjectLock java action that I found in the Object Locking module and I used as well the community common acquire lock, but for some reason I get the following stacktrace

 

com.mendix.core.CoreRuntimeException: com.mendix.systemwideinterfaces.MendixRuntimeException: java.lang.NullPointerException
        at com.mendix.core.component.InternalCore.execute(InternalCore.java:422)

Caused by:
com.mendix.systemwideinterfaces.MendixRuntimeException: java.lang.NullPointerException
        at com.mendix.core.actionmanagement.ActionManager.executeSync(ActionManager.java:176)

Caused by:
java.lang.NullPointerException
        at com.mendix.util.classloading.Runner.doRunUsingClassLoaderOf(Runner.java:40)

Caused by:
null
        at communitycommons.ORM.acquireLock(ORM.java:289)
        at communitycommons.actions.acquireLock.executeAction(acquireLock.java:35)
        at communitycommons.actions.acquireLock.executeAction(acquireLock.java:21)
        at com.mendix.systemwideinterfaces.core.UserAction.execute(UserAction.java:49)
        at com.mendix.core.actionmanagement.CoreAction.doCall(CoreAction.java:260)
        at com.mendix.core.actionmanagement.CoreAction.call(CoreAction.java:248)
        at com.mendix.core.actionmanagement.ActionManager$1.execute(ActionManager.java:168)
        at com.mendix.util.classloading.Runner.doRunUsingClassLoaderOf(Runner.java:36)
        at com.mendix.core.actionmanagement.ActionManager.executeSync(ActionManager.java:172)
        at com.mendix.core.component.InternalCore.execute(InternalCore.java:414)
        at com.mendix.modules.microflowengine.actions.actioncall.JavaAction.execute(JavaAction.scala:52)
        at com.mendix.modules.microflowengine.microflow.impl.MicroflowObject.execute(MicroflowObject.java:47)
        at com.mendix.modules.microflowengine.microflow.impl.MicroflowImpl.executeAfterBreakingIfNecessary(MicroflowImpl.java:192)
        at com.mendix.modules.microflowengine.microflow.impl.MicroflowImpl.executeAction(MicroflowImpl.java:149)
        at com.mendix.systemwideinterfaces.core.UserAction.execute(UserAction.java:49)
        at com.mendix.core.actionmanagement.CoreAction.doCall(CoreAction.java:260)
        at com.mendix.core.actionmanagement.CoreAction.call(CoreAction.java:248)
        at com.mendix.core.actionmanagement.ActionManager$1.execute(ActionManager.java:168)
        at com.mendix.util.classloading.Runner.doRunUsingClassLoaderOf(Runner.java:36)
        at com.mendix.core.actionmanagement.ActionManager.executeSync(ActionManager.java:172)
        at com.mendix.core.component.InternalCore.executeSync(InternalCore.java:496)
        at com.mendix.modules.microflowengine.actions.SubMicroflowAction.execute(SubMicroflowAction.scala:43)
        at com.mendix.modules.microflowengine.microflow.impl.MicroflowObject.execute(MicroflowObject.java:47)
        at com.mendix.modules.microflowengine.microflow.impl.MicroflowImpl.executeAfterBreakingIfNecessary(MicroflowImpl.java:192)
        at com.mendix.modules.microflowengine.microflow.impl.MicroflowImpl.executeAction(MicroflowImpl.java:149)
        at com.mendix.systemwideinterfaces.core.UserAction.execute(UserAction.java:49)
        at com.mendix.core.actionmanagement.CoreAction.doCall(CoreAction.java:260)
        at com.mendix.core.actionmanagement.CoreAction.call(CoreAction.java:248)
        at com.mendix.core.actionmanagement.ActionManager$1.execute(ActionManager.java:168)
        at com.mendix.util.classloading.Runner.doRunUsingClassLoaderOf(Runner.java:36)
        at com.mendix.core.actionmanagement.ActionManager.executeSync(ActionManager.java:172)
        at com.mendix.core.component.InternalCore.executeSync(InternalCore.java:496)
        at com.mendix.modules.microflowengine.actions.other.NestedLoopedMicroflowAction$$anonfun$executeLoop$2.apply(NestedLoopMicroflowAction.scala:67)
        at com.mendix.modules.microflowengine.actions.other.NestedLoopedMicroflowAction$$anonfun$executeLoop$2.apply(NestedLoopMicroflowAction.scala:58)
        at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:778)
        at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
        at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
        at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:777)
        at com.mendix.modules.microflowengine.actions.other.NestedLoopedMicroflowAction.executeLoop(NestedLoopMicroflowAction.scala:58)
        at com.mendix.modules.microflowengine.actions.other.NestedLoopedMicroflowAction.execute(NestedLoopMicroflowAction.scala:41)
        at com.mendix.modules.microflowengine.microflow.impl.MicroflowObject.execute(MicroflowObject.java:47)
        at com.mendix.modules.microflowengine.microflow.impl.MicroflowImpl.executeAfterBreakingIfNecessary(MicroflowImpl.java:192)
        at com.mendix.modules.microflowengine.microflow.impl.MicroflowImpl.executeAction(MicroflowImpl.java:149)
        at com.mendix.systemwideinterfaces.core.UserAction.execute(UserAction.java:49)
        at com.mendix.core.actionmanagement.CoreAction.doCall(CoreAction.java:260)
        at com.mendix.core.actionmanagement.CoreAction.call(CoreAction.java:248)
        at com.mendix.core.actionmanagement.ActionManager$1.execute(ActionManager.java:168)
        at com.mendix.util.classloading.Runner.doRunUsingClassLoaderOf(Runner.java:36)
        at com.mendix.core.actionmanagement.ActionManager.executeSync(ActionManager.java:172)
        at com.mendix.core.component.InternalCore.execute(InternalCore.java:387)
        at com.mendix.integration.webservices.publish.handling.WebServiceCallBodyProcessor.executeMicroflow(WebServiceCallBodyProcessor.scala:75)
        at com.mendix.integration.webservices.publish.handling.WebServiceActionMonitor$$anonfun$run$1.apply$mcV$sp(WebServiceActionMonitor.scala:18)
        at com.mendix.integration.webservices.publish.handling.WebServiceActionMonitor$$anonfun$run$1.apply(WebServiceActionMonitor.scala:16)
        at com.mendix.integration.webservices.publish.handling.WebServiceActionMonitor$$anonfun$run$1.apply(WebServiceActionMonitor.scala:16)
        at com.mendix.core.session.Worker$$anonfun$receive$3$$anonfun$2$$anon$1.execute(ActionDispatching.scala:143)
        at com.mendix.util.classloading.Runner.doRunUsingClassLoaderOf(Runner.java:36)
        at com.mendix.core.session.Worker$$anonfun$receive$3$$anonfun$2.apply(ActionDispatching.scala:145)
        at scala.util.Try$.apply(Try.scala:192)
        at com.mendix.core.session.Worker$$anonfun$receive$3.applyOrElse(ActionDispatching.scala:139)
        at akka.actor.Actor$class.aroundReceive(Actor.scala:465)
        at com.mendix.core.session.Worker.aroundReceive(ActionDispatching.scala:135)
        at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)
        at akka.actor.ActorCell.invoke(ActorCell.scala:487)
        at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:238)
        at akka.dispatch.Mailbox.run(Mailbox.scala:220)
        at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:393)
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

 

 

answered