<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">Great!<br>
Glad to be able to return to the community.<br>
--W<br>
<br>
On 10/29/2012 12:34 PM, Mario Fusco wrote:<br>
</div>
<blockquote
cite="mid:CAPYjU_mejhpdPfX1fwNqPKuH_gLZZ1EsnzLHHf2q709PeZZQDg@mail.gmail.com"
type="cite">
<div class="gmail_quote">
<div>I just pushed the fix for the issue you found.<br>
<br>
Regards and thank you again for having pointed it out,<br>
Mario<br>
</div>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi All,<br>
<br>
As a first time GIT user... I think I have manager to "pull
this off"<br>
and submitted a pull request for a test case in the
drools-compiler<br>
project. This should add one file in src/test/ in the package<br>
org.drools.compiler.integration as I deemed that to be the
most<br>
appropriate place.<br>
<br>
Regards,<br>
Willem<br>
<div class="HOEnZb">
<div class="h5"><br>
On 10/26/2012 06:37 AM, Mark Proctor wrote:<br>
> Would it be possible to submit a small self contains
test, as a pull request. Here a detailed "how to" to get
you started.<br>
> <a moz-do-not-send="true"
href="http://docs.jboss.org/drools/release/5.4.0.Final/droolsjbpm-introduction-docs/html/gettingstarted.html"
target="_blank">http://docs.jboss.org/drools/release/5.4.0.Final/droolsjbpm-introduction-docs/html/gettingstarted.html</a><br>
><br>
> Thanks<br>
><br>
> Mark<br>
> On 25 Oct 2012, at 12:09, Willem van Asperen <<a
moz-do-not-send="true"
href="mailto:willem@van.asperen.org">willem@van.asperen.org</a>>
wrote:<br>
><br>
>> Hi All,<br>
>><br>
>> I have taken the liberty to log this in Jira at<br>
>> <a moz-do-not-send="true"
href="https://issues.jboss.org/browse/JBRULES-3670"
target="_blank">https://issues.jboss.org/browse/JBRULES-3670</a><br>
>><br>
>> Regards,<br>
>> Willem<br>
>><br>
>> On 10/25/2012 12:44 PM, Willem van Asperen wrote:<br>
>>> Hi All,<br>
>>><br>
>>> The difference between failing or not stems
from using insert() and<br>
>>> retract() versus insertLogical(). The first
two make the package fail to<br>
>>> load, the latter seems to work fine.<br>
>>><br>
>>> I can create a package that *does* load, by
adding a cast to the full<br>
>>> class name in the rule:<br>
>>><br>
>>> rule "clean up possible slot lock, when no
longer to schedule"<br>
>>> when<br>
>>> $p : PossibleSlotLock( $ship; )<br>
>>> not ToScheduleLock( mover == $ship
)<br>
>>> then<br>
>>> retract(
(vcm.planner.lock.standard.PossibleSlotLock)$p );<br>
>>> end<br>
>>><br>
>>> and by stating the full class name in the
inserts, like so:<br>
>>><br>
>>> insert(new
vcm.planner.lock.standard.PossibleSlotLock($ship,
$chamber,<br>
>>> $side, $schedule, $eta, $schedule.getTick(),
"existing"));<br>
>>><br>
>>> This way the loading works fine.<br>
>>><br>
>>> So this is less about loading compiled files
and more about class<br>
>>> loading for insert() and retract().<br>
>>><br>
>>> Hope this helps!<br>
>>><br>
>>> I have also managed to reproduce this in a
simple case. jar attached.<br>
>>> Notice that when I change rule "now use it B"
to have RHS "insert( new<br>
>>> Person( $christianName, null ) );" the
loading works. I can imagine the<br>
>>> compiler / loader just assumes that a class
with constructor Person(<br>
>>> String, ExternalClass ) may become available
at run time?<br>
>>><br>
>>> Regards,<br>
>>> Willem<br>
>>><br>
>>> On 10/25/2012 11:32 AM, Willem van Asperen
wrote:<br>
>>>> Hi All,<br>
>>>><br>
>>>> To add to this, I've done some further
testing.<br>
>>>><br>
>>>> It seems that the particular order in
which each of the compiled<br>
>>>> packages is loaded does not matter.<br>
>>>> Not all packages that declare local
classes fail... I have now found the<br>
>>>> two that do. I cannot see any striking
differences between the ones that<br>
>>>> do and do not fail...<br>
>>>><br>
>>>> What I did find is that removing all the
rules from the failing packages<br>
>>>> (so only leaving the imports and declare)
seems to remove this issue!<br>
>>>><br>
>>>> I'll dig 'round some more.<br>
>>>><br>
>>>> Regards,<br>
>>>> Willem<br>
>>>><br>
>>>> On 10/25/2012 01:45 AM, Wolfgang Laun
wrote:<br>
>>>>> Folks,<br>
>>>>> it seems that something new in
5.5.0.CR1 sabotages the ingestion of<br>
>>>>> compiled packages.<br>
>>>>> -W<br>
>>>>><br>
>>>>> ---------- Forwarded message
----------<br>
>>>>> From: Willem van Asperen <<a
moz-do-not-send="true"
href="mailto:willem@van.asperen.org">willem@van.asperen.org</a>><br>
>>>>> Date: Thu, 25 Oct 2012 00:04:32 +0200<br>
>>>>> Subject: Re: [rules-users]
ClassNotFound on class defined in drl with 5.5.0.CR1<br>
>>>>> To: Wolfgang Laun <<a
moz-do-not-send="true"
href="mailto:wolfgang.laun@gmail.com">wolfgang.laun@gmail.com</a>>,
Rules Users List<br>
>>>>> <<a moz-do-not-send="true"
href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a>><br>
>>>>><br>
>>>>> Hi,<br>
>>>>><br>
>>>>> This was a good idea. Here is my test
case:<br>
>>>>><br>
>>>>> public class TestCompilation {<br>
>>>>><br>
>>>>> private final static
FileFilter RULES_FILES_FILTER = new FileFilter() {<br>
>>>>> @Override<br>
>>>>> public boolean
accept(File pathname) {<br>
>>>>> return
pathname.getName().endsWith(".drl");<br>
>>>>> }<br>
>>>>> };<br>
>>>>><br>
>>>>> private void
testCompilation() throws FileNotFoundException,<br>
>>>>> IOException {<br>
>>>>>
KnowledgeBuilderConfiguration configuration =<br>
>>>>>
KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();<br>
>>>>> KnowledgeBuilder kbuilder
=<br>
>>>>>
KnowledgeBuilderFactory.newKnowledgeBuilder(configuration);<br>
>>>>><br>
>>>>> File folder = new
File("src/main/rules/");<br>
>>>>> for (File file :
folder.listFiles(RULES_FILES_FILTER)) {<br>
>>>>>
System.out.println("compiling "+file.getAbsolutePath());<br>
>>>>>
kbuilder.add(ResourceFactory.newFileResource(file.getAbsolutePath()),<br>
>>>>> ResourceType.DRL);<br>
>>>>> }<br>
>>>>><br>
>>>>>
System.out.println("saving");<br>
>>>>> ObjectOutputStream out =
new ObjectOutputStream(new<br>
>>>>>
FileOutputStream("test.drl.compiled"));<br>
>>>>> out.writeObject(
kbuilder.getKnowledgePackages());<br>
>>>>> out.close();<br>
>>>>> }<br>
>>>>><br>
>>>>> private KnowledgeBase
testLoad() throws FileNotFoundException,<br>
>>>>> IOException, ClassNotFoundException {<br>
>>>>> Properties
configProperties = new Properties();<br>
>>>>>
KnowledgeBaseConfiguration knowledgeBaseConfiguration =<br>
>>>>>
KnowledgeBaseFactory.newKnowledgeBaseConfiguration(configProperties);<br>
>>>>> KnowledgeBase kbase =<br>
>>>>>
KnowledgeBaseFactory.newKnowledgeBase(knowledgeBaseConfiguration);<br>
>>>>><br>
>>>>> ObjectInputStream in =
new ObjectInputStream(new<br>
>>>>>
FileInputStream("test.drl.compiled"));<br>
>>>>><br>
>>>>>
System.out.println("loading");<br>
>>>>>
kbase.addKnowledgePackages((Collection<KnowledgePackage>)
in.readObject());<br>
>>>>> return kbase;<br>
>>>>> }<br>
>>>>><br>
>>>>> public static void
main(String[] args) throws<br>
>>>>> FileNotFoundException, IOException,
ClassNotFoundException {<br>
>>>>> TestCompilation
testCompilation = new TestCompilation();<br>
>>>>>
testCompilation.testCompilation();<br>
>>>>>
testCompilation.testLoad();<br>
>>>>> }<br>
>>>>> }<br>
>>>>><br>
>>>>> The folder src/main/rules consists of
a number of .drl files.<br>
>>>>> Compiling works fine.<br>
>>>>> This is the output:<br>
>>>>><br>
>>>>> SLF4J: Failed to load class
"org.slf4j.impl.StaticLoggerBinder".<br>
>>>>> SLF4J: Defaulting to no-operation
(NOP) logger implementation<br>
>>>>> SLF4J: See <a moz-do-not-send="true"
href="http://www.slf4j.org/codes.html#StaticLoggerBinder"
target="_blank">http://www.slf4j.org/codes.html#StaticLoggerBinder</a>
for<br>
>>>>> further details.<br>
>>>>> compiling<br>
>>>>>
/home/willem/development/workspace/VCM/src/main/rules/planner-lock.drl<br>
>>>>> compiling<br>
>>>>>
/home/willem/development/workspace/VCM/src/main/rules/executable-action-selection.drl<br>
>>>>> compiling<br>
>>>>>
/home/willem/development/workspace/VCM/src/main/rules/block-times-3.drl<br>
>>>>> compiling<br>
>>>>>
/home/willem/development/workspace/VCM/src/main/rules/planner-bridge.drl<br>
>>>>> compiling<br>
>>>>>
/home/willem/development/workspace/VCM/src/main/rules/routeplan.drl<br>
>>>>> compiling<br>
>>>>>
/home/willem/development/workspace/VCM/src/main/rules/shift-management-brabant.drl<br>
>>>>> compiling<br>
>>>>>
/home/willem/development/workspace/VCM/src/main/rules/plan-first-object-in-route.drl<br>
>>>>> compiling<br>
>>>>>
/home/willem/development/workspace/VCM/src/main/rules/operator-lock.drl<br>
>>>>> compiling<br>
>>>>>
/home/willem/development/workspace/VCM/src/main/rules/block-times-route-call.drl<br>
>>>>> compiling<br>
>>>>>
/home/willem/development/workspace/VCM/src/main/rules/shift-management.drl<br>
>>>>> compiling<br>
>>>>>
/home/willem/development/workspace/VCM/src/main/rules/planner-process-data.drl<br>
>>>>> compiling<br>
>>>>>
/home/willem/development/workspace/VCM/src/main/rules/plan-last-moment.drl<br>
>>>>> compiling<br>
>>>>>
/home/willem/development/workspace/VCM/src/main/rules/operator-bridge.drl<br>
>>>>> compiling<br>
>>>>>
/home/willem/development/workspace/VCM/src/main/rules/operator-management.drl<br>
>>>>> saving<br>
>>>>> loading<br>
>>>>> Exception in thread "main"
java.lang.ClassNotFoundException:<br>
>>>>>
vcm.planner.lock.standard.PossibleSlotLock<br>
>>>>> at
java.net.URLClassLoader$1.run(URLClassLoader.java:366)<br>
>>>>> at
java.net.URLClassLoader$1.run(URLClassLoader.java:355)<br>
>>>>> at
java.security.AccessController.doPrivileged(Native Method)<br>
>>>>> at
java.net.URLClassLoader.findClass(URLClassLoader.java:354)<br>
>>>>> at
java.lang.ClassLoader.loadClass(ClassLoader.java:423)<br>
>>>>> at
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)<br>
>>>>> at
java.lang.ClassLoader.loadClass(ClassLoader.java:356)<br>
>>>>> at
java.lang.Class.forName0(Native Method)<br>
>>>>> at
java.lang.Class.forName(Class.java:264)<br>
>>>>> at<br>
>>>>>
org.drools.common.DroolsObjectInputStream.resolveClass(DroolsObjectInputStream.java:85)<br>
>>>>> at<br>
>>>>>
org.drools.common.DroolsObjectInputStream.resolveClass(DroolsObjectInputStream.java:97)<br>
>>>>> at<br>
>>>>>
java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1593)<br>
>>>>> at
java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1514)<br>
>>>>> at
java.io.ObjectInputStream.readClass(ObjectInputStream.java:1480)<br>
>>>>> at
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1330)<br>
>>>>> at
java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)<br>
>>>>> at<br>
>>>>>
org.drools.rule.ConsequenceMetaData$Statement.readExternal(ConsequenceMetaData.java:61)<br>
>>>>> at<br>
>>>>>
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1810)<br>
>>>>> at<br>
>>>>>
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)<br>
>>>>> at
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)<br>
>>>>> at
java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)<br>
>>>>> at
java.util.ArrayList.readObject(ArrayList.java:733)<br>
>>>>> at
sun.reflect.GeneratedMethodAccessor7.invoke(Unknown
Source)<br>
>>>>> at<br>
>>>>>
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br>
>>>>> at
java.lang.reflect.Method.invoke(Method.java:601)<br>
>>>>> at<br>
>>>>>
java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)<br>
>>>>> at<br>
>>>>>
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1866)<br>
>>>>> at<br>
>>>>>
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)<br>
>>>>> at
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)<br>
>>>>> at
java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)<br>
>>>>> at<br>
>>>>>
org.drools.rule.ConsequenceMetaData.readExternal(ConsequenceMetaData.java:19)<br>
>>>>> at<br>
>>>>>
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1810)<br>
>>>>> at<br>
>>>>>
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)<br>
>>>>> at
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)<br>
>>>>> at
java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)<br>
>>>>> at
org.drools.rule.Rule.readExternal(Rule.java:207)<br>
>>>>> at<br>
>>>>>
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1810)<br>
>>>>> at<br>
>>>>>
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)<br>
>>>>> at
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)<br>
>>>>> at
java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)<br>
>>>>> at<br>
>>>>>
org.drools.rule.JavaDialectRuntimeData.readExternal(JavaDialectRuntimeData.java:195)<br>
>>>>> at<br>
>>>>>
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1810)<br>
>>>>> at<br>
>>>>>
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)<br>
>>>>> at
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)<br>
>>>>> at
java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)<br>
>>>>> at
java.util.HashMap.readObject(HashMap.java:1155)<br>
>>>>> at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)<br>
>>>>> at<br>
>>>>>
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)<br>
>>>>> at<br>
>>>>>
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br>
>>>>> at
java.lang.reflect.Method.invoke(Method.java:601)<br>
>>>>> at<br>
>>>>>
java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)<br>
>>>>> at<br>
>>>>>
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1866)<br>
>>>>> at<br>
>>>>>
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)<br>
>>>>> at
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)<br>
>>>>> at
java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)<br>
>>>>> at<br>
>>>>>
org.drools.rule.DialectRuntimeRegistry.readExternal(DialectRuntimeRegistry.java:58)<br>
>>>>> at<br>
>>>>>
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1810)<br>
>>>>> at<br>
>>>>>
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)<br>
>>>>> at
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)<br>
>>>>> at
java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)<br>
>>>>> at
org.drools.rule.Package.readExternal(Package.java:208)<br>
>>>>> at<br>
>>>>>
org.drools.definitions.impl.KnowledgePackageImp.readExternal(KnowledgePackageImp.java:157)<br>
>>>>> at<br>
>>>>>
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1810)<br>
>>>>> at<br>
>>>>>
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)<br>
>>>>> at
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)<br>
>>>>> at
java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)<br>
>>>>> at
java.util.ArrayList.readObject(ArrayList.java:733)<br>
>>>>> at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)<br>
>>>>> at<br>
>>>>>
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)<br>
>>>>> at<br>
>>>>>
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br>
>>>>> at
java.lang.reflect.Method.invoke(Method.java:601)<br>
>>>>> at<br>
>>>>>
java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)<br>
>>>>> at<br>
>>>>>
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1866)<br>
>>>>> at<br>
>>>>>
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)<br>
>>>>> at
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)<br>
>>>>> at
java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)<br>
>>>>> at<br>
>>>>>
com.paconsulting.pase.test.TestCompilation.testLoad(TestCompilation.java:57)<br>
>>>>> at<br>
>>>>>
com.paconsulting.pase.test.TestCompilation.main(TestCompilation.java:64)<br>
>>>>><br>
>>>>> The class PossibleSlotLock is just a
locally declared fact class. It is<br>
>>>>> only being used in that particular
.drl file. Every .drl file has it's<br>
>>>>> own package name.<br>
>>>>><br>
>>>>> The head of the .drl file:<br>
>>>>><br>
>>>>> package vcm.planner.lock.standard;<br>
>>>>><br>
>>>>> import java.util.Set;<br>
>>>>><br>
>>>>> import
com.paconsulting.pase.core.schedule.CurrentTime;<br>
>>>>> import
com.paconsulting.pase.core.duration.FixedDuration;<br>
>>>>> import
com.paconsulting.pase.transport.agents.ScheduleManagingContainer;<br>
>>>>> import
com.paconsulting.pase.transport.agents.movers.Ship;<br>
>>>>> import
com.paconsulting.pase.transport.agents.water.Lock;<br>
>>>>> import
com.paconsulting.pase.transport.agents.water.LockChamber;<br>
>>>>> import
com.paconsulting.pase.transport.agents.base.WaterLevel;<br>
>>>>> import
com.paconsulting.pase.transport.components.action.ActionFactory;<br>
>>>>> import
com.paconsulting.pase.transport.actions.IAction;<br>
>>>>> import
com.paconsulting.pase.transport.components.action.IActionable;<br>
>>>>> import
com.paconsulting.pase.transport.actions.NonTransactionAction;<br>
>>>>> import
com.paconsulting.pase.transport.actions.ExecutableAction;<br>
>>>>> import
com.paconsulting.pase.transport.components.containing.IContainer;<br>
>>>>> import<br>
>>>>>
com.paconsulting.pase.transport.components.containing.IContainer.UpDown;<br>
>>>>> import
com.paconsulting.pase.transport.components.moving.IMover;<br>
>>>>> import
com.paconsulting.pase.transport.components.moving.TransferSchedule;<br>
>>>>> import
com.paconsulting.pase.transport.components.moving.ToScheduleLock;<br>
>>>>><br>
>>>>> declare PossibleSlotLock<br>
>>>>> ship : IMover<br>
>>>>> chamber : IContainer<br>
>>>>> side : IContainer.UpDown<br>
>>>>> schedule : TransferSchedule<br>
>>>>> eta : double<br>
>>>>> at : double<br>
>>>>> cause : String<br>
>>>>> end<br>
>>>>> ....<br>
>>>>><br>
>>>>> Same issue like in my previous email,
different class that cannot be found.<br>
>>>>><br>
>>>>> This works in 5.4.0.Final<br>
>>>>><br>
>>>>> Any clue?<br>
>>>>><br>
>>>>> This seems to me like a really basic
thing so either I am missing the<br>
>>>>> plot somehow or no-one has yet used a
locally declared fact classes -<br>
>>>>> which I think is just not true...<br>
>>>>><br>
>>>>> Regards,<br>
>>>>> Willem<br>
>>>>><br>
>>>>> On 10/24/2012 07:29 PM, Wolfgang Laun
wrote:<br>
>>>>>> It would be interesting to know
(and perhaps help to isolate the problem<br>
>>>>>> apparently introduced in 5.5.0)
if you could try and compile and<br>
>>>>>> serialize into a single file, and
load that in a single readObject.<br>
>>>>>><br>
>>>>>> -W<br>
>>>>>><br>
>>>>>> On 24/10/2012, Willem van Asperen
<<a moz-do-not-send="true"
href="mailto:willem@van.asperen.org">willem@van.asperen.org</a>>
wrote:<br>
>>>>>>> Hi Wolfgang,<br>
>>>>>>><br>
>>>>>>> Thanks for picking this up. I
am indeed compiling these separate .drl<br>
>>>>>>> files into separate
.drl.compiled files and then creating a kbase using<br>
>>>>>>> addKnowledgePackages on the
individual .drl.compiled files.<br>
>>>>>>><br>
>>>>>>> But: the classes declared in
some of by .drl files are only going to be<br>
>>>>>>> used in that particular .drl
file - not anywhere else.<br>
>>>>>>> Also: this did work in
5.4.0.Final but now has given up on me.<br>
>>>>>>><br>
>>>>>>> Point is that I need to be
flexible in mixing different .drl.compiled<br>
>>>>>>> files into a kbase, based on
user specifications.<br>
>>>>>>> Alternative is that I do not
pre-compile these .drl files and only<br>
>>>>>>> compile them, in combination,
in the mix that is required by the user...<br>
>>>>>>> If that would solve the
problem... But it seems to be more cumbersome...<br>
>>>>>>><br>
>>>>>>> Regards,<br>
>>>>>>> Willem<br>
>>>>>>><br>
>>>>>>> On 10/24/2012 03:39 PM,
Wolfgang Laun wrote:<br>
>>>>>>>> The code you use for
loading where you load many .pkg files isn't<br>
>>>>>>>> quite the counterpart for
compiling where you compile one DRL.<br>
>>>>>>>><br>
>>>>>>>> Do you compile and output
the .drl files one by one? Apparently you<br>
>>>>>>>> load them individually?<br>
>>>>>>>><br>
>>>>>>>> Try compiling them all,
and then take the Collection<KnowledgePackage><br>
>>>>>>>> and writeObject it to a
single .pkg from which you load them in one<br>
>>>>>>>> go.<br>
>>>>>>>><br>
>>>>>>>> Could it be that the type
declared in one .drl is used in another .drl<br>
>>>>>>>> in the same package?
Reading this in the wrong order might cause the<br>
>>>>>>>> CNF.<br>
>>>>>>>><br>
>>>>>>>> -W<br>
>>>>>>>><br>
>>>>>>>> On 24/10/2012, Willem van
Asperen <<a moz-do-not-send="true"
href="mailto:willem@van.asperen.org">willem@van.asperen.org</a>>
wrote:<br>
>>>>>>>>> Dear All,<br>
>>>>>>>>><br>
>>>>>>>>> I use the Drools
compiler to compile a set of drl files:<br>
>>>>>>>>><br>
>>>>>>>>><br>
>>>>>>>>>
KnowledgeBuilder kbuilder =<br>
>>>>>>>>>
KnowledgeBuilderFactory.newKnowledgeBuilder(configuration);<br>
>>>>>>>>>
kbuilder.add(ResourceFactory.newFileResource(fileName),<br>
>>>>>>>>> ResourceType.DRL);<br>
>>>>>>>>><br>
>>>>>>>>>
KnowledgeBuilderErrors errors = kbuilder.getErrors();<br>
>>>>>>>>> if
(errors.size() > 0) {<br>
>>>>>>>>> for
(KnowledgeBuilderError error: errors) {<br>
>>>>>>>>>
logger.error(error);<br>
>>>>>>>>> }<br>
>>>>>>>>>
throw new IllegalArgumentException("Could not parse<br>
>>>>>>>>> knowledge.");<br>
>>>>>>>>> }<br>
>>>>>>>>><br>
>>>>>>>>>
ObjectOutputStream out = new ObjectOutputStream(new<br>
>>>>>>>>>
FileOutputStream(fileName+".compiled"));<br>
>>>>>>>>>
out.writeObject( kbuilder.getKnowledgePackages());<br>
>>>>>>>>>
out.close();<br>
>>>>>>>>><br>
>>>>>>>>> I then load these
*.compiled files into my application:<br>
>>>>>>>>><br>
>>>>>>>>><br>
>>>>>>>>> for
(String packageName : packages) {<br>
>>>>>>>>>
InputStream is =<br>
>>>>>>>>>
getClass().getResourceAsStream("/"+packageName+".drl.compiled");<br>
>>>>>>>>> if
(is != null) {<br>
>>>>>>>>>
logger.debug("adding package '"+packageName+"'");<br>
>>>>>>>>>
ObjectInputStream in = new ObjectInputStream(is);<br>
>>>>>>>>>
kbase.addKnowledgePackages((Collection<KnowledgePackage>)<br>
>>>>>>>>> in.readObject());<br>
>>>>>>>>>
in.close();<br>
>>>>>>>>> }
else<br>
>>>>>>>>>
throw new FileNotFoundException("could not find<br>
>>>>>>>>> resource for package
"+packageName);<br>
>>>>>>>>>
is.close();<br>
>>>>>>>>> }<br>
>>>>>>>>><br>
>>>>>>>>> In some of these drl
files I declare a class, for instance:<br>
>>>>>>>>><br>
>>>>>>>>> package
vcm.selection.standard;<br>
>>>>>>>>><br>
>>>>>>>>> import
com.paconsulting.pase.transport.agents.ShiftWorker;<br>
>>>>>>>>> import
com.paconsulting.pase.transport.agents.VCMShiftWorker;<br>
>>>>>>>>> import
com.paconsulting.pase.transport.actions.ExecutableAction;<br>
>>>>>>>>> import
com.paconsulting.pase.transport.agents.ScheduleManagingContainer;<br>
>>>>>>>>> import
com.paconsulting.pase.transport.agents.water.Bridge;<br>
>>>>>>>>> import
com.paconsulting.pase.transport.agents.movers.AbstractMover;<br>
>>>>>>>>> import
com.paconsulting.pase.transport.agents.movers.Ship;<br>
>>>>>>>>> import
com.paconsulting.pase.transport.agents.movers.VCMShip;<br>
>>>>>>>>><br>
>>>>>>>>> declare
RelevantExecutableAction<br>
>>>>>>>>> agent :
ShiftWorker<br>
>>>>>>>>>
executableAction : ExecutableAction<br>
>>>>>>>>> end<br>
>>>>>>>>> ...<br>
>>>>>>>>><br>
>>>>>>>>> When running the<br>
>>>>>>>>>
kbase.addKnowledgePackages((Collection<KnowledgePackage>)<br>
>>>>>>>>> in.readObject()) I
get the following ClassNotFound stack trace:<br>
>>>>>>>>><br>
>>>>>>>>>
java.lang.ClassNotFoundException:<br>
>>>>>>>>>
vcm.selection.standard.RelevantExecutableAction<br>
>>>>>>>>> at
java.net.URLClassLoader$1.run(URLClassLoader.java:366)<br>
>>>>>>>>> at
java.net.URLClassLoader$1.run(URLClassLoader.java:355)<br>
>>>>>>>>> at
java.security.AccessController.doPrivileged(Native Method)<br>
>>>>>>>>> at
java.net.URLClassLoader.findClass(URLClassLoader.java:354)<br>
>>>>>>>>> at
java.lang.ClassLoader.loadClass(ClassLoader.java:423)<br>
>>>>>>>>> at
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)<br>
>>>>>>>>> at
java.lang.ClassLoader.loadClass(ClassLoader.java:356)<br>
>>>>>>>>> at
java.lang.Class.forName0(Native Method)<br>
>>>>>>>>> at
java.lang.Class.forName(Class.java:264)<br>
>>>>>>>>> at<br>
>>>>>>>>>
org.drools.common.DroolsObjectInputStream.resolveClass(DroolsObjectInputStream.java:85)<br>
>>>>>>>>> at<br>
>>>>>>>>>
org.drools.common.DroolsObjectInputStream.resolveClass(DroolsObjectInputStream.java:97)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1593)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1514)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readClass(ObjectInputStream.java:1480)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1330)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)<br>
>>>>>>>>> at<br>
>>>>>>>>>
org.drools.rule.ConsequenceMetaData$Statement.readExternal(ConsequenceMetaData.java:61)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1810)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)<br>
>>>>>>>>> at
java.util.ArrayList.readObject(ArrayList.java:733)<br>
>>>>>>>>> at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)<br>
>>>>>>>>> at<br>
>>>>>>>>>
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)<br>
>>>>>>>>> at<br>
>>>>>>>>>
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br>
>>>>>>>>> at
java.lang.reflect.Method.invoke(Method.java:601)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1866)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)<br>
>>>>>>>>> at<br>
>>>>>>>>>
org.drools.rule.ConsequenceMetaData.readExternal(ConsequenceMetaData.java:19)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1810)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)<br>
>>>>>>>>> at
org.drools.rule.Rule.readExternal(Rule.java:207)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1810)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)<br>
>>>>>>>>> at<br>
>>>>>>>>>
org.drools.rule.JavaDialectRuntimeData.readExternal(JavaDialectRuntimeData.java:195)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1810)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)<br>
>>>>>>>>> at
java.util.HashMap.readObject(HashMap.java:1155)<br>
>>>>>>>>> at
sun.reflect.GeneratedMethodAccessor2.invoke(Unknown
Source)<br>
>>>>>>>>> at<br>
>>>>>>>>>
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br>
>>>>>>>>> at
java.lang.reflect.Method.invoke(Method.java:601)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1866)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)<br>
>>>>>>>>> at<br>
>>>>>>>>>
org.drools.rule.DialectRuntimeRegistry.readExternal(DialectRuntimeRegistry.java:58)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1810)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)<br>
>>>>>>>>> at
org.drools.rule.Package.readExternal(Package.java:208)<br>
>>>>>>>>> at<br>
>>>>>>>>>
org.drools.definitions.impl.KnowledgePackageImp.readExternal(KnowledgePackageImp.java:157)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1810)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)<br>
>>>>>>>>> at
java.util.ArrayList.readObject(ArrayList.java:733)<br>
>>>>>>>>> at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)<br>
>>>>>>>>> at<br>
>>>>>>>>>
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)<br>
>>>>>>>>> at<br>
>>>>>>>>>
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br>
>>>>>>>>> at
java.lang.reflect.Method.invoke(Method.java:601)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1866)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)<br>
>>>>>>>>> at<br>
>>>>>>>>>
java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)<br>
>>>>>>>>> at<br>
>>>>>>>>>
com.paconsulting.pase.core.configuration.runconfig.definition.KnowledgebaseDefinition.addPackages(KnowledgebaseDefinition.java:48)<br>
>>>>>>>>> at<br>
>>>>>>>>>
com.paconsulting.pase.core.configuration.runconfig.definition.KnowledgebaseDefinition.materialize(KnowledgebaseDefinition.java:59)<br>
>>>>>>>>> at<br>
>>>>>>>>>
com.paconsulting.pase.core.configuration.runconfig.definition.TeamDefinition.materialize(TeamDefinition.java:97)<br>
>>>>>>>>> at<br>
>>>>>>>>>
com.paconsulting.pase.core.configuration.runconfig.definition.OperatingModelDefinition.materialize(OperatingModelDefinition.java:36)<br>
>>>>>>>>> at<br>
>>>>>>>>>
com.paconsulting.pase.core.configuration.runconfig.Run.<init>(Run.java:31)<br>
>>>>>>>>> at<br>
>>>>>>>>>
com.paconsulting.pase.core.configuration.runconfig.definition.RunDefinition.materialize(RunDefinition.java:53)<br>
>>>>>>>>> at<br>
>>>>>>>>>
com.paconsulting.pase.core.configuration.runconfig.RunConfigExecutor$ScheduleExecutorWrapper.run(RunConfigExecutor.java:69)<br>
>>>>>>>>> ...<br>
>>>>>>>>><br>
>>>>>>>>> I'm sure I miss
something as this is basic functionality. Maybe I must<br>
>>>>>>>>> tell the kbase where
to load the classes...<br>
>>>>>>>>><br>
>>>>>>>>> Can someone point me
in the right direction?<br>
>>>>>>>>><br>
>>>>>>>>> Thanks,<br>
>>>>>>>>> Willem<br>
>>>>>>>>><br>
>>>>>>>>>
_______________________________________________<br>
>>>>>>>>> rules-users mailing
list<br>
>>>>>>>>> <a
moz-do-not-send="true"
href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
>>>>>>>>> <a
moz-do-not-send="true"
href="https://lists.jboss.org/mailman/listinfo/rules-users"
target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
>>>>>>>>><br>
>>>>>>>>
_______________________________________________<br>
>>>>>>>> rules-users mailing list<br>
>>>>>>>> <a
moz-do-not-send="true"
href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
>>>>>>>> <a
moz-do-not-send="true"
href="https://lists.jboss.org/mailman/listinfo/rules-users"
target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
>>>>
_______________________________________________<br>
>>>> rules-dev mailing list<br>
>>>> <a moz-do-not-send="true"
href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>
>>>> <a moz-do-not-send="true"
href="https://lists.jboss.org/mailman/listinfo/rules-dev"
target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
>> _______________________________________________<br>
>> rules-dev mailing list<br>
>> <a moz-do-not-send="true"
href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>
>> <a moz-do-not-send="true"
href="https://lists.jboss.org/mailman/listinfo/rules-dev"
target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
><br>
> _______________________________________________<br>
> rules-dev mailing list<br>
> <a moz-do-not-send="true"
href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>
> <a moz-do-not-send="true"
href="https://lists.jboss.org/mailman/listinfo/rules-dev"
target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
<br>
_______________________________________________<br>
rules-dev mailing list<br>
<a moz-do-not-send="true"
href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>
<a moz-do-not-send="true"
href="https://lists.jboss.org/mailman/listinfo/rules-dev"
target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
</div>
</div>
</blockquote>
</div>
<br>
</blockquote>
<br>
</body>
</html>