Bonjour, je travaille depuis plusieurs semaines sur un problème de régles Drools et je n'arrive pas à m'en sortir. Le but final est d'automatiser le traitement de certaines pensions.
Si quelqu'un pouvait me donner une piste , ce serait parfait.
J'utilise java jdk 1.6.0_13, eclipse galileo, avec les plugins gef et drools.
Dans une version très expurgée, j'ai une classe principale Go.java,
2 classes ( FaitTest et FaitsProposition ), un fichier de regles identification.drl
et une sortie console. Les voici:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82 //=========== Go.java ======================== package sre.main; import java.io.InputStreamReader; import java.io.Reader; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; import org.drools.KnowledgeBase; import org.drools.KnowledgeBaseFactory; import org.drools.builder.KnowledgeBuilder; import org.drools.builder.KnowledgeBuilderFactory; import org.drools.builder.ResourceType; import org.drools.io.ResourceFactory; import org.drools.logger.KnowledgeRuntimeLogger; import org.drools.logger.KnowledgeRuntimeLoggerFactory; import org.drools.runtime.StatefulKnowledgeSession; import org.drools.runtime.StatelessKnowledgeSession; import sre.faits.FaitTest; import sre.faits.FaitsProposition; public class Go { public static void main(String[] args) throws Exception { // Début du programme System.out.println("Debut"); Reader reglesidentif = new InputStreamReader( Go.class.getResourceAsStream( "identification.drl" ) ); // Instancier plusieurs packages à partir des règles fournies KnowledgeBuilder kPersonne = KnowledgeBuilderFactory.newKnowledgeBuilder(); kPersonne.add( ResourceFactory.newReaderResource( reglesidentif ), ResourceType.DRL ); //Créer la base de règles et ajouter les packages (deployer le paquet de regles). KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages( kPersonne.getKnowledgePackages() ); // Creation d'une session "stateless StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession(); Collection laliste = new ArrayList(); FaitTest f1 = new FaitTest(); f1.setCle("cle1"); f1.setValeur("valeur2"); FaitTest f2 = new FaitTest(); f2.setCle("cle2"); f2.setValeur(""); // Une proposition complète FaitsProposition p1 = new FaitsProposition( "DESAVION","VroomVroom", "Yvan","rue du chat ui pleure", "", "", "","44123", "Ville","23454323", "98788","00001"); // Une proposition sans nom patronymique. La regle 1 doit être déclenchée FaitsProposition p2 = new FaitsProposition( "","SONTRACTEUR", "Ygor","rue du devers", "", "", "","44123", "Ville","23454323", "98788","00001"); laliste.add(f1); laliste.add(f2); laliste.add(p1); laliste.add(p2); System.out.println("Contenu de l'arraylist laliste"); System.out.println(((ArrayList) laliste).toString()); System.out.println("execution"); ksession.execute(laliste); System.out.println("Fin"); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 //=========== FaitTest ================== package sre.faits; public class FaitTest { String cle; String valeur; public FaitTest(){ this.cle = ""; this.valeur = ""; } public FaitTest(String _cle, String _valeur){ this.cle=_cle; this.valeur=_valeur; } public void setCle(String _cle){ this.cle=_cle; } public void setValeur(String _valeur){ this.valeur=_valeur; } public String getCle(){ return this.cle; } public String getValeur(){ return this.valeur; } //public String toString(){ // return "fait [ " + this.cle + ", " + this.valeur + "]"; // } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131 //========= FaitsProposition =================== package sre.faits; public class FaitsProposition { // Attributs /* Tous les attributs issus des propositions * seront préfixés par la lettre p. * * Chaque champ du DEDP sera considéré et le * fait qu'il soit servi ou pas sera un fait. * */ String pnompatro; String pnomusage; String pprenom; String padresse1; String padresse2; String padresse3; String padresse4; String pcp; String pville; String pnumbordereau; String pnumproposition; String pnumdossier; public FaitsProposition(){ } public FaitsProposition( String _pnompatro, String _pnomusage, String _pprenom, String _padresse1, String _padresse2, String _padresse3, String _padresse4, String _pcp, String _pville, String _pnumbordereau, String _pnumproposition, String _pnumdossier ){ this.pnompatro=_pnompatro; this.pnomusage=_pnomusage; this.pprenom=_pprenom; this.padresse1=_padresse1; this.padresse2=_padresse2; this.padresse3=_padresse3; this.padresse4=_padresse4; this.pcp=_pcp; this.pville=_pville; this.pnumbordereau=_pnumbordereau; this.pnumproposition=_pnumproposition; this.pnumdossier=_pnumdossier; } public String getPNompatro(){ return this.pnompatro; } public String getPNomusage(){ return this.pnomusage; } public String getPPrenom(){ return this.pprenom; } public String getPAdresse1(){ return this.padresse1; } public String getPAdresse2(){ return this.padresse2; } public String getPAdresse3(){ return this.padresse3; } public String getPAdresse4(){ return this.padresse4; } public String getPCP(){ return this.pcp; } public String getVille(){ return this.pville; } public String getNumBordereau(){ return this.pnumbordereau; } public String getNumProposition(){ return this.pnumproposition; } public String getNumDossier(){ return this.pnumdossier; } public void setPNomPatro(String _pnompatro){ this.pnompatro= _pnompatro; } public void setPNomUsage(String _pnomusage){ this.pnomusage= _pnomusage; } public void setPPrenom(String _pprenom){ this.pprenom= _pprenom; } public void setAdresse1(String _padresse1){ this.padresse1= _padresse1; } public void setAdresse2(String _padresse2){ this.padresse1= _padresse2; } public void setAdresse3(String _padresse3){ this.padresse2= _padresse3; } public void setAdresse4(String _padresse4){ this.padresse4= _padresse4; } public void setPCP(String _pcp){ this.pcp= _pcp; } public void setPVille(String _pville){ this.pville= _pville; } public void setPNumBordereau(String _pnumbordereau){ this.pnumbordereau= _pnumbordereau; } public void setPNumDossier(String _pnumdossier){ this.pnumdossier= _pnumdossier; } public void setPNumProposition(String _pnumproposition){ this.pnumproposition= _pnumproposition; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 //========= identification.drl ================== #created on: 21 sept. 2009 package pensions import sre.faits.FaitTest; import sre.faits.FaitsProposition; rule "regle un" dialect "mvel" when FaitsProposition ( PNompatro == "" || PNompatro == null ) then System.out.println("application regle un"); end rule "regle trois" dialect "mvel" when FaitTest() then System.out.println("application regle 3"); endDonc jusque là tout est normal============= Sortie console ======================
Debut
Contenu de l'arraylist laliste
[sre.faits.FaitTest@9ffe3f, sre.faits.FaitTest@1ed1b0b, sre.faits.FaitsProposition@18a8ce2, sre.faits.FaitsProposition@12789d2]
execution
application regle un
application regle 3
application regle 3
Fin
============================================
mais lorsque je veux faire un peu plus de controle en changeant
la regle 3 plus rien ne fonctionne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 ========== Le fichier de regles, modifié ============= #created on: 21 sept. 2009 package pensions import sre.faits.FaitTest; import sre.faits.FaitsProposition; rule "regle un" dialect "mvel" when FaitsProposition ( PNompatro == "" || PNompatro == null ) then System.out.println("application regle un"); end rule "regle trois" dialect "mvel" when FaitTest( Valeur == "Valeur") then System.out.println("application regle 3"); endEn fait, d'une part je ne vois pas l'erreur dans ma declaration,=========== Sortie console dans ce cas =======
Debut
Contenu de l'arraylist laliste
[sre.faits.FaitTest@15718f2, sre.faits.FaitTest@126f827, sre.faits.FaitsProposition@16dfa45, sre.faits.FaitsProposition@149eb9f]
execution
Fin
Je suis persuadé de respecter les directives du manuel drools, alors je ne comprends pas
d'autre part j'aurai pu comprendre que la regle 3 ne fonctionne pas s'il y a une erreur ( mais laquelle ?) mais même la règle 1 ne fonctionne pas
Je suis preneur de toute piste
Merci à tous
Mrtldvd
Partager