2017-07-26 2 views
0

Il y a dsl.DefaultExpander et dsl.DefaultExpanderResolver. Design et javadoc donne une idée, je peux ajouter mon expandeur personnalisé au flux. Mais je n'ai pas trouvé de réelle possibilité de faire ça. Voyez-vous comment puis-je atteindre DSL à analyser avec mon expandeur personnalisé?Extenseur personnalisé Drools DSL

+0

Une partie de l'expansion est à peu près tout ce dont vous avez besoin pour la traduction DSL vers DRL. Donc, si vous êtes prêt à écrire votre propre expandeur, vous n'avez pas besoin d'autre chose. Votre expandeur crée des DRL et vous les transmettez au compilateur DRL: c'est tout. – laune

+0

Nous sommes censés être intégrés à Business Centrall, les utilisateurs devraient avoir des règles en DSL là-bas, donc l'expander de la Colombie-Britannique fonctionne. Ce serait bien d'avoir une clé (comme plusieurs clés de débogage existantes) pour changer l'implémentation de l'expandeur. –

Répondre

1

Eh bien, dans KnowledgeBuilderImpl (la classe utilisée pour compiler DRL/DSL) Je vois la méthode suivante:

public DefaultExpander getDslExpander() { 
    DefaultExpander expander = new DefaultExpander(); 
    if (this.dslFiles == null || this.dslFiles.isEmpty()) { 
     return null; 
    } 
    for (DSLMappingFile file : this.dslFiles) { 
     expander.addDSLMapping(file.getMapping()); 
    } 
    return expander; 
} 

Comme vous pouvez le voir, DefaultExpander est Hardcoded là-bas, donc je suppose qu'il n'y a aucun moyen de spécifier toute autre implémentation.

La même chose se produit dans DrlParser.getDefaultResolver()DefaultExpanderResolver est toujours instancié peu importe quoi. À mon avis, la seule façon d'y aller est de pré-générer votre DRL (hors Drools) en fonction de votre propre sémantique et ensuite d'alimenter le DRL généré en Drool.

Espérons que ça aide,

+0

Merci pour votre réponse, j'ai vu cet extrait. Avoir un espoir que cela pourrait être suranné. –