Les arbres de décision et les moteurs de règles (Bave)

Dans l'application que je suis en train de travailler en ce moment, j'ai besoin de vérifier périodiquement l'admissibilité des dizaines de milliers d'objets d'un certain type de service. La décision diagramme lui-même est dans la forme suivante, tout simplement la plus grande: Les arbres de décision et les moteurs de règles (Bave)

Dans chacun des nœuds (cercles), j'ai besoin d'exécuter une action (la modification d'un objet du domaine, les informations du journal, etc). J'ai essayé à l'aide de Bave d'Experts de cadre, mais dans ce cas, j'avais besoin d'écrire une longue règle pour chaque chemin dans le diagramme conduisant à un nœud de fin. Bave Flux ne semble pas être construit pour un tel cas d'utilisation soit - je prendre un objet et ensuite, en fonction des décisions sur le chemin, je me retrouve dans l'un des nœuds finaux; et puis de nouveau pour un autre objet. Ou est-il? Pourriez-vous me donner des exemples ou des liens vers de telles solutions?

Mise à JOUR:

Bave Flux d'appels pourrait ressembler à ceci:

//load up the knowledge base
KnowledgeBase kbase = readKnowledgeBase();
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
Map<String, Object> params = new HashMap<String, Object>();

for(int i = 0; i < 10000; i++) {

    Application app = somehowGetAppById(i);

    //insert app into working memory
    FactHandle appHandle = ksession.insert(app);

    //app variable for action nodes
    params.put("app", app);

    //start a new process instance
    ProcessInstance instance = ksession.startProcess("com.sample.ruleflow", params);
    while(true) {
        if(instance.getState() == instance.STATE_COMPLETED) {
            break;
        }
    }

  //remove object from working memory
    ksession.retract(appHandle);
}

Qui est: je voudrais prendre un objet d'Application, démarrer un nouveau processus pour elle, lorsque le processus est terminé (la dernière, action nœud serait de modifier l'application d'une certaine manière), j'aimerais supprimer l'objet de la mémoire de travail et répétez le processus pour une nouvelle Application objet. Que pensez-vous de cette solution?

SOLUTION:
J'ai fini à l'aide de Bave Flux et il a travaillé très bien. Mon processus de prise de décision n'est pas aussi simple que Drools Expert de la demande et, selon l'endroit où l'arbre de décision le processus est-il besoin de charger des listes d'objets à partir de la base de données, les transformer, prendre des décisions, journal etc tout. J'utilise un Processus d'objet qui est passé au processus en tant que paramètre et stocke toutes mes variables globales (pour le processus) et de certaines méthodes pratiques qui sont répétées à différents points dans l'arbre (comme l'écriture de code Java dans le Script Task nœuds n'est pas très pratique elle-même). J'ai aussi fini à l'aide de Java à prendre des décisions (et pas mvel ou règles) - c'est plus rapide et je dirais plus facile à contrôler. Tous les objets avec lesquels je travaille sont transmises comme paramètres et utilisé comme Java normal variables dans le code.

OriginalL'auteur John Manak | 2011-02-03