Hi,

I experienced the problem while reading WorkingMemory using ObjectInputStream. I'm attaching the code that cause the following exception:


java.lang.ClassCastException: java.io.ObjectInputStream
        at org.drools.reteoo.Rete$ClassObjectTypeConf.readObject(Rete.java:605)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at 
java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:946)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1809)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at 
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1908)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1634)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
at org.drools.util.AbstractHashTable.readExternal(AbstractHashTable.java:66)
        at org.drools.util.ObjectHashMap.readExternal(ObjectHashMap.java:41)
        at 
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1755)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1717)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1634)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
        at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1634)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
        at 
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1908)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at 
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1908)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at 
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1908)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
        at com.sample.DroolsTest5.main(DroolsTest5.java:52)

What's wrong?

Best regards!
--
Przemysław Różycki
IT Architect
AMG.net, A Bull Group Company
ul. Łąkowa 29
90-554 Łódź
www.amg.net.pl
package com.sample;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Iterator;
import java.util.Properties;

import org.drools.RuleBase;
import org.drools.WorkingMemory;
import org.drools.agent.RuleAgent;


public class DroolsTest5 {

	public static void main(String[] args) {
		Properties props = new Properties();
		props.setProperty("file", "/home/przemek/programs/bea/user_projects/workspaces/default/DroolsSandbox1/src/main/rules/Sample.drl");
		props.setProperty("poll", "5");
		
		RuleAgent ruleAgent = RuleAgent.newRuleAgent(props);
		
		Fact fact1 = new Fact("a","b");
		
		RuleBase ruleBase = ruleAgent.getRuleBase();
		WorkingMemory baseWm = ruleBase.newStatefulSession(false);
		baseWm.insert(fact1);
		
		Iterator iter1 = baseWm.iterateObjects();

		while (iter1.hasNext()) {
			System.out.println(iter1.next());
		}
		System.out.println("=====");
		
		try {
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			ObjectOutputStream oos = new ObjectOutputStream(baos);
			oos.writeObject(baseWm);
			oos.close();
			byte[] buf = baos.toByteArray();
			ByteArrayInputStream bais = new ByteArrayInputStream(buf);
			
			ObjectInputStream ois = new ObjectInputStream(bais);
			WorkingMemory wm = (WorkingMemory) ois.readObject();

			Iterator iter2 = wm.iterateObjects();

			while (iter2.hasNext()) {
				System.out.println(iter2.next());
			}
			System.out.println("=====");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static class Fact implements Serializable {
		
		private static final long serialVersionUID = 6634041550577507566L;

		String name;
		
		String id;

		public Fact(String _name, String _id) {
			name = _name;
			id = _id;
		}

		public String getId() {
			return id;
		}

		public String getName() {
			return name;
		}
		
		@Override
		public String toString() {
			return "Name: " + name + ", Id: " + id;
		}
	}
}
_______________________________________________
rules-users mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to