[jboss-jira] [JBoss JIRA] (JBRULES-1058) nested accessors with Sets - "not contains" is not a valid operator for MVEL

Rahul Vanimisetty (JIRA) issues at jboss.org
Thu Mar 29 17:53:00 EDT 2018


    [ https://issues.jboss.org/browse/JBRULES-1058?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13554398#comment-13554398 ] 

Rahul Vanimisetty commented on JBRULES-1058:
--------------------------------------------

My bad...I was referring to mvel2 version  2.4.0.Final. It wasnt working on a simple rule engine that uses mvel2. However, i found a workaround and fixed it. Next i am going to try with Drools 7.6.0. As you have confirmed the versions, I will try  out the not contains operator and post back my results. Thank you for your promptness.

> nested accessors with Sets - "not contains" is not a valid operator for MVEL
> ----------------------------------------------------------------------------
>
>                 Key: JBRULES-1058
>                 URL: https://issues.jboss.org/browse/JBRULES-1058
>             Project: JBRULES
>          Issue Type: Bug
>          Components: drools-compiler
>    Affects Versions:  4.0.0.GA
>            Reporter: Mark McNally
>            Assignee: Edson Tirelli
>             Fix For: 4.0.1
>
>
> Following does not work:
> 		rule StateMatch
> 			when
> 			$ca:CandidateAssociation(nurseDetails.stateLicensures excludes patientDetails.state  )			
> 			then 	
> 				retract( $ca );
> 		end
> 		
> 		
> 		public class CandidateAssociation {
> 			private PatientDetails patientDetails;
> 			private NurseDetails   nurseDetails;
> 			private int overlapHours;
> 		
> 			public CandidateAssociation( PatientDetails patientDetails, NurseDetails nurseDetails) {
> 				super();
> 				this.patientDetails = patientDetails;
> 				this.nurseDetails = nurseDetails;
> 				overlapHours = participantDetails.getNumberOverlapHourCnt(nurseDetails);
> 			}
> 		    [...]
> 		}
> 		
> 		public class NurseDetails {
> 			private Set stateLicensures = new HashSet();
> 			[...]
> 		}
> 		public class PatientDetails {
> 			private String state;
> 			[...]
> 		}
> Edson suggested that the problem is that "not contains" is not a valid operator for MVEL. 
> Also Noticed that the following workaround did not work:
> 		rule State
> 		    dialect "mvel"
> 			when
> 		            $ca:CandidateAssociation( eval ( ! nurseDetails.stateLicensures.contains( patientDetails.state ) ) )
> 			then 	
> 		  	    retract( $ca );
> 		end
> 		
> 		This produced this Exception:
> 		org.drools.rule.InvalidRulePackage: Unable to determine the used declarations : [Rule name=State, agendaGroup=MAIN, salience=0, no-loop=false]
> 	        at org.drools.rule.Package.checkValidity(Package.java:408)
> 	        at org.drools.common.AbstractRuleBase.addPackage(AbstractRuleBase.java:288)
> 	        at [...]



--
This message was sent by Atlassian JIRA
(v7.5.0#75005)


More information about the jboss-jira mailing list