Hi,
I have the following template and rule defined in a file:
(deftemplate S
(declare (from-class svf.data.S))
)
(defrule LVC
?s <- (S (name "ABC") (version ~/2\.6\..*/))
=>
(add new svf.data.V)
)
Where V and S are java objects and name and version are String members
belonging to S.
I can get this rule to fire from the jess command line without any
problem.
I am trying to use the JSR-94 api to register a RuleExceutionSet and
create a StatelessRuleSession for the set. But the following code:
ruleAdministrator = ruleServiceProvider.getRuleAdministrator();
LocalRuleExecutionSetProvider ruleExecutionSetProvider =
ruleAdministrator.getLocalRuleExecutionSetProvider(properties);
FileInputStream reader = new FileInputStream(RULES_FILE);
RuleExecutionSet ruleSet =
ruleExecutionSetProvider.createRuleExecutionSet(reader, properties);
ruleAdministrator.registerRuleExecutionSet(RULESET_URI, ruleSet,
properties);
reader.close();
RuleRuntime ruleRuntime = ruleServiceProvider.getRuleRuntime();
StatelessRuleSession session = (StatelessRuleSession)
ruleRuntime.createRuleSession(RULESET_URI, null,
RuleRuntime.STATELESS_SESSION_TYPE);
Throws the following exception:
RuleException(javax.rules.RuleSessionCreateException: Problem creating
rule session), root cause(java.io.NotSerializableException: jess.b4)
at jess.jsr94.h.<init>(Unknown Source)
at jess.jsr94.c.<init>(Unknown Source)
at jess.jsr94.l.createRuleSession(Unknown Source)
at svf.rules.engine.RuleTest.testRules(RuleTest.java:94)
at svf.rules.engine.RuleTest.main(RuleTest.java:150)
Caused by: java.io.NotSerializableException: jess.b4
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at java.util.HashMap.writeObject(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteObject(Unknown Source)
at java.util.Collections$SynchronizedMap.writeObject(Unknown
Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at jess.Rete.bsave(Unknown Source)
at jess.jsr94.j.clone(Unknown Source)
... 5 more
When I remove the regular expression part from the rule above, the
RuleSession gets successfully created without any problems.
Is there something I am doing wrong, or is there a problem with the
regular expression syntax when used from JSR-94?
Thanks,
Shyamal