While under construction, this page contains a number of useful links for easy access, and to use as a checklist that you are clear on the major concepts.

Also see the items under the Reference Menu for quick access to key topics.

API references

The Javadocs for the various API's in the product:

 Component Description
 Engine APIThe main product.
 Business Logic Extensions A suite of useful classes that allow you to do common tasks easily, such as auditing, or making deep copies of objects.
 Recompute A utility to detect and fix discrepancies between your transaction logic and the current state of your database, such as initializing a newly defined derived attribute

Installation and setup

 Using ABL with Maven
 How to configure your Maven project to include the ABL engine
 Connecting ABL with Hibernate How to configure Hibernate to activate the ABL business logic engine.
 Configuring the ABL engine A reference to the various options for the engine.
 Logging A reference to how logging works in the engine
 Using Hibernate's Map mode Explains the advantages and downsides of using dynamic objects instead of Pojo's.
 Dynamic logic Shows how to have the ABL engine reload business logic at runtime
 Inheritance Explains how to use inheritance in the persistent beans, and in the logic classes.

Organizing and Managing Business Logic Projects

The challenges and skills in managing a project are no different with Business Logic Projects, and for the most part do not fundamentally change how you approach projects.   To get optimal value, we recommend you review:

Defining the business logic

 Creating logic classes Requirements for defining business logic
 Allowing ABL to find the logic classes The engine has several ways of looking for the business logic classes. They are all detailed here.
 The expression language
 Details on the expression language used in annotations, and other places

Business logic depends on your database design, so it is important to understand the guidelines.

Rules / Logic Annotations

This summarizes the Logic Annotations you can use in your Business Logic Components.  Click Tutorial for general background, and Reference for syntax.
Annotations are processed in a very specific order, which you may want to be aware of.

There are some important points to remember when defining rules: although they are spelled out in the documentation, they are summarized in this rules cheat sheet.

 Annotation       Description Example

Derive attribute value using other attributes in that class, or parent class (changes are propagated) @Formula("productPrice * qtyOrdered")
 public void deriveAmount() { }

 Parent Copy
Derive child attribute value from parent attribute value (changes are not propagated)

 public void deriveProductPrice() { }

Derive parent attribute value by summing designated child attribute, with optional Child Qualification Condition @Sum("purchaseorders.amountTotal where paid = false")
 public void deriveBalance() { }




Derive parent attribute value by counting designated child rows, with optional Child Qualification Condition  @Count("purchaseorders where paid = false")
 public void deriveNumUnpaidOrders() { }
 Reference for:
Multi-attribute expression of class/parent attributes that must be met for a transaction to succeed (else exception is thrown); can execute as transaction rows are processed, or at commit time after all rows are processed.

 @Constraint("balance <= creditLimit")
 public void constraintCreditLimit() { }


Reference for:

Invoke Java/Groovy action (typically from a library of extended rules); can execute during or after row processing

 public void auditSalary() {
    if (employee.baseSalary != employee_old.baseSalary)

Key Notes:

Logic is unordered
The Business Logic Engine invokes your rules automatically during transaction processing, ordered by their dependencies

Old Values
Formulas, Constraints and Actions can reference not only attribute values, but old attribute values, enabling you to specify state transition logic

Provides access to runtime services and state, such as logicNestLeveluseCaseName, etc.

Logic-related methods

These are fully supported extensions, provided both for your use, and as an illustration of how to build your own extensions.

 Allocation Allocates a provider amount to designated recipients, creating allocation objects (a Provider/Recipient Junction) for each such allocation amountUnDisbursed = BusinessLogic.allocateFromTo(
    it.amountUnPaid > 0}
 InsertInto Copy one or more source rows to a target class.  Useful for auditing, deep copy if (employee.baseSalary != employee_old.baseSalary)
BusinessLogic.insertChildFrom(EmployeeAudit.class, logicContext)

Key Notes:

Logic Design Patterns 
Most requirements can be met using these patterns which leverage Forward Chaining; see the Tutorial.

Rules can invoke Java/Groovy methods, enabling you to meet requirements not solved by Core Rules.  Judicious design can result in reusable logic, as illustrated by the pre-supplied BusinessLogic services for allocation and copy. 


The engine has several services that can be used for additional interaction.

 Event service This service is used to receive notifications of all activity in the engine.
 Direct Logic Execution  Execute Logic Class Methods without the requirement of altering attributes.
 Transaction summary service This service is used to retrieve a complete summary of all inserted, updated and deleted objects within a transaction. This can be very useful, for instance, to selectively update a GUI.
 Recompute utility This service scans a database and checks whether the data actually obeys the business logic. It can also fix some of these problems automatically.
 The Logic Console
 This service allows you to introspect a running ABL instance.
 Logic Finder Configure this for your own logic/Domain Object association


 Installation Difficulties with installation
 Transactions If things get committed when they shouldn't, or vice versa.
 General General trouble shooting

Subpages (27): View All