[Apologies for the incorrect Subject: on this report yesterday, 9/29.]
The trouble with bsave after executing a defquery appears to happen when
serializing the Map Context.m_variables in Rete.m_globalContext: at this
point in the script, the map holds the QueryResult variable ?qr:
(bind ?qr (run-query* all-cars))
Hence, if I execute
(bind ?qr "not a QueryResult")
before the 2nd bsave, then the script runs without error. Could
QueryResult be made Serializable? Revised script and results below.
Thanks again,
Jonathan Sewall
------- Original Message --------
Subject: Re: JESS: [EXTERNAL] Dynamic rule-base analysis
Date: Sun, 29 Sep 2013 18:04:11 -0400
From: Jonathan Sewall <sew...@cs.cmu.edu>
Reply-To: jsew...@cmu.edu, jess-users@sandia.gov
To: jess-users@sandia.gov
...
Contents of script.clp:
(deftemplate car (slot make) (slot model))
(defquery all-cars "Get all cars." ?car <- (car))
(defquery cars-of-make "Get cars of the given make." (declare (variables
?want-make)) ?car <- (car (make ?m&:(= ?m ?want-make))))
(reset)
(bind ?pickup (assert (car (make "Ford") (model "F100"))))
(bind ?sedan (assert (car (make "Honda") (model "Civic"))))
(bind ?suv (assert (car (make "Ford") (model "Explorer"))))
(printout t "*** Before 1st bsave ***" crlf)
(printout t "globalContext " (((engine) getGlobalContext) toString) crlf)
(bsave "s1.bsave")
(bind ?qr (run-query* all-cars))
(while (?qr next) (bind ?car (?qr getObject "car")) (printout t (?car
toString) crlf))
(?qr close)
(printout t "*** Before 2nd bsave ***" crlf)
(printout t "globalContext " (((engine) getGlobalContext) toString) crlf)
;; (bind ?qr "not a QueryResult") ;; uncomment to make script run ok
(bsave "s2.bsave")
Results:
$ java -cp lib/jess.jar jess.Main
Jess, the Rule Engine for the Java Platform
Copyright (C) 2008 Sandia Corporation
Jess Version 7.1p2 11/5/2008
Jess> (batch "script.clp")
*** Before 1st bsave ***
globalContext [Context, 3 variables:
pickup=<Fact-1>;sedan=<Fact-2>;suv=<Fact-3>;]
(MAIN::car (make "Ford") (model "F100"))
(MAIN::car (make "Honda") (model "Civic"))
(MAIN::car (make "Ford") (model "Explorer"))
*** Before 2nd bsave ***
globalContext [Context, 5 variables:
car=<Java-Object:jess.Fact>;pickup=<Fact-1>;sedan=<Fact-2>;suv=<Fact-3>;qr=<Java-Object:jess.QueryResult>;]
Jess reported an error in routine bsave
while executing (bsave "s2.bsave")
while executing (batch "script.clp").
Message: IO Exception.
Program text: ( bsave "s2.bsave" ) at line 17 in file script.clp.
Nested exception is:
jess.QueryResult
Jess>
--------------------------------------------------------------------
To unsubscribe, send the words 'unsubscribe jess-users y...@address.com'
in the BODY of a message to majord...@sandia.gov, NOT to the list
(use your own address!) List problems? Notify owner-jess-us...@sandia.gov.
--------------------------------------------------------------------