<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">In the RHS of a rule one can use either an “update” or “modify” block to notify Drools that a fact has changed. In the Java API for 5.5.0 Final, I can call StatefulKnowledgeSession.update(factHandle, object) to update a fact handle with
an object. However, there’s no complementary StatefulKnowledgeSession.modify method. Is there a way to get modify’s property-reactive functionality through the API? That is, can Java code update fact objects and then inform Drools that only certain properties
have been changed? This capability would allow just the rules that reference those properties to be reevaluated, unlike update, which causes all the rules that reference the Java class to be reevaluated.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">There is a CommandFactory.newModify method, but the <a href="http://docs.jboss.org/drools/release/5.5.0.Final/knowledge-api-javadoc/org/drools/command/CommandFactory.html#newModify(org.drools.runtime.rule.FactHandle,%20java.util.List)">
JavaDoc</a> has no explanatory text. I explored the source to understand how this is used, and it appears that it is meant to be passed a list of Setter objects that contain literal bean property names and string values which are then dynamically interpreted
by MVEL. It might be possible to use this in a pinch, but it seems a rather roundabout way to update an object that the code can access directly.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal">Tom<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>