Is it a list that you would like to use as global param ? If this is the case, maybe change your rule & code like that 

        //GET A KSESSION
        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();

        //now create some test data
        ksession.insert( new Cheese( "stilton",
                               42 ) );
        ksession.insert( new Person( "michael",
                               42 ) );
        final List<String> list = new ArrayList<String>();
        ksession.setGlobal( "list",
                      list );





template header

package org.drools.examples.templates;

global java.util.List list;

template "cheesefans"

rule "Cheese fans_@{row.rowNumber}"
        Person(age == @{age})
        Cheese(type == "@{type}")
end template

On Tue, May 20, 2014 at 4:40 PM, Ephemeris Lappis <> wrote:

I have no such kind test with Pax Exam. Should you send me a simple maven project example using a Karaf container ?

Back to the problem, a very simple rule with something like that in the RHS always fails when deployed in a bundle whose class loader is the felix one :

List<String> l = new ArrayList<>();
that must be fixed with :
List<String> l = new ArrayList<String>();


int n = 1_000;
that fails instead of :
int n = 1000;

FYI, I use ServiceMix 4.5.3.

Thanks again.

2014-05-20 15:41 GMT+02:00 Charles Moulliard <>:

A test case will be required to reproduce your problem. Do you have a pax-exam test ?

On Tue, May 20, 2014 at 1:03 PM, Ephemeris Lappis <> wrote:

Here is the first lines of the error message :

14:58:57,457 | ERROR | tp1946301910-151 | AbstractKieModule                |
239 - org.drools.compiler - | Unable to build
Rule Compilation error : [Rule name='Main Rule']
        my/tests/drools/osgi/expert/rules/ (8:649) :
Incorrect number of arguments for type HashMap<K,V>; it cannot be
parameterized with arguments <?>
        my/tests/drools/osgi/expert/rules/ (8:666) :
Syntax error on token "<", ? expected after this token

I have found the explanation and a workaround : put it all with a strict
"1.5" syntax in the RHS ! In this current case, do not use <> to infere the
generic type, but use the expected declared types instead.

After a rather touchy remote debug of the ServiceMix runtime to inspect what
is different from the Junit tests, I think that the problem comes from the
classloader that is associated with the Kie container. Before compilation
the language source and target level is  set with version 1.7 as expected,
but in the nameEnvironment that is passed to the JavaCompiler (indeed, ecj
compiler), the droolsClassloader is of type
"org/apache/felix/framework/ModuleImpl$ModuleClassLoaderJava5". As its name
seems to incidate, I'm afraid that the Karaf/Felix loader is originally
built in 1.5.

I've read some posts about the eclipse compiler that perhaps takes into
account the caller compliance to adapt its compilation language level.

Class loaders seem to be a serious problem when using Drools in complex
environment such as a OSGi one...

Please, could you confirm my analysis, and, if you have one, propose any
better solution ? I don't know, for example, if it's possible to influence
Karaf to use different levels of bundle class loaders...

Thanks a lot.


View this message in context:
Sent from the Drools: User forum mailing list archive at
rules-users mailing list

Charles Moulliard
Apache Committer / Architect @RedHat
Twitter : @cmoulliard | Blog :

rules-users mailing list

rules-users mailing list

Charles Moulliard
Apache Committer / Architect @RedHat
Twitter : @cmoulliard | Blog :