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
Répondre
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() où 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,
Merci pour votre réponse, j'ai vu cet extrait. Avoir un espoir que cela pourrait être suranné. –
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
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. –