2010-06-17 10 views
0

J'utilise Eclipse avec le plugin Drools pour créer des règles. Je veux créer des règles métier et l'objectif principal est d'essayer de fournir à l'utilisateur un ensemble d'options qu'il peut utiliser pour créer des règles. Par exemple: Si un Apple ne peut avoir que 3 couleurs: Je veux fournir une option comme une liste déroulante afin que l'utilisateur puisse savoir d'avance quelles sont les options qu'il peut utiliser dans ses règles. Est-ce possible? Je crée un fichier dsl mais je ne peux pas encore fournir la fonctionnalité ci-dessus pour une règle métier. J'ai une erreur d'implémentation d'un basic dsl aussi. Le code pour ajouter le dsl est la suivante dans ma classe de RuleRunner()Problème de création de règles DSL et de règles métier dans Drools

InputStream ruleSource = RuleRunner.class.getClassLoader() getResourceAsStream ("/ Rule1.dslr").

InputStream dslSource = RuleRunner.class.getClassLoader(). GetResourceAsStream ("/ sample-dsl.dsl");

// Charger les règles, utilisant DSL

addRulesToThisPackage.addPackageFromDrl ( nouvelle InputStreamReader (ruleSource), nouvelle InputStreamReader (dslSource));

J'ai les exemples .dlsl et Rule1.dslr dans mon répertoire de travail.

Une erreur s'ajoutant à l'dsl au paquet (dernière ligne)

pile d'erreur:

Exception dans le thread "principal" java.lang.NullPointerException

at java.io.Reader.<init>(Unknown Source) 

    at java.io.InputStreamReader.<init>(Unknown Source) 

    at com.org.RuleRunner.loadRuleFile(RuleRunner.java:96) 

    at com.org.RuleRunner.loadRules(RuleRunner.java:48) 

    at com.org.RuleRunner.runStatelessRules(RuleRunner.java:109) 

    at com.org.RulesTest.main(RulesTest.java:41) 

mon fichier dsl a cartographie de base selon les documentations en ligne.

La règle dsl j'ai créé est:

extension échantillon dsl.dsl

règle "Un statut change de statut B"

when 

     There is an A 

      -  has an address 

     There is a B 

      - has name 

    then 

     - print updated A and Aaddress 

Fin

J'ai créé DSL éclipse.

Est-ce que le code que j'ai ajouté pour qu'il soit chargé dans mon paquet correct ?? Ou est-ce que je manque quelque chose ???

Il semble que mon programme ne trouve pas le fichier dsl?

Aidez-nous s'il vous plaît. Pouvez-vous me diriger vers la bonne direction pour créer une règle d'affaires conviviale?

Merci.

J

Répondre

1

Je ne suis pas assez familier avec la méthode que vous essayez d'utiliser pour créer une session de connaissances, mais je vais montrer un exemple de ce qui est utilisé dans mes applications.

KnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase(<KnowledgeBaseConfiguration>); 
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); 
kbuilder.add(ResourceFactory.newClassPathResource("rules/myRuleFile.drl", getClass()), 
       ResourceType.DRL); 
kbuilder.add(ResourceFactory.newClassPathResource("rules/myDslFile.dsl", getClass()), 
       ResourceType.DSL); 
if (kbuilder.hasErrors()) { 
    System.err.println(builder.getErrors().toString()); 

} 
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); 

Maintenant, jusqu'à donner à vos utilisateurs la possibilité de créer des fichiers de règles, avec construit dans les contraintes, avez-vous regardé Drools Guvnor? (http://downloads.jboss.com/drools/docs/5.0.1.26597.FINAL/drools-guvnor/html_single/index.html) Je ne l'ai pas incorporé encore dans mon projet, mais ont fait des recherches un peu. Je pense qu'il peut fournir la fonctionnalité que vous recherchez pour permettre à vos utilisateurs de créer et de modifier des fichiers de règles. Bonne chance!

+0

merci :) était très utile! – JJunior