<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(78, 144, 114); ">So&nbsp;unlike Jess,&nbsp;Drools can or cannot use asserted facts from a data structure and can only use data wrapped in a bean?</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(78, 144, 114); "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(78, 144, 114); ">/* Assert ordered or unordered facts from the session's document. A deftemplate with matching&nbsp;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(78, 144, 114); "><span class="Apple-tab-span" style="white-space:pre">        </span> * id and slots for each "fact" element should already exist for unordered facts.</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(78, 144, 114); "><span class="Apple-tab-span" style="white-space:pre">        </span> */</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span><span style="color: #931a68">public</span> <span style="color: #931a68">void</span> assertDocument(Document document, Rete engine) <span style="color: #931a68">throws</span> JessException {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span>Iterator facts = (document.getRootElement().getChildren(<span style="color: #3834ff">"fact"</span>)).iterator();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span><span style="color: #931a68">while</span> (facts.hasNext() == <span style="color: #931a68">true</span>) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                        </span>Element factElement = (Element)facts.next();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                        </span>String id = factElement.getAttributeValue(<span style="color: #3834ff">"id"</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                        </span>Fact fact = <span style="color: #931a68">new</span> Fact(id, engine);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                        </span>Iterator slots = (factElement.getChildren(<span style="color: #3834ff">"slot"</span>)).iterator();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                        </span><span style="color: #931a68">while</span> (slots.hasNext() == <span style="color: #931a68">true</span>) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                                </span>Element slotElement = (Element)slots.next();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                                </span>String name = slotElement.getAttributeValue(<span style="color: #3834ff">"name"</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                                </span>String type = slotElement.getAttributeValue(<span style="color: #3834ff">"type"</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                                </span><span style="color: #931a68">if</span> (slotElement.getChildren(<span style="color: #3834ff">"value"</span>).size() == 1) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                                        </span>String value = slotElement.getChild(<span style="color: #3834ff">"value"</span>).getText();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                                        </span>fact.setSlotValue(name, getValue(type, value));</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                                </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                                </span><span style="color: #931a68">else</span> {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                                        </span>ValueVector valueVector = <span style="color: #931a68">new</span> ValueVector();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                                        </span>Iterator values = (slotElement.getChildren(<span style="color: #3834ff">"value"</span>)).iterator();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                                        </span><span style="color: #931a68">while</span> (values.hasNext() == <span style="color: #931a68">true</span>) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                                                </span>String value = ((Element)values.next()).getText();&nbsp;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                                                </span>valueVector.add(getValue(type, value));</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                                        </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                                        </span>fact.setSlotValue(name, <span style="color: #931a68">new</span> Value(valueVector, RU.<span style="color: #0027cc">LIST</span>));</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                                </span>}<span class="Apple-tab-span" style="white-space:pre">        </span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(78, 144, 114); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">                        </span>} </span>//while slots</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                        </span>engine.assertFact(fact);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(78, 144, 114); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">                </span>} </span>//while facts</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px"><span class="Apple-tab-span" style="white-space:pre">        </span><br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(78, 144, 114); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">        </span></span>/*</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(78, 144, 114); "><span class="Apple-tab-span" style="white-space:pre">        </span> * Output the fact base to the response output stream.</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(78, 144, 114); "><span class="Apple-tab-span" style="white-space:pre">        </span> * Intended for debugging. Override to do your own processing.</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(78, 144, 114); "><span class="Apple-tab-span" style="white-space:pre">        </span> */</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span><span style="color: #931a68">public</span> String processResults(HttpServletRequest request, HttpServletResponse response,&nbsp;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                                </span>Rete engine) <span style="color: #931a68">throws</span> IOException {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span>PrintWriter writer = response.getWriter();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(56, 52, 255); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">                </span>writer.println(</span>"&lt;html&gt;&lt;head&gt;&lt;title&gt;Jess Results&lt;/title&gt;&lt;/head&gt;"<span style="color: #000000">);</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(56, 52, 255); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">                </span>writer.println(</span>"&lt;body&gt;&lt;h1&gt;PrettyPrint listFacts()&lt;/h1&gt;"<span style="color: #000000">);</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span>writer.println(<span style="color: #3834ff">"&lt;pre&gt;"</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span>Iterator facts = engine.listFacts();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span><span style="color: #931a68">while</span> (facts.hasNext() == <span style="color: #931a68">true</span>) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                        </span>Fact fact = (Fact)facts.next();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                        </span>writer.println(<span style="color: #931a68">new</span> PrettyPrinter(fact));</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span>writer.println(<span style="color: #3834ff">"&lt;/pre&gt;"</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span>writer.println(<span style="color: #3834ff">"&lt;/body&gt;&lt;/html&gt;"</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(147, 26, 104); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">                </span></span>return<span style="color: #000000"> </span>null<span style="color: #000000">;</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; min-height: 15px; "><br></div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px"><span class="Apple-tab-span" style="white-space:pre">        </span><br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span><span style="color: #931a68">private</span> Value getValue(String type, String value) <span style="color: #931a68">throws</span> JessException {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span><span style="color: #931a68">if</span> (<span style="color: #3834ff">"STRING"</span>.equals(type) == <span style="color: #931a68">true</span>)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                        </span><span style="color: #931a68">return</span> <span style="color: #931a68">new</span> Value(value, RU.<span style="color: #0027cc">STRING</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span><span style="color: #931a68">else</span> <span style="color: #931a68">if</span> (<span style="color: #3834ff">"INTEGER"</span>.equals(type) == <span style="color: #931a68">true</span>)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                        </span><span style="color: #931a68">return</span> <span style="color: #931a68">new</span> Value(Integer.parseInt(value), RU.<span style="color: #0027cc">INTEGER</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span><span style="color: #931a68">else</span> <span style="color: #931a68">if</span> (<span style="color: #3834ff">"FLOAT"</span>.equals(type) == <span style="color: #931a68">true</span>)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                        </span><span style="color: #931a68">return</span> <span style="color: #931a68">new</span> Value(Float.parseFloat(value), RU.<span style="color: #0027cc">FLOAT</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span><span style="color: #931a68">else</span> <span style="color: #931a68">if</span> (<span style="color: #3834ff">"SYMBOL"</span>.equals(type) == <span style="color: #931a68">true</span>)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                        </span><span style="color: #931a68">return</span> <span style="color: #931a68">new</span> Value(value, RU.<span style="color: #0027cc">SYMBOL</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span><span style="color: #931a68">else</span> <span style="color: #931a68">if</span> (<span style="color: #3834ff">"LONG"</span>.equals(type) == <span style="color: #931a68">true</span>)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                        </span><span style="color: #931a68">return</span> <span style="color: #931a68">new</span> Value(Long.parseLong(value), RU.<span style="color: #0027cc">LONG</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(147, 26, 104); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">                </span></span>else</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                        </span><span style="color: #931a68">return</span> <span style="color: #931a68">new</span> Value(value, RU.<span style="color: #0027cc">ANY</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><div>On Sep 10, 2010, at 11:18 AM, Wolfgang Laun wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">So everthing is String or list of String? (What if your data contains numbers, where you'd like to use &gt; in patterns?)<br><br>Is there a stable relationship between key/slot and its type, i.e., scalar String or list of String?<br>
<br>You realize that a record of untyped fields (slots) is fundamentally different from an approach where data is bound to be stored in (necessarily) strongly typed fields of an object. There's no difficulty with writing similar code for storing values from a Map into an object of some class, but class fields must have fixed types.&nbsp; <br>
<br>-W<br><br><br><div class="gmail_quote">2010/9/10 Donald Winston <span dir="ltr">&lt;<a href="mailto:satchwinston@yahoo.com">satchwinston@yahoo.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div style="word-wrap: break-word;">This is what I'm doing:<div><br></div><div><div style="margin: 0px; color: rgb(78, 144, 114);">/* Assert unordered facts from the request parameter map. A deftemplate with matching id and&nbsp;</div>
<div style="margin: 0px; color: rgb(78, 144, 114);"><span style="white-space: pre-wrap;">        </span> * slots should already exist.&nbsp;</div><div style="margin: 0px; color: rgb(78, 144, 114);"><span style="white-space: pre-wrap;">        </span> */</div>
<div style="margin: 0px;"><span style="white-space: pre-wrap;">        </span><span style="color: rgb(147, 26, 104);">public</span> <span style="color: rgb(147, 26, 104);">void</span> assertParameterMap(String id, Map map, Rete engine) <span style="color: rgb(147, 26, 104);">throws</span> JessException {</div>
<div style="margin: 0px;"><span style="white-space: pre-wrap;">                </span>Fact fact = <span style="color: rgb(147, 26, 104);">new</span> Fact(id, engine);</div><div style="margin: 0px;"><span style="white-space: pre-wrap;">                </span>Iterator keys = map.keySet().iterator();</div>
<div style="margin: 0px;"><span style="white-space: pre-wrap;">                </span><span style="color: rgb(147, 26, 104);">while</span> (keys.hasNext() == <span style="color: rgb(147, 26, 104);">true</span>) {</div><div style="margin: 0px;">
<span style="white-space: pre-wrap;">                        </span>String key = (String)keys.next();</div><div style="margin: 0px;"><span style="white-space: pre-wrap;">                        </span><span style="color: rgb(147, 26, 104);">if</span> (<span style="color: rgb(0, 39, 204);">ID</span>.equals(key) == <span style="color: rgb(147, 26, 104);">true</span>) <span style="color: rgb(147, 26, 104);">continue</span>;</div>
<div style="margin: 0px;"><span style="white-space: pre-wrap;">                        </span>String[] paramValues = (String[])map.get(key);</div><div style="margin: 0px;"><span style="white-space: pre-wrap;">                        </span><span style="color: rgb(147, 26, 104);">if</span> (paramValues.<span style="color: rgb(0, 39, 204);">length</span> &gt; 1) {</div>
<div style="margin: 0px;"><span style="white-space: pre-wrap;">                                </span>ValueVector values = <span style="color: rgb(147, 26, 104);">new</span> ValueVector();</div><div style="margin: 0px;"><span style="white-space: pre-wrap;">                                </span><span style="color: rgb(147, 26, 104);">for</span>(String value : paramValues)</div>
<div style="margin: 0px;"><span style="white-space: pre-wrap;">                                        </span>values.add(<span style="color: rgb(147, 26, 104);">new</span> Value(value, RU.<span style="color: rgb(0, 39, 204);">STRING</span>));</div><div style="margin: 0px;">
<span style="white-space: pre-wrap;">                                </span>fact.setSlotValue(key, <span style="color: rgb(147, 26, 104);">new</span> Value(values, RU.<span style="color: rgb(0, 39, 204);">LIST</span>));</div><div style="margin: 0px;">
<span style="white-space: pre-wrap;">                        </span>}</div><div style="margin: 0px; color: rgb(147, 26, 104);"><span style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;">                        </span></span>else</div><div style="margin: 0px;">
<span style="white-space: pre-wrap;">                                </span>fact.setSlotValue(key, <span style="color: rgb(147, 26, 104);">new</span> Value(paramValues[0], RU.<span style="color: rgb(0, 39, 204);">STRING</span>));</div><div style="margin: 0px;">
<span style="white-space: pre-wrap;">                </span>}</div><div style="margin: 0px;"><span style="white-space: pre-wrap;">                </span>engine.assertFact(fact);</div><div style="margin: 0px;"><span style="white-space: pre-wrap;">        </span>}</div>
<div style="margin: 0px;"><br></div><div style="margin: 0px;">I'm working on something similar for a jdom document object. I'm not using POJOs. I'm using a data structure. (technically they're objects because java is object oriented, but they're not "problem domain objects").</div>
<div><div></div><div class="h5"><div style="margin: 0px;"><br></div><div><div>On Sep 10, 2010, at 10:12 AM, Wolfgang Laun wrote:</div><br><blockquote type="cite">If you insert POJOs as facts in Jess, you'll have to write a <br>
&nbsp;&nbsp; (deftemplace X (declare (from-class X)))<br>and the fields available for pattern matching in rules rely on the JavaBeans convention.<br><br>I have (quite successfully) used POJOs resulting from unmarshalling an XML document (via JAXB) as facts, both in Drools and in Jess; most certainly without writing any "copycat" fact classes and tedious transformations.<br>

<br>As for globals: They play the same role in Drools as in Jess; in neither system are they part of the working memory.<br><br>I don't know what you could mean by a "standard fact class".<br><br>As for iterating over all fact objects in Drools' WM, Drools provides getObjects() in WorkingMemory; or you could set up a query and run this.<br>

<br>-W<br><br><br><div class="gmail_quote">On 10 September 2010 14:54, Donald Winston <span dir="ltr">&lt;<a href="mailto:satchwinston@yahoo.com" target="_blank">satchwinston@yahoo.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

I'm reviewing JBoss Rules (Drools) for an application I'm starting to build. It appears that the only way to assert facts is to use the insert(Object) method where the object is a bean using the proper naming conventions for it's properties. There also appears to be a way to use arbitrary objects using globals but do these end up in the fact base? It's disturbing to me that I have to create a bunch of classes whose sole purpose in life is to support the rule base. This is similar to using java server pages and having to create a bunch of classes just to support each page. That's why I don't use java server pages and use xsl transformations instead. I want to use my xml jdom document to represent my data and not have to create a bunch of beans. I can't seem to find anything in the api where I can assert facts without creating my own custom classes. There's no standard Fact class?<br>


<br>
I've been also experimenting with Jess and it provides an easy way for me to do this. I just iterate through my jdom document and create Fact objects and assert them. I can then execute the rules and then iterate through the updated fact base using engine.listFacts() and update my jdom document. It couldn't be easier or more natural. Is there an analogous way to do this in Drools?<br>


<br>
<br>
Thank you very much.<br>
_______________________________________________<br>
rules-users mailing list<br>
<a href="mailto:rules-users@lists.jboss.org" target="_blank">rules-users@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
</blockquote></div><br>
_______________________________________________<br>rules-users mailing list<br><a href="mailto:rules-users@lists.jboss.org" target="_blank">rules-users@lists.jboss.org</a><br><a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
</blockquote></div><br></div></div></div></div><br>_______________________________________________<br>
rules-users mailing list<br>
<a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
<br></blockquote></div><br>
_______________________________________________<br>rules-users mailing list<br><a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>https://lists.jboss.org/mailman/listinfo/rules-users<br></blockquote></div><br></body></html>