You make me hesitating :-).
I just tried to make a pojo. But i will have to do a single Pojo called "Map" with all the properties? Right now i had 4 Enum. Here i will have to have all in the same POJO with name "Map".
The advantage i suppose is that with the Pojo, we can directly tell this attribute is a String, this one is a Integer, this one a Double and this one a Long and in the rules all will be done automatically without casting?
I can still assign $m1 for example to a Map found with "set variable name".
But in my example of 2 mails ago, to verify that it's not the same Map with verifying $m1["id"]!=$m2["id"] i have to write it by hand with adding a Map and choose formula then adding "$m1["id"]!=$m2["id"]"? Same for testing timestamp of $m1 is before timestamp of $m2? Or is there a way to add it in Pojo? I tried adding methods in the Pojo but i cannot call them.
I can have a look for taking the compiled package but this will mean change a lot of code. I had to implement something that watch if the drl file was change before creating the Knoledge base otherwise we keep the old knowledge base. Because i do it in a multi threaded environement and it was crashing.
If i take th ecompiled one, can i easily split this in 4 compiled package with each its rules? using Category?
The solution to do it with drl is a little too complicated.
Thanks again.
<html> <head> </head> <body text="#000000" bgcolor="#ffffff">
I will rethink of POJO but i think, it will be more ennoying to update any change. I will need a reference to these maps in almost every case in the THEN clause so not a big problem finally.
It's up to you. With a POJO you can implement Comparable using your time slots, and all other common behaviour that you will need later ... and don't be forced to set a tricky DSL ... and have validation/compilation telling you that you are using a non-existent field instead of getting NPE at runtime ... but it's up to you :)
For the second question :
In fact i have to make rules using these Enum and DSL and put rules in their specific files.
For example now i am working with 4 different drl files :
Files ?
According to your DSL questions, I guess that you are working with Guvnor, so you are getting your file via the package URL for the generated DRL file ?
You should create compiled package, because :
- rules are compiled so the KB loading is faster
- Guvnor (since 5.1) ca generate compiled package with only a subset of the rules, filtering them by category and/or status (or by a custom selection using rules :) ).
But if you can't,or don't want to create binaries, and still want to store all rules inthe same package (to avoid duplicating DSL and enums), may be you can
- assign your rules a 'ruleflow-group' and create a ruleflow that branch on the suitable group.
- use 'agenda-group'.
- With no rule flow, you can add to all your rules a condition that match a fact telling which group is executing
rule r1
when
Exec(task == "task1")
$m1 : ...
then
...
end
It depends on how you group your rules in files.
These files have to have this specific name and the name cannot change because the java code use this name to load the drl file in the session.
You can also access compiled binary package by a snapshot name.
Or if you have one single set of rules, create a single KB and provide methods that create new session ans add the specific control fact (not sure of the exact syntax, just to show the idea) :
task1() {
session = getKb().newStatelessSession();
session.insert(new Exec("task1")
...
session.execute(...)
}
task2() {
session = getKb().newStatelessSession();
session.insert(new Exec("task2")
...
session.execute(...)
}
and you can obviously make that generic ...
Don't know if global can contains Enum and DSL. I think it can only contain rulesTo put each rule in its specific file, do i have to create a package per file and name the package with the name of the file i want? And copy Enum and DSL in each package or can i put this in global?
Don't known, sorry.To use the Test Scenario, do you know if we have to do special things? I tried to add Maps in the Given part and run the scenario but i get an error ; "unable to find constructor for java.util.Map" and the same if i put a boolean, string... Is the Guvnor Test Scenario not able to find java class and how to make it reachable?
I have already tried Test Scenario with adding object for which i gave a Pojo but never with basic java type.
</body> </html>
http://drools-java-rules-engine.46999.n3.nabble.com/Guvnor-and-drools-implementation-questions-tp2602641p2634103.htmlIf you reply to this email, your message will be added to the discussion below: