[rules-users] xls decisiontable -> unable to resolve method using strict-mode
Wolfgang Laun
wolfgang.laun at gmail.com
Mon Jan 9 08:58:50 EST 2012
An error message
[Error: unable to resolve method using strict-mode: x.y.z()]
should not be interpreted as "Drools has looked for x.y.z() *only*, and
failed."
Given a DRL condition
foo == ...
Drools will try and locate methods getFoo(), isFoo() and foo(); and a
method must meet certain requirements such as an empty argument list and a
non-void result, and (I think - not sure) it must be sufficiently visible.
Now, what about "result" in ultra.Default.ultra.MYHTTPD?
-W
2012/1/9 Olle Martensson <olle.martensson at digitalroute.com>
> Ignore the last post, It was a silly mistake on my part .. sorry about
> that.
> It makes no difference if I use run the DTABLE without KnowledgeAgent:
>
> Jan 9 14:08:19: Unable to Analyse Expression request == "/":
> Jan 9 14:08:19: [Error: unable to resolve method using strict-mode:
> ultra.Default.ultra.MYHTTPD.request()]
> Jan 9 14:08:19: [Near : {... request == "/" ....}]
> Jan 9 14:08:19: ^
> Jan 9 14:08:19: [Line: 7, Column: 10]
>
> Drools tries to resolve the property request with a call
> to ultra.Default.ultra.MYHTTPD.request() when it should look
> for ultra.Default.ultra.MYHTTPD.getRequest().
>
>
>
> From: olle martensson <olle.martensson at digitalroute.com>
> Reply-To: Rules Users List <rules-users at lists.jboss.org>
> Date: Mon, 9 Jan 2012 13:25:10 +0100
> To: Rules Users List <rules-users at lists.jboss.org>
> Subject: Re: [rules-users] xls decisiontable -> unable to resolve method
> using strict-mode
>
> Thanks for your answer.
>
> I have now tried to load the XLS without the KnowledgeAgent(see createKnowledgeBase()
> below).
> This time I got class loading problems( see stack trace below).
> This only happens when I load a XLS decision table, If I load a DRL rules
> file it runs fine without classloading issues.
> I use a custom classloader that is configured with the KnowledgeBaseConfiguration,
> I can see that drools is trying to load the rule classes from the custom
> classloader when I run DTABLE but not when I run DRL.
> From the stacktrace it seems as if it's using CompositeClassLoader though.
>
> ### STACKTRACE ###
>
> java.lang.ClassNotFoundException: Unable to load
> classA_rules_test.Rule_print_the_incoming_query_9
> at org.drools.util.CompositeClassLoader.loadClass:110
> at
> org.drools.rule.JavaDialectRuntimeData$PackageClassLoader.loadClass:540
> at java.lang.ClassLoader.loadClass:247
> at
> A_rules_test.Rule_print_the_incoming_query_9DefaultConsequenceInvoker.evaluate
> at org.drools.common.DefaultAgenda.fireActivation:1091
> at org.drools.common.DefaultAgenda.fireNextItem:1029
> at org.drools.common.DefaultAgenda.fireAllRules:1251
> at org.drools.common.AbstractWorkingMemory.fireAllRules:708
> at org.drools.common.AbstractWorkingMemory.fireAllRules:672
> at org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules:218
>
> ### CREATION OF KNOWLEDGEBASE ###
>
> private void createKnowledgeBase()
>
> {
>
> KnowledgeBaseConfiguration kBaseConfig = KnowledgeBaseFactory
>
> .newKnowledgeBaseConfiguration(null, context
> .getClassLoader());
>
> kBaseConfig.setOption(EventProcessingOption.STREAM);
>
> //kBaseConfig.setOption(MultithreadEvaluationOption.YES);
>
> //kBaseConfig.setOption(MaxThreadsOption.get(Runtime.getRuntime().availableProcessors()
> * 2));
>
> KnowledgeBase kBase = KnowledgeBaseFactory
>
> .newKnowledgeBase(kBaseConfig);
>
>
> KnowledgeBuilderConfiguration bconf = KnowledgeBuilderFactory
>
> .newKnowledgeBuilderConfiguration(null,
>
> context.getClassLoader());
>
> bconf.setProperty("drools.dialect.java.compiler", "ECLIPSE");
>
> bconf.setProperty("drools.dialect.java.lngLevel", "1.6");
>
>
>
> DecisionTableConfiguration dtableconfiguration =
>
> KnowledgeBuilderFactory.newDecisionTableConfiguration();
>
> dtableconfiguration.setInputType( DecisionTableInputType.XLS );
>
>
>
>
> PackageBuilderConfiguration pconf = (PackageBuilderConfiguration)
> bconf;
>
> pconf.setClassLoaderCacheEnabled(true);
>
>
>
> MVELDialectConfiguration conf =
> (MVELDialectConfiguration)pconf.getDialectConfiguration("mvel");
>
> conf.setStrict(false);
>
>
>
> String compilerDumpDir = context.getCompilerDumpDir();
>
> if (compilerDumpDir != null && !compilerDumpDir.isEmpty())
>
> {
>
> pconf.setDumpDir(new File(compilerDumpDir));
>
> }
>
>
>
> KnowledgeBuilder kbuilder =
> KnowledgeBuilderFactory.newKnowledgeBuilder(kBase, bconf);
>
>
>
> kbuilder.add(ResourceFactory.newFileResource(
> "/tmp/templatetest.xls"),
>
> ResourceType.DTABLE,
>
> dtableconfiguration);
> }
>
>
>
> From: Michael Anstis <michael.anstis at gmail.com>
> Reply-To: Rules Users List <rules-users at lists.jboss.org>
> Date: Mon, 9 Jan 2012 09:18:51 +0100
> To: Rules Users List <rules-users at lists.jboss.org>
> Subject: Re: [rules-users] xls decisiontable -> unable to resolve method
> using strict-mode
>
> Have you tried load the XLS into a KnowledgeBase without using a
> KnowledgeAgent?
>
> Trying to narrow down where the issue might be will help (everyone)
> tremendously.
>
> On 5 January 2012 16:40, ollem <olle.martensson at digitalroute.com> wrote:
>
>> Hello!
>>
>> I'm using a knowledgeagent to point out a changeset XML which contains the
>> following DTABLE:
>>
>> ...
>> <resource source='file:/../templatetest.xls' type='DTABLE' />
>> ...
>>
>> when I compile I get the following error:
>>
>> Unable to Analyse Expression request == "/":
>> [Error: unable to resolve method using strict-mode:
>> ultra.Default.ultra.MYHTTPD.request()]
>> [Near : {... request == "/" ....}]
>> ^
>> [Line: 7, Column: 10] : [Rule name='print the incoming query_9']
>>
>> The weird this is that MYHTTPD class is a javabean and contains getRequest
>> and setRequest methods.
>> notice that it tries a no getter method
>> ultra.Default.ultra.MYHTTPD.request().
>> If I do the same logic from a normal DRL rules file it works fine.
>> MYHTTPD is generated so I cannot past the source here, but it's correct
>> and
>> as I mentioned working in DRL files.
>>
>> this is how the XSL file looks like:
>>
>> RuleSet A rules test
>> Import ultra.Default.ultra.MYHTTPD
>>
>> RuleTable print the incoming query
>> CONDITION ACTION
>> MYHTTPD
>> request System.out.println($param);
>> Matcher Logger
>> / "webserver root"
>>
>> Anybody who knows what this is about?
>>
>> Thanks // Olle
>>
>>
>>
>>
>>
>>
>> --
>> View this message in context:
>> http://drools.46999.n3.nabble.com/xls-decisiontable-unable-to-resolve-method-using-strict-mode-tp3635460p3635460.html
>> Sent from the Drools: User forum mailing list archive at Nabble.com.
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20120109/160e4b71/attachment.html
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/png
Size: 89375 bytes
Desc: not available
Url : http://lists.jboss.org/pipermail/rules-users/attachments/20120109/160e4b71/attachment.png
More information about the rules-users
mailing list