[jboss-jira] [JBoss JIRA] Updated: (JBRULES-946) RuleBase serialization fails with StackOverflowError

Geoffrey De Smet (JIRA) jira-events at lists.jboss.org
Sun Sep 25 04:04:52 EDT 2011


     [ https://issues.jboss.org/browse/JBRULES-946?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Geoffrey De Smet updated JBRULES-946:
-------------------------------------

    Fix Version/s: 5.3.0.Final
                       (was: 5.3.0.CR1)


> RuleBase serialization fails with StackOverflowError
> ----------------------------------------------------
>
>                 Key: JBRULES-946
>                 URL: https://issues.jboss.org/browse/JBRULES-946
>             Project: Drools
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>    Affects Versions: 4.0.0.MR2,  4.0.0.MR3
>            Reporter: Alexandre Gattiker
>            Assignee: Mark Proctor
>             Fix For: 5.3.0.Final
>
>
> I created 920 rules, all in this format, with different values in the string literals.
> rule "Rule_1"
> 	when
> 		$g:Parent()
> 		$c:Child(parent==$g,code=="yyy1")
> 		Item(parentObject==$c,name=="xxx1", value == "1")
> 		Item(parentObject==$c,name=="xxx2",value == "1")
> 		Item(parentObject==$g,name=="xxx3",value == "200")
> 	then
> 		System.out.println("2");
> end
> With the following code, I create a RuleBase that I serialize.
> RuleBase ruleBase = RuleBaseFactory.newRuleBase();
> PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
> conf.setCompiler(PackageBuilderConfiguration.JANINO);
> Reader source = new InputStreamReader(PolicyServiceImpl.class.getResourceAsStream(fileName));
> PackageBuilder builder = new PackageBuilder(conf);
> builder.addPackageFromDrl(source);
> Package pkg = builder.getPackage();
> ruleBase.addPackage(pkg);
> //serialize RuleBase
> File outFile = new File(f.getPath() + ".tmp");
> FileOutputStream fout = new FileOutputStream(outFile);
> ObjectOutputStream oos = new ObjectOutputStream(fout);
> oos.writeObject(ruleBase);
> oos.close();
> The serialization fails with the following exception. Otherwise the RuleBase is perfectly fine and working.
> java.lang.StackOverflowError
> 	at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream$BlockDataOutputStream.write(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java(Compiled Code))
> 	at java.util.ArrayList.writeObject(ArrayList.java(Compiled Code))
> 	at sun.reflect.GeneratedMethodAccessor16.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java(Compiled Code))
> 	at java.lang.reflect.Method.invoke(Method.java(Compiled Code))
> 	at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java(Inlined Compiled Code))
> 	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java(Inlined Compiled Code))
> 	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java(Inlined Compiled Code))
> 	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java(Inlined Compiled Code))
> 	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java(Inlined Compiled Code))
> 	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java(Inlined Compiled Code))
> 	at java.util.ArrayList.writeObject(ArrayList.java(Compiled Code))
> 	at sun.reflect.GeneratedMethodAccessor16.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java(Compiled Code))
> 	at java.lang.reflect.Method.invoke(Method.java(Compiled Code))
> 	at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java(Inlined Compiled Code))
> 	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java(Inlined Compiled Code))
> 	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java(Inlined Compiled Code))
> 	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java(Inlined Compiled Code))
> 	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java(Inlined Compiled Code))
> 	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java(Inlined Compiled Code))
> 	at java.util.ArrayList.writeObject(ArrayList.java(Compiled Code))
> 	at sun.reflect.GeneratedMethodAccessor16.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java(Compiled Code))
> 	at java.lang.reflect.Method.invoke(Method.java(Compiled Code))
> 	at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java(Compiled Code))
> 	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java(Inlined Compiled Code))
> (last four lines repeated over 1000 times)

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the jboss-jira mailing list