Hello.
Here the shell:info of my ServiceMix :
Karaf
Karaf version 2.2.11
OSGi Framework org.apache.felix.framework - 3.2.2
JVM
Java Virtual Machine Java HotSpot(TM) 64-Bit Server VM version
24.51-b03
Version 1.7.0_51
Vendor Oracle Corporation
I attach also a test project with the different modules that "mimic" the
real project's structure.
I have 2 drl files. The "rules.drl" is compiled and executed. The
"rules-bad.drl" uses 2 Java 1.7 syntax elements (generic type inference and
thousand separator), and fails on ServiceMix.
I hope this can help you.
Another problem we've had with these tests is about the OSGi classloader. I
had a look at your example on github, and saw that the bundle project
manifest contains many Import-Package to let Drools use the module
classloader that is passed to create the KieContainer. But the imports
depends on the rules generated code. For example, in our code an accumulate
function is translated in a class that seems to require more import. I've
tried to add some packages, but the compilation has always failed on
indirect dependencies that are hard to discover. I've tried with a dynamic
import (that is a bad thing I think) and it works.
Many things are still "vague" in the question of the class loaders. I
understand that the classloader that is passed on the KieContainer is used
by Drools to resolve the rules module et files. In my case this classloader
is the Felix's one that seems to restrict Java level to 1.5 in the problem
discussed above... But I don't understand why the Drools OSGi integration
that seems to act in the "machinery" doesn't supplement this classloader
with all the needed Drools/Kie libraries and transitive dependencies.
Ultimately, the application bundle that provides the rules and and set up
their container must obviously have a reference on the API, but can't be
aware of all the implementation packages.
At this time, we're going further with the dynamic import, but I suppose
we'll try to find a better solution.
Any idea ?
Thanks again.
Regards.
2014-05-20 17:49 GMT+02:00 Charles Moulliard <ch007m(a)gmail.com>:
Which version of karaf / felix do you use ?
I'm using this version of Felix/karaf
Karaf version 2.3.0.redhat-610379
OSGi Framework org.apache.felix.framework -
4.0.3.redhat-610379
Java Virtual Machine Java HotSpot(TM) 64-Bit Server VM version
24.51-b03
Version 1.7.0_51
I have made a test with this rule packaged with this maven module (
https://github.com/cmoulliard/droolsjbpm-osgi-examples#simple-rule-example)
and that works in both cases
package org.drools.example.drink;
import org.drools.example.model.Person
import java.util.List
import java.util.ArrayList;
rule "CanDrink"
when
p : Person( age >= 21 )
then
p.setCanDrink(true);
List<String> l = new ArrayList<>();
end
OR
package org.drools.example.drink;
import org.drools.example.model.Person
import java.util.List
import java.util.ArrayList;
rule "CanDrink"
when
p : Person( age >= 21 )
then
p.setCanDrink(true);
List<String> l = new ArrayList<String>();
end
On Tue, May 20, 2014 at 5:10 PM, Ephemeris Lappis <
ephemeris.lappis(a)gmail.com> wrote:
> In this case it's not a global, but a temporary variable in the rule
> consequence. Indeed, the problem is not only about generics, but impacts
> all the syntax elements that may have changed since Java 1.5, and make the
> rules Java compiler fails when running in ServiceMix.
>
> As I said before, the workaround is quite easy, changing all the Java
> code to be compliant with the compilation level. The question is just about
> a confirmation of the Felix's class loader (org/apache/felix/framework/
> ModuleImpl$ModuleClassLoaderJava5) in the compiler's behavior, and a
> better solution to be able to write RHS with a 'modern' syntax.
>
> Thanks.
>
>
> 2014-05-20 16:56 GMT+02:00 Charles Moulliard [via Drools] <[hidden
email]<http://user/SendEmail.jtp?type=node&node=4029629&i=0>
> >:
>
>> 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",
>> "stilton",
>> 42 ) );
>> final List<String> list = new ArrayList<String>();
>> ksession.setGlobal( "list",
>> list );
>>
>> ksession.fireAllRules();
>>
>> System.out.println(list);
>>
>> ksession.dispose();
>>
>> Rule
>>
>> template header
>> age
>> type
>> log
>>
>> package org.drools.examples.templates;
>>
>> global java.util.List list;
>>
>> template "cheesefans"
>>
>> rule "Cheese fans_(a){row.rowNumber}"
>> when
>> Person(age == @{age})
>> Cheese(type == "@{type}")
>> then
>> list.add("@{log}");
>> end
>> end template
>>
>>
>>
>> On Tue, May 20, 2014 at 4:40 PM, Ephemeris Lappis <[hidden
email]<http://user/SendEmail.jtp?type=node&node=4029628&i=0>
>> > wrote:
>>
>>> Hello.
>>>
>>> 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>();
>>>
>>> or
>>>
>>> int n = 1_000;
>>> that fails instead of :
>>> int n = 1000;
>>>
>>> FYI, I use ServiceMix 4.5.3.
>>>
>>> Thanks again.
>>> Regards.
>>>
>>>
>>>
>>> 2014-05-20 15:41 GMT+02:00 Charles Moulliard <[hidden
email]<http://user/SendEmail.jtp?type=node&node=4029628&i=1>
>>> >:
>>>
>>> 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 <[hidden
email]<http://user/SendEmail.jtp?type=node&node=4029628&i=2>
>>>> > wrote:
>>>>
>>>>> Hello.
>>>>>
>>>>> Here is the first lines of the error message :
>>>>>
>>>>>
>>>>> 14:58:57,457 | ERROR | tp1946301910-151 | AbstractKieModule
>>>>> |
>>>>> 239 - org.drools.compiler - 6.1.0.20140429-1643 | Unable to build
>>>>> KieBaseModel:MyKBase
>>>>> Rule Compilation error : [Rule name='Main Rule']
>>>>>
>>>>> my/tests/drools/osgi/expert/rules/Rule_Main_Rule1409557233.java
(8:649) :
>>>>> Incorrect number of arguments for type HashMap<K,V>; it cannot
be
>>>>> parameterized with arguments <?>
>>>>>
>>>>> my/tests/drools/osgi/expert/rules/Rule_Main_Rule1409557233.java
(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.
>>>>>
>>>>> Regards.
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> View this message in context:
>>>>>
http://drools.46999.n3.nabble.com/Rules-compilation-error-with-OSGi-integ...
>>>>> Sent from the Drools: User forum mailing list archive at
Nabble.com.
>>>>> _______________________________________________
>>>>> rules-users mailing list
>>>>> [hidden email]
<
http://user/SendEmail.jtp?type=node&node=4029628&i=3>
>>>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Charles Moulliard
>>>> Apache Committer / Architect @RedHat
>>>> Twitter : @cmoulliard | Blog :
http://cmoulliard.github.io
>>>>
>>>>
>>>> _______________________________________________
>>>> rules-users mailing list
>>>> [hidden email]
<
http://user/SendEmail.jtp?type=node&node=4029628&i=4>
>>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>>
>>>
>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> [hidden email]
<
http://user/SendEmail.jtp?type=node&node=4029628&i=5>
>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>
>>
>>
>> --
>> Charles Moulliard
>> Apache Committer / Architect @RedHat
>> Twitter : @cmoulliard | Blog :
http://cmoulliard.github.io
>>
>>
>> _______________________________________________
>> rules-users mailing list
>> [hidden email]
<
http://user/SendEmail.jtp?type=node&node=4029628&i=6>
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>
>> ------------------------------
>> If you reply to this email, your message will be added to the
>> discussion below:
>>
>>
http://drools.46999.n3.nabble.com/Rules-compilation-error-with-OSGi-integ...
>> To unsubscribe from Rules compilation error with OSGi integration
>> (6.1.0.Beta3), click here.
>>
NAML<http://drools.46999.n3.nabble.com/template/NamlServlet.jtp?macro=...
>>
>
>
> ------------------------------
> View this message in context: Re: [rules-users] Rules compilation error
> with OSGi integration
(
6.1.0.Beta3)<http://drools.46999.n3.nabble.com/Rules-compilation-error...
>
> Sent from the Drools: User forum mailing list
archive<http://drools.46999.n3.nabble.com/Drools-User-forum-f47000.htm...
Nabble.com.
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
--
Charles Moulliard
Apache Committer / Architect @RedHat
Twitter : @cmoulliard | Blog :
http://cmoulliard.github.io
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users