it's working for pkg, bad library

On Tue, Mar 8, 2011 at 4:30 PM, Eddy Hautot <[hidden email]> wrote:
Hi Vincent,

Thanks for precisions.

Didn't knew only set/get are used. Get to be careful when i will have 100+ attributes  :-)

Yes i created rueles with guided editor and it's working with my attribute. is there a way to remove "empty", "entrySet", "keySet", "clone",... herited from Map. So i would have only the attribute i have defined?

Ok i will do like this for testing eval($m1 != $m2) ... i have put this in separate line to meke it clearer at the beginning.

I think i will do your first option, rules will be clearer.

i have always used drl file instead of package. If i deploy a  file.pkg, is there a way to know what's in it? If i deploy something, i just want to be able later to very that all is well what i think if i have a doubt (easy with drl file).

When i try to create my session i have problem with pkg. For know with .drl file i do with that :

KnowledgeBase knowledgeBase = createKnowledgeBase();
StatefulKnowledgeSession session = knowledgeBase.newStatefulKnowledgeSession();

private static KnowledgeBase createKnowledgeBase() {
        final KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder ();

        builder.add(ResourceFactory.newUrlResource("file:///d://basicRule.drl"), ResourceType.DRL);
        if (builder.hasErrors()) {
            throw new RuntimeException(builder.getErrors()
                    .toString());
        }
        KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();
        knowledgeBase.addKnowledgePackages(builder.getKnowledgePackages());

        return knowledgeBase;
    }

If i replace the line :
builder.add(ResourceFactory.newUrlResource("file:///d://basicRule.drl"), ResourceType.DRL);
by :
builder.add(ResourceFactory.newUrlResource("file:///d://PackageTest1.pkg"), ResourceType.PKG);

but it's crashing :
xception in thread "main" org.drools.RuntimeDroolsException: Unable to load dialect 'org.drools.rule.builder.dialect.java.JavaDialectConfiguration:java:org.drools.rule.builder.dialect.java.JavaDialectConfiguration'
    at org.drools.compiler.PackageBuilderConfiguration.addDialect(PackageBuilderConfiguration.java:283)
    at org.drools.compiler.PackageBuilderConfiguration.buildDialectConfigurationMap(PackageBuilderConfiguration.java:268)
    at org.drools.compiler.PackageBuilderConfiguration.init(PackageBuilderConfiguration.java:181)
    at org.drools.compiler.PackageBuilderConfiguration.<init>(PackageBuilderConfiguration.java:154)
    at org.drools.builder.impl.KnowledgeBuilderFactoryServiceImpl.newKnowledgeBuilderConfiguration(KnowledgeBuilderFactoryServiceImpl.java:26)
    at org.drools.builder.KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration(KnowledgeBuilderFactory.java:86)
    at TestMapPojoPackage.createKnowledgeBase(TestMapPojoPackage.java:86)
    at TestMapPojoPackage.main(TestMapPojoPackage.java:58)
Caused by: java.lang.RuntimeException: The Janino jar is not in the classpath
    at org.drools.rule.builder.dialect.java.JavaDialectConfiguration.setCompiler(JavaDialectConfiguration.java:100)
    at org.drools.rule.builder.dialect.java.JavaDialectConfiguration.init(JavaDialectConfiguration.java:55)
    at org.drools.compiler.PackageBuilderConfiguration.addDialect(PackageBuilderConfiguration.java:279)
    ... 7 more

Is it something special to do?

Thanks again for your time


On Mon, Mar 7, 2011 at 7:44 PM, Vincent Legendre [via Drools - Java Rules Engine] <[hidden email]> wrote:
<html> <head> </head> <body text="#000000" bgcolor="#ffffff">
I've just created 2 class like you show me with some changes to fit and test all (timestamp are long in fact, i have put int, double and string as well)
In the second class you don't need the attributes as members, because Drools uses get / set methods to deduce them, and anyway you never use them as they are stored in the map.

Then i have imported this in Guvnor.

I have made 2 categories. I have put the model (jar) in the 2 categories.
That is non-sense. Jars are not linked to a category but to a package.

I have created 2 simple rules playing with the attributes id, timestamp...
With Guided editor ?



1) For the condition Map $m1 different then Map $m2. I suppose i have to use the function define in MapPojo? I have to write it by hand using "free from drl" : eval($m1 != $m2) ? or is there a better way?
Its a way.
You can also test the id directly in conditions (in Guided editor, bind the id of the first instance to a var, then compare it in the second condition.

The same for testing that $m1 timestamp (Long) is befor $m2. I have to write it by hand : eval($m1.isBefore($m2))? So they have to know it exist a method isBefore if not said by the gui?
Same. Add the test directly in the condition.
Another solution is to use a custom operator (search this mailing list for samples).

2) In the code It's written MapTest1(..) instead of Map(...) so i suppose drools has to do it with the precompiled package  .pkg to know about the MapPojo and MapTest1.. If i take only the .drl, drools won't know about class MapTest1.
It is MapTest1, because this is the class used .... and drools knows it because it uses it ... You don't use Map directly anymore

Yes i can set a category to each of my rule.
Yes you can !

Do you mean create 4 categories (cat1, cat2, cat3, cat4) and for rules of file1.drl, put them it cat1, for file2.drl, put them in cat2... ?
Yes

Set a first condition in the rules?
Choose between categories and first condition. Don't use both
Am i obliged to create a package per file and filter by category or is it possible to make a package with all and filtering when creating the knowledgeBase or something like that?
You certainly can filter your KB afterwards, but this is not really an out-of-the-box function. To me you have two options. For both options, you have only one Guvnor package :

First option
: categories
set categories for your rules as you said
compile by filtering one category, do a snapshot. Redo the same for other categories (in other snapshots).
Use these 4 snapshots in your code

Second option : First filtering condition
create a new POJO having only one field to handle the task asked (or category or group or file or whatever you call that) add a condition to all your rules testing this fact according to their group (as described in one of my previous mail)
create a single package (or use DRL) for all your rules.
when calling your rules, insert the suitable POJO according to tehexec you want.

The second is my favorite because it is less work to deploy, and your number of rules are quite small. The second option can be change to use a RuleFlow instead of a control fact.


</body> </html>
_______________________________________________
rules-users mailing list
[hidden email]

If you reply to this email, your message will be added to the discussion below:
http://drools-java-rules-engine.46999.n3.nabble.com/Guvnor-and-drools-implementation-questions-tp2602641p2647352.html




View this message in context: Re: Guvnor and drools implementation - questions
Sent from the Drools - User mailing list archive at Nabble.com.