Re: [rules-users] Drools all lhs execute before all the rhs, i want to run sequentially

2011-09-26 Thread Wolfgang Laun
It seems to me that you should write this as a plain old if/then/else/if...
in Java (or any other language). Or is there something else in the way
Drools evaluates rules over facts in working memory that makes it highly
desirable to use rules?

This has been asked before, and more often than not there was a way to avoid
a way of establishing the sequence of RHS execution by salience or whatever.


So, if you do need rules, you can assign decreasing salience values to all
your rules. To terminate, either call the engine's halt() method, or retract
the fact(s) triggering the rules. But note that all conditions will be
evaluated before the first RHS is executed. To aoid this: see the 1st
sentence.

-W


On 26 September 2011 06:54, Saurabh Pandey meet.saurabhpan...@gmail.comwrote:

 In drools rules, all the LHS ie when conditions are executed at the start,
 then all there subsequent rhs ie then part executes, In my project i want
 to
 run it as a  simple if-else i.e
 When ... Then do.
 When ... Then do..
 if this when is false then only go to the next when, and if its true then
 execute its then and then move ahead to the other when.
 i tried agenda-group, activation-group but these are not working for me.
 Can some one plz help me!

 --
 View this message in context:
 http://drools.46999.n3.nabble.com/Drools-all-lhs-execute-before-all-the-rhs-i-want-to-run-sequentially-tp3368215p3368215.html
 Sent from the Drools: User forum mailing list archive at Nabble.com.
 ___
 rules-users mailing list
 rules-users@lists.jboss.org
 https://lists.jboss.org/mailman/listinfo/rules-users

___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Drools all lhs execute before all the rhs, i want to run sequentially

2011-09-26 Thread Saurabh Pandey
Thanks for ur suggestion! I just wanted to keep the business logic in
separate drools layer.

--
View this message in context: 
http://drools.46999.n3.nabble.com/Drools-all-lhs-execute-before-all-the-rhs-i-want-to-run-sequentially-tp3368215p3368412.html
Sent from the Drools: User forum mailing list archive at Nabble.com.
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Drools all lhs execute before all the rhs, i want to run sequentially

2011-09-26 Thread Saurabh Pandey
@Nguy I tried salience but it just orders the execution of when part, but
still all when execute before the then parts

--
View this message in context: 
http://drools.46999.n3.nabble.com/Drools-all-lhs-execute-before-all-the-rhs-i-want-to-run-sequentially-tp3368215p3368415.html
Sent from the Drools: User forum mailing list archive at Nabble.com.
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Drools all lhs execute before all the rhs, i want to run sequentially

2011-09-26 Thread Saurabh Pandey
take a simple scenario:
when
 condition1
 condition2
then
 ...

Does the condition2 gets executed even if the condition1 is false, normally
it should not because the conditions in the when are actually combined with
an AND. Has anywhen tried this??

--
View this message in context: 
http://drools.46999.n3.nabble.com/Drools-all-lhs-execute-before-all-the-rhs-i-want-to-run-sequentially-tp3368215p3368464.html
Sent from the Drools: User forum mailing list archive at Nabble.com.
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Drools all lhs execute before all the rhs, i want to run sequentially

2011-09-26 Thread Swindells, Thomas
This isn't an if statement evaluated left to right with an  between each part.
Drools uses the rete algorithm to make execution more efficient.
Put very simply (and probably inaccurately) Rete creates an evaluation tree 
where inputs are put in the top and activations come out the end.
In this case the tree would have:
One node that evaluated condition1, this node outputs a list of all the facts 
that matches it.
A node for condition 2 which outputs a list all the facts that match that 
condition.
A node for the rule, this takes the outputs of the other two nodes and produces 
an activation for each pair of items (assuming condition 1 and 2 aren't 
related).

If you had another rule with condition1 and condition3 then they would both 
share the first node greatly improving efficiency and re-evaluation time.


Thomas

 -Original Message-
 From: rules-users-boun...@lists.jboss.org [mailto:rules-users-
 boun...@lists.jboss.org] On Behalf Of Saurabh Pandey
 Sent: 26 September 2011 08:15
 To: rules-users@lists.jboss.org
 Subject: Re: [rules-users] Drools all lhs execute before all the rhs, i want 
 to
 run sequentially

 take a simple scenario:
 when
  condition1
  condition2
 then
  ...

 Does the condition2 gets executed even if the condition1 is false, normally it
 should not because the conditions in the when are actually combined with an
 AND. Has anywhen tried this??

 --
 View this message in context: http://drools.46999.n3.nabble.com/Drools-all-
 lhs-execute-before-all-the-rhs-i-want-to-run-sequentially-
 tp3368215p3368464.html
 Sent from the Drools: User forum mailing list archive at Nabble.com.
 ___
 rules-users mailing list
 rules-users@lists.jboss.org
 https://lists.jboss.org/mailman/listinfo/rules-users


**
This message is confidential and intended only for the addressee. If you have 
received this message in error, please immediately notify the 
postmas...@nds.com and delete it from your system as well as any copies. The 
content of e-mails as well as traffic data may be monitored by NDS for 
employment and security purposes. To protect the environment please do not 
print this e-mail unless necessary.

NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18 4EX, 
United Kingdom. A company registered in England and Wales. Registered no. 
3080780. VAT no. GB 603 8808 40-00
**

___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Drools all lhs execute before all the rhs, i want to run sequentially

2011-09-26 Thread Swindells, Thomas
You missed the second part of the instructions - once a rule has matched you 
need to make sure the other rules don't match.
This can be achieved in multiple ways:
Call the engines halt method - just stop evaluation.
Retract the facts - then nothing else can match it.
Update the facts to stop the condition from being matched - eg add a 
processed field and make the rules match only if processed is false.
Insert a new fact and modify your rules to only run if that fact doesn't exist 
- eg add not YourResultObject() to the when's and insert(new 
YourResultObject()); to the thens.

Thomas
 -Original Message-
 From: rules-users-boun...@lists.jboss.org [mailto:rules-users-
 boun...@lists.jboss.org] On Behalf Of Saurabh Pandey
 Sent: 26 September 2011 07:49
 To: rules-users@lists.jboss.org
 Subject: Re: [rules-users] Drools all lhs execute before all the rhs, i want 
 to
 run sequentially

 @Nguy I tried salience but it just orders the execution of when part, but
 still all when execute before the then parts

 --
 View this message in context: http://drools.46999.n3.nabble.com/Drools-all-
 lhs-execute-before-all-the-rhs-i-want-to-run-sequentially-
 tp3368215p3368415.html
 Sent from the Drools: User forum mailing list archive at Nabble.com.
 ___
 rules-users mailing list
 rules-users@lists.jboss.org
 https://lists.jboss.org/mailman/listinfo/rules-users


**
This message is confidential and intended only for the addressee. If you have 
received this message in error, please immediately notify the 
postmas...@nds.com and delete it from your system as well as any copies. The 
content of e-mails as well as traffic data may be monitored by NDS for 
employment and security purposes. To protect the environment please do not 
print this e-mail unless necessary.

NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18 4EX, 
United Kingdom. A company registered in England and Wales. Registered no. 
3080780. VAT no. GB 603 8808 40-00
**

___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


[rules-users] Weird human task behaviour

2011-09-26 Thread HMandic
I  have this strange problem, when I call 

 int taskId = 105;  // dummy taskId, the real one is obtained
through TaskSummary
 BlockingTaskOperationResponseHandler b = new
BlockingTaskOperationResponseHandler();
 client.complete(taskId, myusername, null, b);
 while (!b.isDone()){
 b.waitTillDone(100);
 }
 System.out.println(Completed task +taskId+ owned by user
myusername.);

I get this in the log:

 INFO  [STDOUT] Completed task 105 owned by user myusername.
 INFO  [STDOUT] Notification of completed task 104

 ...and about 50 milliseconds later...

 INFO  [STDOUT] Notification of aborted task 104

No error messages between these two notifications.

I understand that these ID's are not the same because 104 is actually
workItemId that holds taskId 105.
The status of task 105 in the database table task is Completed, but the
workflow stops after it and I can't do anything about it.

Is there any known issues with task persistence in JBoss 5.1 or something?


--
View this message in context: 
http://drools.46999.n3.nabble.com/Weird-human-task-behaviour-tp3368608p3368608.html
Sent from the Drools: User forum mailing list archive at Nabble.com.
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Weird human task behaviour

2011-09-26 Thread HMandic
Ah, I forgot to mention that I'm using Drools 5.2.0 Final and jbpm 5.1.0
Final.

--
View this message in context: 
http://drools.46999.n3.nabble.com/Weird-human-task-behaviour-tp3368608p3368638.html
Sent from the Drools: User forum mailing list archive at Nabble.com.
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Drools all lhs execute before all the rhs, i want to run sequentially

2011-09-26 Thread Saurabh Pandey
these are my rules:
rule Rule 03
  salience 10
when
$info : RuleRunner()
eval(RuleRunner.check())
eval(RuleRunner.setIt())
then
System.out.println(3**);
$info.printResult(1);
end

rule Rule 04
  salience 8
when
$info : RuleRunner()
eval(RuleRunner.check())
then
System.out.println(4**);
$info.printResult(2);
end

these are my java methods:
static boolean cvar = true; 
public void printResult(int i){
System.out.println(i);
  }
  public static boolean check(){
System.out.println(check**);
return cvar;
  }
  public static boolean setIt(){
cvar = false;
return true;
  }

this is how i am invoking the rules:
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
  kbuilder.add(ResourceFactory.newFileResource(rule03.drl),
   ResourceType.DRL );
  
  if ( kbuilder.hasErrors() ) {
  System.err.println( kbuilder.getErrors().toString() );
  }   
  KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
  kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() ); 
  StatelessKnowledgeSession ksession =
kbase.newStatelessKnowledgeSession();
  ksession.execute(new RuleRunner());


This is the output:
check**
3**
1
4**
2

Why is check printing only once though its called 2 times in 2 rules, and
when cvar is false then also 2nd rule's then part is executing?
Is it that static methods of same name are called once and there result is
stored and used in all rules??


--
View this message in context: 
http://drools.46999.n3.nabble.com/Drools-all-lhs-execute-before-all-the-rhs-i-want-to-run-sequentially-tp3368215p3368864.html
Sent from the Drools: User forum mailing list archive at Nabble.com.
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Drools all lhs execute before all the rhs, i want to run sequentially

2011-09-26 Thread Swindells, Thomas
Have you read the expert guide? 
http://docs.jboss.org/drools/release/5.2.0.Final/drools-expert-docs/html_single/index.html
 - At least up to the end of chapter 4.
Why are you using static fields and methods?
You are changing the value of objects in the when condition which is really 
really really bad and it's no wonder nothing is working like you are expecting.
The fact that you are using eval's is a good indication that your code is 
written wrong, for simple rules you never need to use it.

Thomas


 -Original Message-
 From: rules-users-boun...@lists.jboss.org [mailto:rules-users-
 boun...@lists.jboss.org] On Behalf Of Saurabh Pandey
 Sent: 26 September 2011 11:22
 To: rules-users@lists.jboss.org
 Subject: Re: [rules-users] Drools all lhs execute before all the rhs, i want 
 to
 run sequentially

 these are my rules:
 rule Rule 03
   salience 10
 when
 $info : RuleRunner()
 eval(RuleRunner.check())
 eval(RuleRunner.setIt())
 then
 System.out.println(3**);
 $info.printResult(1);
 end

 rule Rule 04
   salience 8
 when
 $info : RuleRunner()
 eval(RuleRunner.check())
 then
 System.out.println(4**);
 $info.printResult(2);
 end

 these are my java methods:
 static boolean cvar = true;
 public void printResult(int i){
 System.out.println(i);
   }
   public static boolean check(){
 System.out.println(check**);
 return cvar;
   }
   public static boolean setIt(){
 cvar = false;
 return true;
   }

 this is how i am invoking the rules:
 KnowledgeBuilder kbuilder =
 KnowledgeBuilderFactory.newKnowledgeBuilder();
   kbuilder.add(ResourceFactory.newFileResource(rule03.drl),
ResourceType.DRL );

   if ( kbuilder.hasErrors() ) {
   System.err.println( kbuilder.getErrors().toString() );
   }
   KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
   kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
   StatelessKnowledgeSession ksession =
 kbase.newStatelessKnowledgeSession();
   ksession.execute(new RuleRunner());


 This is the output:
 check**
 3**
 1
 4**
 2

 Why is check printing only once though its called 2 times in 2 rules, and when
 cvar is false then also 2nd rule's then part is executing?
 Is it that static methods of same name are called once and there result is
 stored and used in all rules??


 --
 View this message in context: http://drools.46999.n3.nabble.com/Drools-all-
 lhs-execute-before-all-the-rhs-i-want-to-run-sequentially-
 tp3368215p3368864.html
 Sent from the Drools: User forum mailing list archive at Nabble.com.
 ___
 rules-users mailing list
 rules-users@lists.jboss.org
 https://lists.jboss.org/mailman/listinfo/rules-users


**
This message is confidential and intended only for the addressee. If you have 
received this message in error, please immediately notify the 
postmas...@nds.com and delete it from your system as well as any copies. The 
content of e-mails as well as traffic data may be monitored by NDS for 
employment and security purposes. To protect the environment please do not 
print this e-mail unless necessary.

NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18 4EX, 
United Kingdom. A company registered in England and Wales. Registered no. 
3080780. VAT no. GB 603 8808 40-00
**

___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Drools all lhs execute before all the rhs, i want to run sequentially

2011-09-26 Thread Saurabh Pandey
@thomas thanks for your comments I am new to drools, can u plz give me an
alternative to the above code.

--
View this message in context: 
http://drools.46999.n3.nabble.com/Drools-all-lhs-execute-before-all-the-rhs-i-want-to-run-sequentially-tp3368215p3368917.html
Sent from the Drools: User forum mailing list archive at Nabble.com.
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Drools all lhs execute before all the rhs, i want to run sequentially

2011-09-26 Thread rouvas
Saurabh Pandey wrote:
 @Nguy I tried salience but it just orders the execution of when part,
 but
 still all when execute before the then parts

Hi,
it seems to me that you are using the wrong tool to solve your problem.

Drools is a rule-based execution engine (among other things) not a
glorified if-then-else-if executor.

I'd suggest you consult the Drools manual (site is off at the moment). At
the beggining there is a nice section about when you could benefit from a
Drools-like approach or not.

If you still think that Drools is best suited for your needs, you need to
rethink your approach. I would not suggest using salience as this could be
mistaked as a way to force procedural logic on a system(Drools) that is
inherently not so.

-Stathis


 --
 View this message in context:
 http://drools.46999.n3.nabble.com/Drools-all-lhs-execute-before-all-the-rhs-i-want-to-run-sequentially-tp3368215p3368415.html
 Sent from the Drools: User forum mailing list archive at Nabble.com.
 ___
 rules-users mailing list
 rules-users@lists.jboss.org
 https://lists.jboss.org/mailman/listinfo/rules-users



___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Drools all lhs execute before all the rhs, i want to run sequentially

2011-09-26 Thread Swindells, Thomas
As I said, try reading the expert doc, there's some examples in there which you 
can base your code on.
Once you've done that or if you have any questions about the samples/what the 
documentation means
then post them and we'd be pleased to help, but the first step is to structure 
your code correctly using
objects that follow the bean conventions and rules structured correctly with 
conditions against objects
and appropriate modify statements.

Thomas
 -Original Message-
 From: rules-users-boun...@lists.jboss.org [mailto:rules-users-
 boun...@lists.jboss.org] On Behalf Of Saurabh Pandey
 Sent: 26 September 2011 11:51
 To: rules-users@lists.jboss.org
 Subject: Re: [rules-users] Drools all lhs execute before all the rhs, i want 
 to
 run sequentially

 @thomas thanks for your comments I am new to drools, can u plz give me an
 alternative to the above code.

 --
 View this message in context: http://drools.46999.n3.nabble.com/Drools-all-
 lhs-execute-before-all-the-rhs-i-want-to-run-sequentially-
 tp3368215p3368917.html
 Sent from the Drools: User forum mailing list archive at Nabble.com.
 ___
 rules-users mailing list
 rules-users@lists.jboss.org
 https://lists.jboss.org/mailman/listinfo/rules-users


**
This message is confidential and intended only for the addressee. If you have 
received this message in error, please immediately notify the 
postmas...@nds.com and delete it from your system as well as any copies. The 
content of e-mails as well as traffic data may be monitored by NDS for 
employment and security purposes. To protect the environment please do not 
print this e-mail unless necessary.

NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18 4EX, 
United Kingdom. A company registered in England and Wales. Registered no. 
3080780. VAT no. GB 603 8808 40-00
**

___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Drools all lhs execute before all the rhs, i want to run sequentially

2011-09-26 Thread Wendy Mungovan
Hi,
  If you have a lot of rules like it you might be able to use the jBPM (what 
what the Drools Flow) to help with this.  Otherwise plan old java might be 
easier...


Wendy




From: Swindells, Thomas tswinde...@nds.com
To: Rules Users List rules-users@lists.jboss.org
Sent: Monday, September 26, 2011 6:53 AM
Subject: Re: [rules-users] Drools all lhs execute before all the rhs, i want to 
run sequentially

As I said, try reading the expert doc, there's some examples in there which you 
can base your code on.
Once you've done that or if you have any questions about the samples/what the 
documentation means
then post them and we'd be pleased to help, but the first step is to structure 
your code correctly using
objects that follow the bean conventions and rules structured correctly with 
conditions against objects
and appropriate modify statements.

Thomas
 -Original Message-
 From: rules-users-boun...@lists.jboss.org [mailto:rules-users-
 boun...@lists.jboss.org] On Behalf Of Saurabh Pandey
 Sent: 26 September 2011 11:51
 To: rules-users@lists.jboss.org
 Subject: Re: [rules-users] Drools all lhs execute before all the rhs, i want 
 to
 run sequentially

 @thomas thanks for your comments I am new to drools, can u plz give me an
 alternative to the above code.

 --
 View this message in context: http://drools.46999.n3.nabble.com/Drools-all-
 lhs-execute-before-all-the-rhs-i-want-to-run-sequentially-
 tp3368215p3368917.html
 Sent from the Drools: User forum mailing list archive at Nabble.com.
 ___
 rules-users mailing list
 rules-users@lists.jboss.org
 https://lists.jboss.org/mailman/listinfo/rules-users


**
This message is confidential and intended only for the addressee. If you have 
received this message in error, please immediately notify the 
postmas...@nds.com and delete it from your system as well as any copies. The 
content of e-mails as well as traffic data may be monitored by NDS for 
employment and security purposes. To protect the environment please do not 
print this e-mail unless necessary.

NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18 4EX, 
United Kingdom. A company registered in England and Wales. Registered no. 
3080780. VAT no. GB 603 8808 40-00
**

___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


[rules-users] Regression with Drools 5.3.0-CR1

2011-09-26 Thread Swindells, Thomas
I've just tried upgrading from Drools 5.3.0-CR1 from the beta and I've hit a 
regression.

JBoss seems to have been down for most of today so I haven't been able to raise 
a Jira for it.

In our model we have Facts which contain fields of java.lang.class, we then 
have a rule which checks that they aren't null.
Eg
Fact { ClassObject classField}

Rule xyz
When
Fact(classField != null)
Then
...
End

This is giving the following exception

Caused by: java.lang.ClassCastException: org.drools.base.field.ObjectFieldImpl 
cannot be cast to org.drools.base.field.ClassFieldImpl
at 
org.drools.base.evaluators.EqualityEvaluatorsDefinition$ClassEqualEvaluator.evaluate(EqualityEvaluatorsDefinition.java:1772)
at 
org.drools.rule.LiteralRestriction.isAllowed(LiteralRestriction.java:87)
at 
org.drools.rule.LiteralConstraint.isAllowed(LiteralConstraint.java:109)
at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:130)
at 
org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:451)
at 
org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:369)
at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:134)
at 
org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:451)
at 
org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:379)
at 
org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:204)
at 
org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:244)
at 
org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:330)
at 
org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:291)
at 
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:882)
at 
org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:180)
... 149 more

Wrapping the classField != null within an eval appears to be a work around.

This is in the suspect method:
public boolean evaluate(InternalWorkingMemory workingMemory,
final InternalReadAccessor extractor,
final Object object1, final FieldValue object2) 
{
Object value1 = extractor.getValue( workingMemory, object1 );
Object value2 = object2.getValue();
if ( value2 == null ) {
ClassFieldImpl classField = (ClassFieldImpl) object2;
value2 = classField.resolve( workingMemory );
}
return comparator.equals( value1, value2 );
}

I think the if statement just needs an instanceof check as well or some other 
way to track the fact that null may be a valid value to be comparing with!


Thomas



**
This message is confidential and intended only for the addressee. If you have 
received this message in error, please immediately notify the 
postmas...@nds.com and delete it from your system as well as any copies. The 
content of e-mails as well as traffic data may be monitored by NDS for 
employment and security purposes. To protect the environment please do not 
print this e-mail unless necessary.

NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18 4EX, 
United Kingdom. A company registered in England and Wales. Registered no. 
3080780. VAT no. GB 603 8808 40-00
**
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Regression with Drools 5.3.0-CR1

2011-09-26 Thread Mauricio Salatino
That's a nice one.. We will definitely create a test for that.. if it's not
there..

2011/9/26 Swindells, Thomas tswinde...@nds.com

  I’ve just tried upgrading from Drools 5.3.0-CR1 from the beta and I’ve
 hit a regression.

 ** **

 JBoss seems to have been down for most of today so I haven’t been able to
 raise a Jira for it.

 ** **

 In our model we have Facts which contain fields of java.lang.class, we then
 have a rule which checks that they aren’t null.

 Eg

 Fact { ClassObject classField}

 ** **

 Rule “xyz”

 When

 Fact(classField != null)

 Then

 …

 End

 ** **

 This is giving the following exception

 ** **

 Caused by: java.lang.ClassCastException:
 org.drools.base.field.ObjectFieldImpl cannot be cast to
 org.drools.base.field.ClassFieldImpl

 at
 org.drools.base.evaluators.EqualityEvaluatorsDefinition$ClassEqualEvaluator.evaluate(EqualityEvaluatorsDefinition.java:1772)
 

 at
 org.drools.rule.LiteralRestriction.isAllowed(LiteralRestriction.java:87)**
 **

 at
 org.drools.rule.LiteralConstraint.isAllowed(LiteralConstraint.java:109)***
 *

 at
 org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:130)

 at
 org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:451)
 

 at
 org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:369)
 

 at
 org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:134)

 at
 org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:451)
 

 at
 org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:379)
 

 at
 org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:204)

 at
 org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:244)

 at
 org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:330)

 at
 org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:291)

 at
 org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:882)
 

 at
 org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:180)
 

 ... 149 more

 ** **

 Wrapping the classField != null within an eval appears to be a work around.
 

 ** **

 This is in the suspect method:

 *public* *boolean* evaluate(InternalWorkingMemory workingMemory,**
 **

 *final* InternalReadAccessor extractor,***
 *

 *final* Object object1, *final* FieldValue
 object2) {

 Object value1 = extractor.getValue( workingMemory, object1 );*
 ***

 Object value2 = object2.getValue();

 *if* ( value2 == *null* ) {

 ClassFieldImpl classField = (ClassFieldImpl) object2;

 value2 = classField.resolve( workingMemory );

 }

 *return* *comparator*.equals( value1, value2 );

 }

 ** **

 I think the if statement just needs an instanceof check as well or some
 other way to track the fact that null may be a valid value to be comparing
 with!

 ** **

 ** **

 Thomas

 --


 **
 This message is confidential and intended only for the addressee. If you
 have received this message in error, please immediately notify the
 postmas...@nds.com and delete it from your system as well as any copies.
 The content of e-mails as well as traffic data may be monitored by NDS for
 employment and security purposes. To protect the environment please do not
 print this e-mail unless necessary.

 NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18
 4EX, United Kingdom. A company registered in England and Wales. Registered
 no. 3080780. VAT no. GB 603 8808 40-00

 **

 ___
 rules-users mailing list
 rules-users@lists.jboss.org
 https://lists.jboss.org/mailman/listinfo/rules-users




-- 
 - CTO @ http://www.plugtree.com
 - MyJourney @ http://salaboy.wordpress.com
- Co-Founder @ http://www.jugargentina.org
 - Co-Founder @ http://www.jbug.com.ar

 - Salatino Salaboy Mauricio -
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] How to terminate a StatefulKnowledgeSession

2011-09-26 Thread bishopmm
Thanks for your suggestion about activating the console logger. That helped
me find out what's going on. After I fixed a stupid logic error on my part,
I found out that my basic solution will work. When the user decides to
cancel the session, I need to make sure that the current rule's RHS
processing completes. Then, my stop rule will fire and clear the agenda, and
fireAllRules() will finish normally.

--
View this message in context: 
http://drools.46999.n3.nabble.com/How-to-terminate-a-StatefulKnowledgeSession-tp3355958p3370067.html
Sent from the Drools: User forum mailing list archive at Nabble.com.
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Regression with Drools 5.3.0-CR1

2011-09-26 Thread Edson Tirelli
   Thomas,

   Thanks for reporting. I will look into it.

   Did you open a JIRA yet? Let me know or I will do it otherwise.

   Edson

2011/9/26 Swindells, Thomas tswinde...@nds.com

  I’ve just tried upgrading from Drools 5.3.0-CR1 from the beta and I’ve
 hit a regression.

 ** **

 JBoss seems to have been down for most of today so I haven’t been able to
 raise a Jira for it.

 ** **

 In our model we have Facts which contain fields of java.lang.class, we then
 have a rule which checks that they aren’t null.

 Eg

 Fact { ClassObject classField}

 ** **

 Rule “xyz”

 When

 Fact(classField != null)

 Then

 …

 End

 ** **

 This is giving the following exception

 ** **

 Caused by: java.lang.ClassCastException:
 org.drools.base.field.ObjectFieldImpl cannot be cast to
 org.drools.base.field.ClassFieldImpl

 at
 org.drools.base.evaluators.EqualityEvaluatorsDefinition$ClassEqualEvaluator.evaluate(EqualityEvaluatorsDefinition.java:1772)
 

 at
 org.drools.rule.LiteralRestriction.isAllowed(LiteralRestriction.java:87)**
 **

 at
 org.drools.rule.LiteralConstraint.isAllowed(LiteralConstraint.java:109)***
 *

 at
 org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:130)

 at
 org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:451)
 

 at
 org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:369)
 

 at
 org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:134)

 at
 org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:451)
 

 at
 org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:379)
 

 at
 org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:204)

 at
 org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:244)

 at
 org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:330)

 at
 org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:291)

 at
 org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:882)
 

 at
 org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:180)
 

 ... 149 more

 ** **

 Wrapping the classField != null within an eval appears to be a work around.
 

 ** **

 This is in the suspect method:

 *public* *boolean* evaluate(InternalWorkingMemory workingMemory,**
 **

 *final* InternalReadAccessor extractor,***
 *

 *final* Object object1, *final* FieldValue
 object2) {

 Object value1 = extractor.getValue( workingMemory, object1 );*
 ***

 Object value2 = object2.getValue();

 *if* ( value2 == *null* ) {

 ClassFieldImpl classField = (ClassFieldImpl) object2;

 value2 = classField.resolve( workingMemory );

 }

 *return* *comparator*.equals( value1, value2 );

 }

 ** **

 I think the if statement just needs an instanceof check as well or some
 other way to track the fact that null may be a valid value to be comparing
 with!

 ** **

 ** **

 Thomas

 --


 **
 This message is confidential and intended only for the addressee. If you
 have received this message in error, please immediately notify the
 postmas...@nds.com and delete it from your system as well as any copies.
 The content of e-mails as well as traffic data may be monitored by NDS for
 employment and security purposes. To protect the environment please do not
 print this e-mail unless necessary.

 NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18
 4EX, United Kingdom. A company registered in England and Wales. Registered
 no. 3080780. VAT no. GB 603 8808 40-00

 **

 ___
 rules-users mailing list
 rules-users@lists.jboss.org
 https://lists.jboss.org/mailman/listinfo/rules-users




-- 
  Edson Tirelli
  JBoss Drools Core Development
  JBoss by Red Hat @ www.jboss.com
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Regression with Drools 5.3.0-CR1

2011-09-26 Thread Wolfgang Laun
Note that https://issues.jboss.org/browse/JBRULES-2995 reported
against  5.2.0.CR1
and still open might be related.

-W

2011/9/26 Edson Tirelli ed.tire...@gmail.com


Thomas,

Thanks for reporting. I will look into it.

Did you open a JIRA yet? Let me know or I will do it otherwise.

Edson

 2011/9/26 Swindells, Thomas tswinde...@nds.com

  I’ve just tried upgrading from Drools 5.3.0-CR1 from the beta and I’ve
 hit a regression.

 ** **

 JBoss seems to have been down for most of today so I haven’t been able to
 raise a Jira for it.

 ** **

 In our model we have Facts which contain fields of java.lang.class, we
 then have a rule which checks that they aren’t null.

 Eg

 Fact { ClassObject classField}

 ** **

 Rule “xyz”

 When

 Fact(classField != null)

 Then

 …

 End

 ** **

 This is giving the following exception

 ** **

 Caused by: java.lang.ClassCastException:
 org.drools.base.field.ObjectFieldImpl cannot be cast to
 org.drools.base.field.ClassFieldImpl

 at
 org.drools.base.evaluators.EqualityEvaluatorsDefinition$ClassEqualEvaluator.evaluate(EqualityEvaluatorsDefinition.java:1772)
 

 at
 org.drools.rule.LiteralRestriction.isAllowed(LiteralRestriction.java:87)*
 ***

 at
 org.drools.rule.LiteralConstraint.isAllowed(LiteralConstraint.java:109)**
 **

 at
 org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:130)

 at
 org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:451)
 

 at
 org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:369)
 

 at
 org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:134)

 at
 org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:451)
 

 at
 org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:379)
 

 at
 org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:204)***
 *

 at
 org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:244)***
 *

 at
 org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:330)

 at
 org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:291)

 at
 org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:882)
 

 at
 org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:180)
 

 ... 149 more

 ** **

 Wrapping the classField != null within an eval appears to be a work
 around.

 ** **

 This is in the suspect method:

 *public* *boolean* evaluate(InternalWorkingMemory workingMemory,*
 ***

 *final* InternalReadAccessor extractor,**
 **

 *final* Object object1, *final*FieldValue 
 object2) {
 

 Object value1 = extractor.getValue( workingMemory, object1 );
 

 Object value2 = object2.getValue();

 *if* ( value2 == *null* ) {

 ClassFieldImpl classField = (ClassFieldImpl) object2;

 value2 = classField.resolve( workingMemory );

 }

 *return* *comparator*.equals( value1, value2 );

 }

 ** **

 I think the if statement just needs an instanceof check as well or some
 other way to track the fact that null may be a valid value to be comparing
 with!

 ** **

 ** **

 Thomas

 --


 **
 This message is confidential and intended only for the addressee. If you
 have received this message in error, please immediately notify the
 postmas...@nds.com and delete it from your system as well as any copies.
 The content of e-mails as well as traffic data may be monitored by NDS for
 employment and security purposes. To protect the environment please do not
 print this e-mail unless necessary.

 NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18
 4EX, United Kingdom. A company registered in England and Wales. Registered
 no. 3080780. VAT no. GB 603 8808 40-00

 **

 ___
 rules-users mailing list
 rules-users@lists.jboss.org
 https://lists.jboss.org/mailman/listinfo/rules-users




 --
   Edson Tirelli
   JBoss Drools Core Development
   JBoss by Red Hat @ www.jboss.com

 ___
 rules-users mailing list
 rules-users@lists.jboss.org
 https://lists.jboss.org/mailman/listinfo/rules-users



Re: [rules-users] Regression with Drools 5.3.0-CR1

2011-09-26 Thread Edson Tirelli
   Thanks Wolfgang. That is a different issue related to how MVEL deals with
class literals. I will check what's the status on it anyway.

   Edson

2011/9/26 Wolfgang Laun wolfgang.l...@gmail.com

 Note that https://issues.jboss.org/browse/JBRULES-2995 reported against  
 5.2.0.CR1
 and still open might be related.

 -W

 2011/9/26 Edson Tirelli ed.tire...@gmail.com


Thomas,

Thanks for reporting. I will look into it.

Did you open a JIRA yet? Let me know or I will do it otherwise.

Edson

 2011/9/26 Swindells, Thomas tswinde...@nds.com

  I’ve just tried upgrading from Drools 5.3.0-CR1 from the beta and I’ve
 hit a regression.

 ** **

 JBoss seems to have been down for most of today so I haven’t been able to
 raise a Jira for it.

 ** **

 In our model we have Facts which contain fields of java.lang.class, we
 then have a rule which checks that they aren’t null.

 Eg

 Fact { ClassObject classField}

 ** **

 Rule “xyz”

 When

 Fact(classField != null)

 Then

 …

 End

 ** **

 This is giving the following exception

 ** **

 Caused by: java.lang.ClassCastException:
 org.drools.base.field.ObjectFieldImpl cannot be cast to
 org.drools.base.field.ClassFieldImpl

 at
 org.drools.base.evaluators.EqualityEvaluatorsDefinition$ClassEqualEvaluator.evaluate(EqualityEvaluatorsDefinition.java:1772)
 

 at
 org.drools.rule.LiteralRestriction.isAllowed(LiteralRestriction.java:87)
 

 at
 org.drools.rule.LiteralConstraint.isAllowed(LiteralConstraint.java:109)*
 ***

 at
 org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:130)

 at
 org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:451)
 

 at
 org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:369)
 

 at
 org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:134)

 at
 org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:451)
 

 at
 org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:379)
 

 at
 org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:204)**
 **

 at
 org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:244)**
 **

 at
 org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:330)

 at
 org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:291)

 at
 org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:882)
 

 at
 org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:180)
 

 ... 149 more

 ** **

 Wrapping the classField != null within an eval appears to be a work
 around.

 ** **

 This is in the suspect method:

 *public* *boolean* evaluate(InternalWorkingMemory workingMemory,
 

 *final* InternalReadAccessor extractor,*
 ***

 *final* Object object1, *final*FieldValue 
 object2) {
 

 Object value1 = extractor.getValue( workingMemory, object1 );
 

 Object value2 = object2.getValue();

 *if* ( value2 == *null* ) {

 ClassFieldImpl classField = (ClassFieldImpl) object2;***
 *

 value2 = classField.resolve( workingMemory );

 }

 *return* *comparator*.equals( value1, value2 );

 }

 ** **

 I think the if statement just needs an instanceof check as well or some
 other way to track the fact that null may be a valid value to be comparing
 with!

 ** **

 ** **

 Thomas

 --


 **
 This message is confidential and intended only for the addressee. If you
 have received this message in error, please immediately notify the
 postmas...@nds.com and delete it from your system as well as any copies.
 The content of e-mails as well as traffic data may be monitored by NDS for
 employment and security purposes. To protect the environment please do not
 print this e-mail unless necessary.

 NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18
 4EX, United Kingdom. A company registered in England and Wales. Registered
 no. 3080780. VAT no. GB 603 8808 40-00

 **

 ___
 rules-users mailing list
 rules-users@lists.jboss.org
 https://lists.jboss.org/mailman/listinfo/rules-users




 --
   Edson Tirelli
   JBoss Drools Core 

Re: [rules-users] Regression with Drools 5.3.0-CR1

2011-09-26 Thread Edson Tirelli
   Ok, this is fixed:

https://issues.jboss.org/browse/JBRULES-3224

   I will check JBRULES-2995 now.

   Edson

2011/9/26 Edson Tirelli ed.tire...@gmail.com


Thanks Wolfgang. That is a different issue related to how MVEL deals
 with class literals. I will check what's the status on it anyway.

Edson


 2011/9/26 Wolfgang Laun wolfgang.l...@gmail.com

 Note that https://issues.jboss.org/browse/JBRULES-2995 reported against  
 5.2.0.CR1
 and still open might be related.

 -W

 2011/9/26 Edson Tirelli ed.tire...@gmail.com


Thomas,

Thanks for reporting. I will look into it.

Did you open a JIRA yet? Let me know or I will do it otherwise.

Edson

 2011/9/26 Swindells, Thomas tswinde...@nds.com

  I’ve just tried upgrading from Drools 5.3.0-CR1 from the beta and I’ve
 hit a regression.

 ** **

 JBoss seems to have been down for most of today so I haven’t been able
 to raise a Jira for it.

 ** **

 In our model we have Facts which contain fields of java.lang.class, we
 then have a rule which checks that they aren’t null.

 Eg

 Fact { ClassObject classField}

 ** **

 Rule “xyz”

 When

 Fact(classField != null)

 Then

 …

 End

 ** **

 This is giving the following exception

 ** **

 Caused by: java.lang.ClassCastException:
 org.drools.base.field.ObjectFieldImpl cannot be cast to
 org.drools.base.field.ClassFieldImpl

 at
 org.drools.base.evaluators.EqualityEvaluatorsDefinition$ClassEqualEvaluator.evaluate(EqualityEvaluatorsDefinition.java:1772)
 

 at
 org.drools.rule.LiteralRestriction.isAllowed(LiteralRestriction.java:87)
 

 at
 org.drools.rule.LiteralConstraint.isAllowed(LiteralConstraint.java:109)
 

 at
 org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:130)

 at
 org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:451)
 

 at
 org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:369)
 

 at
 org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:134)

 at
 org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:451)
 

 at
 org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:379)
 

 at
 org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:204)*
 ***

 at
 org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:244)*
 ***

 at
 org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:330)

 at
 org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:291)

 at
 org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:882)
 

 at
 org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:180)
 

 ... 149 more

 ** **

 Wrapping the classField != null within an eval appears to be a work
 around.

 ** **

 This is in the suspect method:

 *public* *boolean* evaluate(InternalWorkingMemory
 workingMemory,

 *final* InternalReadAccessor extractor,
 

 *final* Object object1, *final*FieldValue 
 object2) {
 

 Object value1 = extractor.getValue( workingMemory, object1
 );

 Object value2 = object2.getValue();

 *if* ( value2 == *null* ) {

 ClassFieldImpl classField = (ClassFieldImpl) object2;**
 **

 value2 = classField.resolve( workingMemory );

 }

 *return* *comparator*.equals( value1, value2 );

 }

 ** **

 I think the if statement just needs an instanceof check as well or some
 other way to track the fact that null may be a valid value to be comparing
 with!

 ** **

 ** **

 Thomas

 --


 **
 This message is confidential and intended only for the addressee. If you
 have received this message in error, please immediately notify the
 postmas...@nds.com and delete it from your system as well as any
 copies. The content of e-mails as well as traffic data may be monitored by
 NDS for employment and security purposes. To protect the environment please
 do not print this e-mail unless necessary.

 NDS Limited. Registered Office: One London Road, Staines, Middlesex,
 TW18 4EX, United Kingdom. A company registered in England and Wales.
 Registered no. 3080780. VAT no. GB 603 8808 40-00

 **

 

[rules-users] Maven Drools Plugin needs proper de-serialization support from DroolsStreamUtils

2011-09-26 Thread Ansgar Konermann
Hi all,

I think I've found a bug in DroolsStreamUtils.

It does not allow to deserialize a collection of KnowledgePackages with
dependencies between the packages. In this case, it fails with
ClassNotFoundException.
Example: Package A contains a type declaration, package B contains a
rule using this declaration. Compilation and serialization works fine,
but deserialization fails (complains that it cannot find declared type).
As it seems, the deserialization code does not consider classes
resulting from declared types when resolving type references.

This is true for Drools 5.2.0.Final, 5.3.0.CR1 and 5.3.0.Beta1. It works
fine for 5.1.1.

I was so bold to create a JIRA ticket for this problem right away:
https://issues.jboss.org/browse/JBRULES-3225 (with unit tests attached).


The functionality provided by class DroolsStreamUtils is essential for
the Maven Drools Plugin (compiler needs to serialize stuff, which then
needs to be *de-serializable* by applications).

If anyone is interested in using the upcoming Maven Drools Plugin to
compile rule source code into binary package files and *load* theses
packages from your application, please *vote* for this JIRA ticket, as
the maven plugin *must* rely on serialization functionality *provided by
drools*  (a re-implementation is certainly out of scope and would be
more than prone to incompatibility). Without a fix or at least a
workaround for this bug, the maven plugin will only be able to work with
Drools 5.1.1 (newer versions are broken, older versions did not include
DroolsStreamUtils at all AFAIK).

Thanks in advance, to everyone who will contribute to a potential
solution or workaround.

Best regards

Ansgar


___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


[rules-users] Unsatisfied rule fires - Drools bug?

2011-09-26 Thread matvey1414
Hi, 

I am working with Drools to implement a high-profile rules-engine. I have
two rules defined. Clearly, only the first should fire, but both do. Here is
my DRL: 


package com.sample 

import com.sample.DroolsTest.Request; 

rule ExpensiveCanonShopper0 
when 
Request( attributeMap[camera0] == canon 
attributeMap[price0] = 500 ) 
then 
System.out.println(ExpensiveCanonShopper0); 
end 

rule ExpensiveCanonShopper1 
when 
Request( attributeMap[camera1] == canon 
attributeMap[price1] = 500 ) 
then 
System.out.println(ExpensiveCanonShopper1); 
end 

And the Java class to execute it: 

public class DroolsTest { 

@SuppressWarnings({ rawtypes, unchecked }) 
public static final void main(String[] args) { 
try { 
//Loading the Rules 
System.out.println(Loading rules); 
RuleBase ruleBase = readRule(); 
StatelessSession workingMemory =
ruleBase.newStatelessSession(); 

System.out.println(Firing rules); 

Map map = new HashMap(); 
map.put(camera0, canon); 
map.put(price0, 600); 

Request request = new Request();
request.setAttributeMap(map);   
workingMemory.execute(request); 

} catch (Throwable t) { 
t.printStackTrace(); 
} 
} 

/** 
 * Please note that this is the “low level” rule assembly API. 
 */ 
private static RuleBase readRule() throws Exception { 
//read in the source 
Reader source = new FileReader(new File(drl,
Generated.drl)); 

//optionally read in the DSL (if you are using it). 
//Reader dsl = new InputStreamReader(
DroolsTest.class.getResourceAsStream( “/mylang.dsl” ) ); 

//Use package builder to build up a rule package. 
//An alternative lower level class called “DrlParser” can
also be used… 

PackageBuilder builder = new PackageBuilder(); 

//this wil parse and compile in one step 
//NOTE: There are 2 methods here, the one argument one is
for normal DRL. 
builder.addPackageFromDrl( source ); 
if (builder.hasErrors()) { 
PackageBuilderErrors errors = builder.getErrors();  
throw new RuntimeException(Error adding package to
builder:  + errors.toString()); 
} 

//Use the following instead of above if you are using a DSL: 
//builder.addPackageFromDrl( source, dsl ); 

//get the compiled package (which is serializable) 
Package pkg = builder.getPackage(); 

//add the package to a rulebase (deploy the rule package). 
RuleBase ruleBase = RuleBaseFactory.newRuleBase(); 
ruleBase.addPackage( pkg ); 
return ruleBase; 
} 

public static class Request { 
private Map attributeMap; 

public Map getAttributeMap() { 
return attributeMap; 
} 

public void setAttributeMap(Map attributeMap) { 
this.attributeMap = attributeMap; 
} 
} 
} 

The output is this, meaning both rules fired: 
Loading rules 
Firing rules 
ExpensiveCanonShopper1 
ExpensiveCanonShopper0 

I have two questions: 

1. Is this a bug, or am I doing something wrong? Only
ExpensiveCanonShopper0 should fire. 

2. I am pretty sure this is somehow related to the fact that I'm using Map
attributes, and not POJO to get price0 and camera0. My issue is that I
won't know the parameters in advance (they are coming in a URL), so I can't
pre-declare them, and thus need something dynamic like a Map. Is this how
Drools is intended to be used? The documentation appears very POJO-centric. 

I am using Drools 5.2 

Thank you! 
-Matt

--
View this message in context: 
http://drools.46999.n3.nabble.com/Unsatisfied-rule-fires-Drools-bug-tp3370653p3370653.html
Sent from the Drools: User forum mailing list archive at Nabble.com.

___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users