The corrected version of dsl and dslr works fine.
-----------[condition][]There is a Customer with first name {name}=$customer : Customer(firstName == {name})[consequence][]Greet Customer=package dsltest;
System.out.println("Hello " + $customer.getFirstName());
-----------rule "hello rule"------------
when
There is a Customer with first name "David"
then
Greet Customer
end
You don't have to write the DSL all in one line. (I fixed that some time ago.)
The error message suggests that translation fails.
1) Make sure the DSLR is *exactly* as above. (The package could be
different, and there is tolerance w.r.t. spacing between words.)
2) ALWAYS print builder errors (see below).
3) Make sure you pass resources correctly to the builder. This is how
it is done for 5.x:
KnowledgeBaseConfiguration kBaseConfig =
KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
KnowledgeBuilderConfiguration kbConfig =
KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
KnowledgeBuilder kBuilder =
KnowledgeBuilderFactory.newKnowledgeBuilder( kbConfig );
Resource dsl = ResourceFactory.newFileResource( dslPath );
Resource dslr = ResourceFactory.newFileResource( dslrPath );
long t0 = System.currentTimeMillis();
kBuilder.add( dsl, ResourceType.DSL );
kBuilder.add( dslr, ResourceType.DSLR );
if( kBuilder.hasErrors() ){
System.err.println( ">>> compilation errors >>>" );
KnowledgeBuilderErrors errors = kBuilder.getErrors();
for( KnowledgeBuilderError err: errors ){
System.err.println( err.getMessage() );
}
System.err.println( "<<< compilation errors <<<" );
throw new IllegalStateException( "compile errors" );
}
kBase = KnowledgeBaseFactory.newKnowledgeBase( kBaseConfig );
kBase.addKnowledgePackages( kBuilder.getKnowledgePackages() );
kSession = kBase.newStatefulKnowledgeSession();
-W