Hello, it should not be possible, because we do the copying in the main thread. If the copying is done, we start all engines one after another, or in different threads (if MULTITHREAD mode is activated). But the error occurs also, if we run the system in single thread mode. Only when all engines have finished, we put again facts to the working memory (of all engines) or modify facts. Here the error occurs after the copying has been finished. We start the engines and when they all have finished, we want to modify a timePoint and then the error occurs. It happends all the time with the same fact and only in engine 8, it the first 7 engines the facts are modified correctly...
Best regards Wilfried -----Ursprüngliche Nachricht----- Von: [email protected] [mailto:[email protected]] Im Auftrag von Ernest Friedman-Hill Gesendet: Donnerstag, 4. März 2010 16:29 An: jess-users Betreff: Re: JESS: Problems with copying shadow facts via bsave and bload Looking at the source, the only thing I can come up with is that maybe a change event is coming in during a bload call, so that the engine is not fully baked at the time. Is this possible? On Mar 4, 2010, at 7:56 AM, bohlken wrote: > > Hello, > > in our Java application we use several Jess engines and shadow > facts. When > copying an engine with bsave and bload we sometimes get a curios > problem. We > have shadow facts TimePoint: > > public class TimePoint > implements Serializable, Logging > { > private transient PropertyChangeSupport pcs; > > private ArrayList<PropertyChangeListener> pcls; > > private String name; > private long tMin; > private long tMax; > private boolean integrated; > > . > public TimePoint() > { > ... > pcls = new ArrayList<PropertyChangeListener>(); > pcs = new PropertyChangeSupport(this); > }; > > public void settMin (long tMin) > { > Long temp = this.tMin; > this.tMin = tMin; > pcs.firePropertyChange("tMin", new Long(temp), new > Long(tMin)); > } > > ... > > public void addPropertyChangeListener(PropertyChangeListener pcl) > { > pcls.add(pcl); > pcs.addPropertyChangeListener(pcl); > } > > public void removePropertyChangeListener(PropertyChangeListener > pcl) > { > pcls.remove(pcl); > pcs.removePropertyChangeListener(pcl); > } > > private void readObject(ObjectInputStream in) throws > IOException, ClassNotFoundException > { > in.defaultReadObject(); > > pcs = new PropertyChangeSupport(this); > > for (PropertyChangeListener pcl: pcls) > { > pcs.addPropertyChangeListener(pcl); > } > } > } > > After trying several versions, we thought that this is the right > solution. > When copying an engine with bsave and bload, the readObject() function > should register the listeners again. We also create a new > PropertyChangeSupport and declare it as transient (if we do not > create a new > PropertyChangeSupport we get the same error as listed below). > > Now, after a while, when several copyings are done, we modify a > timePoint > fact - which exists in every engine - via rete.modify(.) in the > first 7 > engines everything works fine, but in engine 8 we get the following > error: > > ---------------------------------------------------------------------------- > Jess reported an error in routine modify. > Message: Error setting slot value. > at jess.FactList.modifyDefinstancedObject(FactList.java:396) > at jess.FactList.modify(FactList.java:287) > at jess.Rete.modify(Rete.java:673) > at jess.Rete.modify(Rete.java:654) > at jess.Rete.modify(Rete.java:620) > at main.Engines.modifyFact(Engines.java:219) > at main.Control.modifyFact(Control.java:381) > at > coFriend > .dataPreprocessing.DataProcessThread.process(DataProcessThread.java: > 222) > at > coFriend > .dataPreprocessing.DataProcessThread.run(DataProcessThread.java:85) > Caused by: java.lang.reflect.InvocationTargetException > at sun.reflect.GeneratedMethodAccessor38.invoke(Unknown Source) > at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) > at java.lang.reflect.Method.invoke(Unknown Source) > at jess.SerializablePD.setPropertyValue(SerializablePD.java:58) > at jess.FactList.modifyDefinstancedObject(FactList.java:392) > ... 8 more > Caused by: java.lang.NullPointerException > at jess.DefinstanceList.propertyChange(DefinstanceList.java:350) > at java.beans.PropertyChangeSupport.firePropertyChange(Unknown > Source) > at java.beans.PropertyChangeSupport.firePropertyChange(Unknown > Source) > at constraints.TimePoint.settMin(TimePoint.java:110) > ... 13 more > Exception in thread "Thread-6" java.lang.RuntimeException: Error > setting > slot value > at main.Main.showErrorMessage(Main.java:303) > at coFriend.main.CFMain.showErrorMessage(CFMain.java:348) > at > coFriend > .dataPreprocessing.DataProcessThread.process(DataProcessThread.java: > 256) > at > coFriend > .dataPreprocessing.DataProcessThread.run(DataProcessThread.java:85) > ------------------------------------------------------------------ > > > Is it normal that a shadow fact has more than 1 listener? I printed > out the > number of listeners, some timePoints have up to 6. > Does someone has an idea whats going wrong? > Thank you very much! > > Wilfried Bohlken > Universtity Hamburg > > > > > -------------------------------------------------------------------- > To unsubscribe, send the words 'unsubscribe jess-users > [email protected]' > in the BODY of a message to [email protected], NOT to the list > (use your own address!) List problems? Notify [email protected] > . > -------------------------------------------------------------------- --------------------------------------------------------- Ernest Friedman-Hill Informatics & Decision Sciences Phone: (925) 294-2154 Sandia National Labs PO Box 969, MS 9012 [email protected] Livermore, CA 94550 http://www.jessrules.com -------------------------------------------------------------------- To unsubscribe, send the words 'unsubscribe jess-users [email protected]' in the BODY of a message to [email protected], NOT to the list (use your own address!) List problems? Notify [email protected]. -------------------------------------------------------------------- -------------------------------------------------------------------- To unsubscribe, send the words 'unsubscribe jess-users [email protected]' in the BODY of a message to [email protected], NOT to the list (use your own address!) List problems? Notify [email protected]. --------------------------------------------------------------------
