openxava / documentation / Automated Business Logic (ABL) with OpenXava

Important!: ABL is no longer supported since OpenXava 5.3. Look at the migration notes for v5.3.

ABL is a library that allows you to write your business logic declaratively using annotations, this logic will be executed automatically on commit time.
ABL is included in OpenXava since v4.5. To active it you only need to add the next property to the persistence unit in your persistence.xml:
<persistence-unit name="default">
  ...
  <properties>
    ...
    <property name="hibernate.current_session_context_class"
          value="com.autobizlogic.abl.session.LogicThreadLocalSessionContext"/>
  </properties>
</persistence-unit>
Now you can add declarative logic, for example, if you have an entity like the next one:
package org.openxava.test.model
 
import javax.persistence.*
import org.openxava.annotations.*
 
@Entity
class MiniOrder {
 
    @Id
    int number
 
    @Column(length=40) @Required
    String description
 
    @Required
    BigDecimal productPrice
 
    @Required
    int qtyOrdered
 
    BigDecimal amount
 
}
You can define the calculation for the amount property writing a class with Logic sufix and ABL annotations:
package org.openxava.test.businesslogic
 
import com.autobizlogic.abl.annotations.*
 
class MiniOrderLogic {
 
    @Formula("productPrice * qtyOrdered") // This is an ABL annotations
    public void deriveAmount() { }
 
}
Just with this code each time that the database will be updated ABL will recalculate the amount value automatically.

Learn more about how to use ABL in OpenXava