Re: [rules-users] "Not" Non-Existential Quantifier

2008-08-04 Thread ringsah
Edson,

I finally succeeded in coming up with a simple test case that shows the 
problem. I have attached the necessary files, which include a test case, three 
fact objects, and the drl.

One key to this test are the fact that the Applicant fact object has an 
"equals" method that tests for equality of its attributes, rather than 
identity. A second key is that the applicant object is updated after it is 
inserted.

It appears that what is happening is that an activation is created for the rule 
that uses "not" when the applicant is inserted. Then, when the applicant is 
updated, a second activation is created for that rule. It should be cancelling 
the previous activation, but doesn't find it because the Applicant instance no 
longer "equals" the fact object that caused the activation.

Thanks!
-Hans
-- Original message -- 
From: "Edson Tirelli" <[EMAIL PROTECTED]> 


   Hans, 

   Your reasoning is correct. There should not be 2 instances of 
ApplicantStatus in the working memory. 

   Can you provide a test case showing the problem? we have test cases here 
using "not" and logical assertions, and it works properly.

   Thanks,
   Edson


2008/7/31 <[EMAIL PROTECTED]>

How is "
not" supposed to work with insertLogical? Assume I have two different rules 
whose conditions are mutually exclusive, like the following: 
rule
"Rule One" 
when 
not NegativeResult() 
then 
insertLogical(new ApplicantStatus("Approved")); 
end
rule
"Rule Two" 
when 
NegativeResult() 
then 
insertLogical(new ApplicantStatus("Denied")); 
end
Assume that the above two rules are the only way an 
ApplicantStatus fact can be inserted into working memory. I would expect, after 
all rules are run, that it would be impossible for there to be one 
ApplicantStatus with "Approved" as its reason, and another with "Denied" as its 
reason, in the working memory. 
I would expect that, before any 
NegativeResult is inserted, that rule one could run, and insert an 
ApplicantStatus fact with an "Approved" reason. Then, after a NegativeResult is 
inserted, that rule two could run, and insert an ApplicantStatus fact with a 
"Denied" reason. At this point I would expect that the original ApplicantStatus 
fact, with an "Approved" reason, would be retracted, since the conditions under 
which it was inserted are no lon! ger true. 
This is not what I am observing, however. I am finding 
ApplicantStatus facts with both reasons in working memory at the end of the 
rules run. Should "not" work as I expect with regard to inserting a fact via 
insertLogical()? Or is this a known limitation, or simply the way it is 
designed to work? 
Thanks,
-Hans

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





-- 
Edson Tirelli
JBoss Drools Core Development
JBoss, a division of Red Hat @ www.jboss.com--- Begin Message ---
--- Begin Message ---
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users
--- End Message ---


Applicant.java
Description: Binary data


ApplicantStatus.java
Description: Binary data


NegativeResult.java
Description: Binary data


notTest.drl
Description: Binary data
--- End Message ---


NotTest.java
Description: Binary data
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


RE: [rules-users] "Not" Non-Existential Quantifier

2008-08-04 Thread Fenderbosch, Eric
How is your rule base configured, with identity or equality assert
behavior?



From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of
[EMAIL PROTECTED]
Sent: Monday, August 04, 2008 9:59 AM
To: Rules Users List
Subject: Re: [rules-users] "Not" Non-Existential Quantifier


Edson,
 
I finally succeeded in coming up with a simple test case that shows the
problem. I have attached the necessary files, which include a test case,
three fact objects, and the drl.
 
One key to this test are the fact that the Applicant fact object has an
"equals" method that tests for equality of its attributes, rather than
identity. A second key is that the applicant object is updated after it
is inserted.
 
It appears that what is happening is that an activation is created for
the rule that uses "not" when the applicant is inserted. Then, when the
applicant is updated, a second activation is created for that rule. It
should be cancelling the previous activation, but doesn't find it
because the Applicant instance no longer "equals" the fact object that
caused the activation.
 
Thanks!
-Hans

-- Original message -- 
From: "Edson Tirelli" <[EMAIL PROTECTED]> 


   Hans, 

   Your reasoning is correct. There should not be 2 instances of
ApplicantStatus in the working memory. 

   Can you provide a test case showing the problem? we have test
cases here using "not" and logical assertions, and it works properly.

   Thanks,
   Edson


2008/7/31 <[EMAIL PROTECTED]>


How is "

not" supposed to work with insertLogical? Assume I have
two different rules whose conditions are mutually exclusive, like the
following: 

rule

"Rule One" 



when 



not NegativeResult() 



then 



insertLogical(new ApplicantStatus("Approved")); 

end

rule

"Rule Two" 



when 



NegativeResult() 



then 



insertLogical(new ApplicantStatus("Denied")); 

end

Assume that the above two rules are the only way an 

ApplicantStatus fact can be inserted into working
memory. I would expect, after all rules are run, that it would be
impossible for there to be one ApplicantStatus with "Approved" as its
reason, and another with "Denied" as its reason, in the working memory. 

I would expect that, before any 

NegativeResult is inserted, that rule one could run, and
insert an ApplicantStatus fact with an "Approved" reason. Then, after a
NegativeResult is inserted, that rule two could run, and insert an
ApplicantStatus fact with a "Denied" reason. At this point I would
expect that the original ApplicantStatus fact, with an "Approved"
reason, would be retracted, since the conditions under which it was
inserted are no lon! ger true. 

This is not what I am observing, however. I am finding 

ApplicantStatus facts with both reasons in working
memory at the end of the rules run. Should "not" work as I expect with
regard to inserting a fact via insertLogical()? Or is this a known
limitation, or simply the way it is designed to work? 

Thanks,

-Hans


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






-- 
Edson Tirelli
JBoss Drools Core Development
JBoss, a division of 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] "Not" Non-Existential Quantifier

2008-08-04 Thread ringsah
The default - identity.

-- Original message -- 
From: "Fenderbosch, Eric" <[EMAIL PROTECTED]> 

How is your rule base configured, with identity or equality assert behavior?




From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED]
Sent: Monday, August 04, 2008 9:59 AM
To: Rules Users List
Subject: Re: [rules-users] "Not" Non-Existential Quantifier



Edson,

I finally succeeded in coming up with a simple test case that shows the 
problem. I have attached the necessary files, which include a test case, three 
fact objects, and the drl.

One key to this test are the fact that the Applicant fact object has an 
"equals" method that tests for equality of its attributes, rather than 
identity. A second key is that the applicant object is updated after it is 
inserted.

It appears that what is happening is that an activation is created for the rule 
that uses "not" when the applicant is inserted. Then, when the applicant is 
updated, a second activation is created for that rule. It should be cancelling 
the previous activation, but doesn't find it because the Applicant instance no 
longer "equals" the fact object that caused the activation.

Thanks!
-Hans
-- Original message -- 
From: "Edson Tirelli" <[EMAIL PROTECTED]> 


   Hans, 

   Your reasoning is correct. There should not be 2 instances of 
ApplicantStatus in the working memory. 

   Can you provide a test case showing the problem? we have test cases here 
using "not" and logical assertions, and it works properly.

   Thanks,
   Edson


2008/7/31 <[EMAIL PROTECTED]>

How is "
not" supposed to work with insertLogical? Assume I have two different rules 
whose conditions are mutually exclusive, like the following: 
rule
"Rule One" 
when 
not NegativeResult() 
then 
insertLogical(new ApplicantStatus("Approved")); 
end
rule
"Rule Two" 
when 
NegativeResult() 
then 
insertLogical(new ApplicantStatus("Denied")); 
end
Assume that the above two rules are the only way an 
ApplicantStatus fact can be inserted into working memory. I would expect, after 
all rules are run, that it would be impossible for there to be one 
ApplicantStatus with "Approved" as its reason, and another with "Denied" as its 
reason, in the working memory. 
I would expect that, before any 
NegativeResult is inserted, that rule one could run, and insert an 
ApplicantStatus fact with an "Approved" reason. Then, after a NegativeResult is 
inserted, that rule two could run, and insert an ApplicantStatus fact with a 
"Denied" reason. At this point I would expect that the original ApplicantStatus 
fact, with an "Approved" reason, would be retracted, since the conditions under 
which it was inserted are no lon! ger true. 
This is not what I am observing, however. I am finding 
ApplicantStatus facts with both reasons in working memory at the end of the 
rules run. Should "not" work as I expect with regard to inserting a fact via 
insertLogical()? Or is this a known limitation, or simply the way it is 
designed to work? 
Thanks,
-Hans

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





-- 
Edson Tirelli
JBoss Drools Core Development
JBoss, a division of Red Hat @ www.jboss.com--- Begin Message ---
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users
--- End Message ---
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] "Not" Non-Existential Quantifier

2008-08-04 Thread Edson Tirelli
   Oh, I see.

   Unfortunately in this case, there is nothing we can do about it, because
the rules are behaving exactly as they were supposed to behave:

NegativeResult(applicant == $applicant)

   As you can see, they are telling the application to use the equals
comparison in the constraint:

applicant == $applicant

   A fact should not change it's identity once it is asserted, so, either
you use a constant "equals()/hashcode()" implementation, or you use
constraints on an immutable ID:

NegativeResult(applicantId == $applicant.id)

   You can also fallback to java "identity" check by using eval, but it is
ugly... :)

NegativeResult( eval( applicant == $applicant) )

   []s
   Edson


2008/8/4 <[EMAIL PROTECTED]>

>  Edson,
>
> I finally succeeded in coming up with a simple test case that shows the
> problem. I have attached the necessary files, which include a test case,
> three fact objects, and the drl.
>
> One key to this test are the fact that the Applicant fact object has an
> "equals" method that tests for equality of its attributes, rather than
> identity. A second key is that the applicant object is updated after it is
> inserted.
>
> It appears that what is happening is that an activation is created for the
> rule that uses "not" when the applicant is inserted. Then, when the
> applicant is updated, a second activation is created for that rule. It
> should be cancelling the previous activation, but doesn't find it because
> the Applicant instance no longer "equals" the fact object that caused the
> activation.
>
> Thanks!
> -Hans
>
> -- Original message --
> From: "Edson Tirelli" <[EMAIL PROTECTED]>
>
>Hans,
>
>Your reasoning is correct. There should not be 2 instances of
> ApplicantStatus in the working memory.
>
>Can you provide a test case showing the problem? we have test cases here
> using "not" and logical assertions, and it works properly.
>
>Thanks,
>Edson
>
> 2008/7/31 <[EMAIL PROTECTED]>
>
>>  How is "
>> not" supposed to work with insertLogical? Assume I have two different
>> rules whose conditions are mutually exclusive, like the following:*
>>
>> rule
>> *"Rule One"
>>
>> *when*
>>
>> not NegativeResult()
>>
>> *then*
>>
>> *insertLogical*(new ApplicantStatus("Approved"));*
>>
>> end
>> **
>>
>> rule
>> *"Rule Two"
>>
>> *when*
>>
>> NegativeResult()
>>
>> *then*
>>
>> *insertLogical*(new ApplicantStatus("Denied"));*
>>
>> end
>> *
>>
>> Assume that the above two rules are the only way an
>> ApplicantStatus fact can be inserted into working memory. I would expect,
>> after all rules are run, that it would be impossible for there to be one
>> ApplicantStatus with "Approved" as its reason, and another with "Denied"as 
>> its reason, in the working memory.
>>
>> I would expect that, before any
>> NegativeResult is inserted, that rule one could run, and insert an
>> ApplicantStatus fact with an "Approved" reason. Then, after a
>> NegativeResult is inserted, that rule two could run, and insert an
>> ApplicantStatus fact with a "Denied" reason. At this point I would expect
>> that the original ApplicantStatus fact, with an "Approved" reason, would
>> be retracted, since the conditions under which it was inserted are no lon!
>> ger true.
>>
>> This is not what I am observing, however. I am finding
>> ApplicantStatus facts with both reasons in working memory at the end of
>> the rules run. Should "not" work as I expect with regard to inserting a fact
>> via insertLogical()? Or is this a known limitation, or simply the way it
>> is designed to work?
>>
>> Thanks,
>>
>> -Hans
>>
>> ___
>> rules-users mailing list
>> rules-users@lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>
>
> --
> Edson Tirelli
> JBoss Drools Core Development
> JBoss, a division of Red Hat @ www.jboss.com
>
>
>
> -- Mensagem encaminhada --
> From: [EMAIL PROTECTED]
> To: Rules Users List 
> Date: Mon, 04 Aug 2008 13:49:37 +
> Subject: Re: [rules-users] "Not" Non-Existential Quantifier
>
>
> -- Mensagem encaminhada --
> From: "Edson Tirelli" <[EMAIL PROTECTED]>
> To: "Rules Users List" 
> Date: Thu, 31 Jul 2008 17:41:39 +
> Subject: Re: [rules-users] "Not" Non-Existential Quantifier
> ___
> 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
>
>


-- 
Edson Tirelli
JBoss Drools Core Development
JBoss, a division of 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] "Not" Non-Existential Quantifier

2008-08-04 Thread Edson Tirelli
   Eric,

   Unfortunately, in his case does not matter if he is using identity or
equality behavior, because the problem is in the constraint, that is telling
the engine to use equals():

applicant == $applicant

   []s
   Edson





2008/8/4 Fenderbosch, Eric <[EMAIL PROTECTED]>

>  How is your rule base configured, with identity or equality assert
> behavior?
>
>  --
> *From:* [EMAIL PROTECTED] [mailto:
> [EMAIL PROTECTED] *On Behalf Of [EMAIL PROTECTED]
> *Sent:* Monday, August 04, 2008 9:59 AM
> *To:* Rules Users List
> *Subject:* Re: [rules-users] "Not" Non-Existential Quantifier
>
>  Edson,
>
> I finally succeeded in coming up with a simple test case that shows the
> problem. I have attached the necessary files, which include a test case,
> three fact objects, and the drl.
>
> One key to this test are the fact that the Applicant fact object has an
> "equals" method that tests for equality of its attributes, rather than
> identity. A second key is that the applicant object is updated after it is
> inserted.
>
> It appears that what is happening is that an activation is created for the
> rule that uses "not" when the applicant is inserted. Then, when the
> applicant is updated, a second activation is created for that rule. It
> should be cancelling the previous activation, but doesn't find it because
> the Applicant instance no longer "equals" the fact object that caused the
> activation.
>
> Thanks!
> -Hans
>
> -- Original message --
> From: "Edson Tirelli" <[EMAIL PROTECTED]>
>
>Hans,
>
>Your reasoning is correct. There should not be 2 instances of
> ApplicantStatus in the working memory.
>
>Can you provide a test case showing the problem? we have test cases here
> using "not" and logical assertions, and it works properly.
>
>Thanks,
>Edson
>
> 2008/7/31 <[EMAIL PROTECTED]>
>
>>  How is "
>> not" supposed to work with insertLogical? Assume I have two different
>> rules whose conditions are mutually exclusive, like the following:*
>>
>> rule
>> *"Rule One"
>>
>> *when*
>>
>> not NegativeResult()
>>
>> *then*
>>
>> *insertLogical*(new ApplicantStatus("Approved"));*
>>
>> end
>> **
>>
>> rule
>> *"Rule Two"
>>
>> *when*
>>
>> NegativeResult()
>>
>> *then*
>>
>> *insertLogical*(new ApplicantStatus("Denied"));*
>>
>> end
>> *
>>
>> Assume that the above two rules are the only way an
>> ApplicantStatus fact can be inserted into working memory. I would expect,
>> after all rules are run, that it would be impossible for there to be one
>> ApplicantStatus with "Approved" as its reason, and another with "Denied"as 
>> its reason, in the working memory.
>>
>> I would expect that, before any
>> NegativeResult is inserted, that rule one could run, and insert an
>> ApplicantStatus fact with an "Approved" reason. Then, after a
>> NegativeResult is inserted, that rule two could run, and insert an
>> ApplicantStatus fact with a "Denied" reason. At this point I would expect
>> that the original ApplicantStatus fact, with an "Approved" reason, would
>> be retracted, since the conditions under which it was inserted are no lon!
>> ger true.
>>
>> This is not what I am observing, however. I am finding
>> ApplicantStatus facts with both reasons in working memory at the end of
>> the rules run. Should "not" work as I expect with regard to inserting a fact
>> via insertLogical()? Or is this a known limitation, or simply the way it
>> is designed to work?
>>
>> Thanks,
>>
>> -Hans
>>
>> ___
>> rules-users mailing list
>> rules-users@lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>
>
> --
> Edson Tirelli
> JBoss Drools Core Development
> JBoss, a division of Red Hat @ www.jboss.com
>
>
> ___
> rules-users mailing list
> rules-users@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>


-- 
Edson Tirelli
JBoss Drools Core Development
JBoss, a division of 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] "Not" Non-Existential Quantifier

2008-08-04 Thread ringsah
Okay, I understand now. I had incorrectly assumed that the "applicant == 
$applicant" constraint was using identity. Not a big deal to work around. It 
seems like you would most often want to use identity in constraints, but I 
guess you have to provide for those cases when you need to use equality. Maybe 
there should be two different operators. Just my two ¢.

Anyway, thanks.
-Hans

-- Original message -- 
From: "Edson Tirelli" <[EMAIL PROTECTED]> 


   Oh, I see. 

   Unfortunately in this case, there is nothing we can do about it, because the 
rules are behaving exactly as they were supposed to behave:

NegativeResult(applicant == $applicant)

   As you can see, they are telling the application to use the equals 
comparison in the constraint:

applicant == $applicant

   A fact should not change it's identity once it is asserted, so, either you 
use a constant "equals()/hashcode()" implementation, or you use constraints on 
an immutable ID:

NegativeResult(applicantId == $applicant.id)

   You can also fallback to java "identity" check by using eval, but it is 
ugly... :)

NegativeResult( eval( applicant == $applicant) )

   []s
   Edson



2008/8/4 <[EMAIL PROTECTED]>

Edson,

I finally succeeded in coming up with a simple test case that shows the 
problem. I have attached the necessary files, which include a test case, three 
fact objects, and the drl.

One key to this test are the fact that the Applicant fact object has an 
"equals" method that tests for equality of its attributes, rather than 
identity. A second key is that the applicant object is updated after it is 
inserted.

It appears that what is happening is that an activation is created for the rule 
that uses "not" when the applicant is inserted. Then, when the applicant is 
updated, a second activation is created for that rule. It should be cancelling 
the previous activation, but doesn't find it because the Applicant instance no 
longer "equals" the fact object that caused the activation.

Thanks!
-Hans
-- Original message -- 
From: "Edson Tirelli" <[EMAIL PROTECTED]> 


   Hans, 

   Your reasoning is correct. There should not be 2 instances of 
ApplicantStatus in the working memory. 

   Can you provide a test case showing the problem? we have test cases here 
using "not" and logical assertions, and it works properly.

   Thanks,
   Edson


2008/7/31 <[EMAIL PROTECTED]>

How is "
not" supposed to work with insertLogical? Assume I have two different rules 
whose conditions are mutually exclusive, like the following: 
rule
"Rule One" 
when 
not NegativeResult() 
then 
insertLogical(new ApplicantStatus("Approved")); 
end
rule
"Rule Two" 
when 
NegativeResult() 
then 
insertLogical(new ApplicantStatus("Denied")); 
end
Assume that the above two rules are the only way an 
ApplicantStatus fact can be inserted into working memory. I would expect, after 
all rules are run, that it would be impossible for there to be one 
ApplicantStatus with "Approved" as its reason, and another with "Denied" as its 
reason, in the working memory. 
I would expect that, before any 
NegativeResult is inserted, that rule one could run, and insert an 
ApplicantStatus fact with an "Approved" reason. Then, after a NegativeResult is 
inserted, that rule two could run, and insert an ApplicantStatus fact with a 
"Denied" reason. At this point I would expect that the original ApplicantStatus 
fact, with an "Approved" reason, would be retracted, since the conditions under 
which it was inserted are no lon! ger true. 
This is not what I am observing, however. I am finding 
ApplicantStatus facts with both reasons in working memory at the end of the 
rules run. Should "not" work as I expect with regard to inserting a fact via 
insertLogical()? Or is this a known limitation, or simply the way it is 
designed to work? 
Thanks,
-Hans

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






-- 
Edson Tirelli
JBoss Drools Core Development
JBoss, a division of Red Hat @ www.jboss.com



-- Mensagem encaminhada --
From: [EMAIL PROTECTED]
To: Rules Users List 
Date: Mon, 04 Aug 2008 13:49:37 +
Subject: Re: [rules-users] "Not" Non-Existential Quantifier


-- Mensagem encaminhada --
From: "Edson Tirelli" <[EMAIL PROTECTED]>
To: "Rules Users List" 
Date: Thu, 31 Jul 2008 17:41:39 +
Subject: Re: [rules-users] "Not" Non-Existential Quantifier
___
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





-- 
Edson Tirelli
JBoss Drools Core Development
JBoss, a division of Red Hat @ www.jboss.com--- Begin Message ---
_

[rules-users] Re.Problems with looping

2008-08-04 Thread thomas kukofka
*Hello,

I tried this but it still loops:


public boolean equals(Object o) {
if(o instanceof OutputObject) {
OutputObject other = (OutputObject)o;
if (this.type != other.type) {
return false;
}
if (this.type == OutputObject.Type.LEVEL) {
if (this.getStringPropertyValue(OutputObject.SEGMENTNAME) !=
other.getStringPropertyValue(OutputObject.SEGMENTNAME)) {
return false;
}
return true;
}
return true;
}
else {
return false;
}
}

**public int hashCode() {
int hash = 37;
hash ^= type.hashCode();
return hash;
}

**If I understand it right I have to overwrite check the equality of all
fields which must be identical to for two objects which are seen equal.
Fields which can have different values for equal objects don't have to be
checked in the equals()-method. In my rule there is an update of the
OutputObject:

**rule "Assess Level"
  dialect "java"
  no-loop
when
io: InputObject(type == InputObject.Type.OBSERVATION)
ewhsMap: HashMap() from io.getMapParameters()
ewhs: HashMap() from ewhsMap.get("EWHS")
segment: String() from ewhs.keySet()
oo: OutputObject (type == OutputObject.Type.LEVEL,
stringParameters["SEGMENTNAME"] == segment)
ewh: Number() from ewhs.get(segment)
eval(ewh.doubleValue() >= 0.5 && ewh.doubleValue() < 3.0)

then
oo.setIntPropertyValue(OutputObject.SEGMENTLEVEL, "WARNING");
update(oo);
System.out.println( "Warning Segment " + segment + " has warning
level WARNING");

end

Thomas

**Greg Barton* greg_barton at yahoo.com

*Fri Aug 1 12:03:55 EDT 2008

*Did you implement equals() and hashCode()?

Implementing them isn't hard.  Implementing them well
can be tricky, but for these purposes a simple
implementation will do.  Basically, with equals() you
want to compare the stuff contained in the objects.
With hashCode() you want to produce an integer that
can be used in HashMaps.  The only restriction is
that, if o1.equals(o2) == true, then o1.hashCode() ==
o2.hashCode().  (The reverse is not necessarily true.)

The easiest way to implement these is to just compare
the fields that define the state of your object:

public class Foo {

  int bar;
  String bas;

  public boolean equals(Object o) {
if(o instanceof Foo) {
  Foo other = (Foo)o;
  return bar == other.bar && bas != null &&
bas.equals(other.bas);
} else {
  return false;
}
  }

  public int hashCode() {
int hash = 37;
hash ^= bar;
if(bas != null) {
  hash ^= bas.hashCode();
}
return hash;
  }
}

One good way to make this easier is to use the jakarta
commons EqualsBuilder and HashCodeBuilder classes.
They also help you implement them "well," especially
hashCode.

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


[rules-users] Drools win BRMS Bossie

2008-08-04 Thread Mark Proctor

Drools has won an infoworld Bossie award for best open source BRMS :
http://www.infoworld.com/slideshow/2008/08/166-best_of_open_so-6.html
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users