Version 1

    Taking inspiration from the Pizza language, could we layer a rule language and features ontop of an existing language - instead of by it's side:


    While this could be done for any JVM language, Java9 will be the focus here. Annotations, and CDI, are an essential part of making this work declaratively.


    RuleModule is a Class that has rule members and can be instantiated and fire rules.

    @RuleModule // name is inferred from java class
    @RuleModule("Short name")


    Injectable member fields would replace "globals" and would be injected by CDI, which would allow for creation and injectino of complex object graphs.


    public class SomeClassName {
        @Inject // Injected by CDI
        void SomeService service;
        int counter;
        void someMethod() {
            counter++; // just demonstrating these are methods with member var access, not pure functions
        @LongName("Long description names go here, rule names now must be valid java names, obeying same conventions nested classes" )
        rule RuleName when {
            $a : Alarm()
        } then {
   $a );


    KieBase is the new name for KnowledgeBase. We can allow declarative assocation of RuleModules in a number of potential ways.


    @RuleModules( {MyModule1.class, MyModule2.class, MyModule3.class } )


    public abstract class MyKieBaseClass implements KieBase {



    The above would create a KieBase that consisted of 3 KieModules. It's abstract, because the code generation will add in the rest of KieBase implementation.