Summary

In this chapter, we learnt that Apex is very different from other programming languages when it comes to handling concurrency issues. Due to these differences, we cannot use many concurrent design patterns that are accepted by the industry, in Apex. In the active object design pattern, we have used the For Update  SOQL clause to achieve a lock on a record. The standard Salesforce user interface is concurrency safe for different users but not for the same user. However, Apex is not at all concurrency safe, and we need to take extra steps to avoid these issues.

The following are the key points of our example as discussed earlier:

  • This design pattern mainly consists of a queue, scheduler, and an active class as key components.
  • This pattern decouples the execution method from its invocation.
  • As we cannot have a shared queue in Apex, we have used a custom object pending request in our example.
  • As we cannot have a scheduler run 24/7, we can run a scheduler every 10 minutes to fetch pending request records.
  • We have used the For Update SOQL clause to lock a record in advance.
  • The trade-off of using For Update is that if the execution takes more than 10 seconds, then other waiting processes trying to get the same record will end up with the Unable to lock record error.
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset