The Logic

Korwe uses a powerful workflow and state based mechanism to deploy and manage services. This centralises control. Users of our MEAP are not obliged to use our Logic implementation, normal functional logic will suffice. However, in complex environments, state control allows you to deal with all the illegal transitions systematically, such as a user is signed up for a particular service, but not another, but wants to access a third service.

Handset Control

We have implemented the state part of the Logic model using an XML based State Description languages called SCXML. This is semantically an incredibly powerful and stable, as well as providing a useful graphical way of understanding deployed services.

Our Logic architecture offers

  • Robustness: that at any time the system stays in a known, determined state, regardless of vagaries of the user, and availability of back-end services
  • Adaptability: you can modify the system through xml to accommodate new requirements
  • Attractive and complete pages delivered: the Core allows us to assemble all the elements of a page to send to a user‚ Web pages can accommodate a fairly unstructured delivery via AJAX, but not mobile
  • User re-entry into workflow: there is a very high chance that a process will be interrupted ‚ if this happens, the mobile user must be able to re-enter the process where he/she left off ‚it can be tedious to work through screens on a mobile handset, let‚ us make it as easy to complete as possible
  • Security: if you know your state, there is less chance of a miscreant subverting a process by deliberately confusing it.
  • Predictability: If the user does something wrong, or there is a bug in the system, the user can always move back to a safe state, and not end up with a hung application
  • Scalability: If the system is architected with states, and paths between them, clearly defined, then adding extra steps or functionality is faster, easier and less prone to introducing bugs.

Workflow

We manage workflow as well from our Logic module. This is based on the Activiti library.