It would certainly make sense for this class to be Serializable, as most other
classes in Jess are. The current implementation in practice contains an
instance of java.util.ArrayList.Itr, which is not Seriaizable, so a certain
amount of coding would be involved in making this change. Worth doing, though,
so I'll see if we can work it in.
-Original Message-
From: owner-jess-us...@sandia.gov [mailto:owner-jess-us...@sandia.gov] On
Behalf Of Jonathan Sewall
Sent: Monday, September 30, 2013 9:49 AM
To: jess-users
Subject: JESS: [EXTERNAL] bsave fails after defquery execution [was: Dynamic
rule-base analysis]
[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.
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.