Issue in using of enum in BRMS 5.3.1 DRL's

Latest response

We are trying to migrate from Drools 5.4.0 Community to BRMS 5.3.1 version and when we are trying to create a .pkg files, we are getting the below exception since we have declared enum's in DRL's. Is there a workaround to get this working in BRMS 5.3.1

Enum in DRL file:

declare enum StatusType
SUCCESS("1", "Success"),
FAILURE("2", "Failure");
code : String;
description : String;
end

Exception:

java.io.NotSerializableException: org.drools.factmodel.EnumLiteralDefinition
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
at java.util.ArrayList.writeObject(ArrayList.java:742)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1495)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
at org.drools.factmodel.EnumClassDefinition.writeExternal(EnumClassDefinition.java:52)
at java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1458)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1429)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
at org.drools.rule.TypeDeclaration.writeExternal(TypeDeclaration.java:173)
at java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1458)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1429)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
at java.util.HashMap.writeObject(HashMap.java:1133)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1495)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
at org.drools.rule.Package.writeExternal(Package.java:159)
at java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1458)

Responses

The DRL file looks as below. This works fine using the Drools Community Version 5.4.0 & 5.6.0

declare enum StatusType
SUCCESS("1", "Success"),
FAILURE("2", "Failure");
code : String;
description : String;
end

rule "Success Scenario"
no-loop true
dialect "java"
when
System(StatusType.SUCCESS.getCode().equals(status));
then
// Do Success Scenario
end

rule "Failure Scenario"
no-loop true
dialect "java"
when
System(StatusType.FAILURE.getCode().equals(status));
then
// Do Failure Scenario
end

Appreciate any help in this regard.

Close

Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.