Re: [rules-users] uninformative rule parsing/compiling error - org.drools.rule.Rule cannot be cast to org.drools.rule.Query
I could not reproduce the issue.. could you submit a self-contained, obfuscated test case (DRL + classes)? I suspect you are leaving out some detail which is the real cause of the error Thanks Davide p.s. I used this mock class: package vrpn; public class TrackerRemote { public TrackerUpdate getUpdate() { return new TrackerUpdate(); } public class TrackerUpdate { } } and your rule, removing the message from the RHS On 07/30/2013 01:51 AM, De Rooms Brecht wrote: Op 24/07/2013 14:24, Davide Sottara schreef: Two clarifications first: 1) Which version are you using? I am using version 5.5 2) Is TrackerUpdate a static class inside TrackerRemote? In case, could you post the exact import statements you are using? the TrackerUpdate is not static, but it's a class defined within the TrackerUpdate class. /public class TrackerRemote public class TrackerUpdate { public java.util.Date msg_time; public int sensor; public double[] pos; public double[] quat; public TrackerUpdate() { /* compiled code */ } }/ The full imports and rule is: package derooms.be.testRule import derooms.be.server.predefinedtypes.Event; import derooms.be.test.Message; import vrpn.TrackerRemote; / rule TrackerRemote.TrackerUpdate when message:TrackerRemote.TrackerUpdate() then System.out.println(Tracker: + message); end/ Sorry that I didn't sent it earlier, I actually sent this e-mail already but it didn't came through. B Thanks Davide On 07/24/2013 02:14 PM, De Rooms Brecht wrote: Dear rules users, I am currently writing my own Drools-server since I wanted more control than the drools-execution server (and it never worked very well here) where I can send rules/facts over JMS/AQMP/STOMP. Rules which are sent are saved on the server-side in DRL files that are monitored. That way, I can debug easily by changing the sent files. However, when I sent the following code, the agent does not provide me with an error message at all and hangs: / //rule TrackerRemote.TrackerUpdate// //when// //message:TrackerRemote.TrackerUpdate()// //then// //System.out.println(Tracker: + message);// //end/ at first I thought it was because TrackerRemote.TrackerUpdate is not in that package anymore and thus unknown so I tried to send the rule listed below which gives me the nice and expected error: Unable to resolve ObjectType 'NotExistingType' : [Rule name='Foo'] /rule Foo// //when // //NotExistingType( bloe == test)// //then// //System.out.println(this should not work);// //end/ when I compile the rule myself with a KnowledgeBuilder: KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); InputStream is = new ByteArrayInputStream(drlstring.getBytes()); kbuilder.add( ResourceFactory.newInputStreamResource(is),ResourceType.DRL ); I receive the error: org.drools.rule.Rule cannot be cast to org.drools.rule.Query which I think doesn't tell me anything about the mistake I made in my rule, is this a Drools bug and should I post this somewhere? Kind Regards, De Rooms Brecht Full Stack: java.lang.ClassCastException: org.drools.rule.Rule cannot be cast to org.drools.rule.Query at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:175) at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:118) at org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:67) at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:84) at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:2706) at org.drools.compiler.PackageBuilder.compileRules(PackageBuilder.java:930) at org.drools.compiler.PackageBuilder.compileAllRules(PackageBuilder.java:839) at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:831) at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:467) at org.drools.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:673) at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:45) at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:34) at derooms.be.server.listeners.RulesListener.processMessage(RulesListener.java:33) at derooms.be.server.listeners.AbstractListener.onMessage(AbstractListener.java:35) at org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:1321) at org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:131) at org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:202) at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:129) at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:47) at
Re: [rules-users] uninformative rule parsing/compiling error - org.drools.rule.Rule cannot be cast to org.drools.rule.Query
Op 24/07/2013 14:24, Davide Sottara schreef: Two clarifications first: 1) Which version are you using? I am using version 5.5 2) Is TrackerUpdate a static class inside TrackerRemote? In case, could you post the exact import statements you are using? the TrackerUpdate is not static, but it's a class defined within the TrackerUpdate class. /public class TrackerRemote public class TrackerUpdate { public java.util.Date msg_time; public int sensor; public double[] pos; public double[] quat; public TrackerUpdate() { /* compiled code */ } }/ The full imports and rule is: package derooms.be.testRule import derooms.be.server.predefinedtypes.Event; import derooms.be.test.Message; import vrpn.TrackerRemote; / rule TrackerRemote.TrackerUpdate when message:TrackerRemote.TrackerUpdate() then System.out.println(Tracker: + message); end/ Sorry that I didn't sent it earlier, I actually sent this e-mail already but it didn't came through. B Thanks Davide On 07/24/2013 02:14 PM, De Rooms Brecht wrote: Dear rules users, I am currently writing my own Drools-server since I wanted more control than the drools-execution server (and it never worked very well here) where I can send rules/facts over JMS/AQMP/STOMP. Rules which are sent are saved on the server-side in DRL files that are monitored. That way, I can debug easily by changing the sent files. However, when I sent the following code, the agent does not provide me with an error message at all and hangs: / //rule TrackerRemote.TrackerUpdate// //when// //message:TrackerRemote.TrackerUpdate()// //then// //System.out.println(Tracker: + message);// //end/ at first I thought it was because TrackerRemote.TrackerUpdate is not in that package anymore and thus unknown so I tried to send the rule listed below which gives me the nice and expected error: Unable to resolve ObjectType 'NotExistingType' : [Rule name='Foo'] /rule Foo// //when // //NotExistingType( bloe == test)// //then// //System.out.println(this should not work);// //end/ when I compile the rule myself with a KnowledgeBuilder: KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); InputStream is = new ByteArrayInputStream(drlstring.getBytes()); kbuilder.add( ResourceFactory.newInputStreamResource(is),ResourceType.DRL ); I receive the error: org.drools.rule.Rule cannot be cast to org.drools.rule.Query which I think doesn't tell me anything about the mistake I made in my rule, is this a Drools bug and should I post this somewhere? Kind Regards, De Rooms Brecht Full Stack: java.lang.ClassCastException: org.drools.rule.Rule cannot be cast to org.drools.rule.Query at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:175) at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:118) at org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:67) at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:84) at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:2706) at org.drools.compiler.PackageBuilder.compileRules(PackageBuilder.java:930) at org.drools.compiler.PackageBuilder.compileAllRules(PackageBuilder.java:839) at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:831) at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:467) at org.drools.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:673) at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:45) at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:34) at derooms.be.server.listeners.RulesListener.processMessage(RulesListener.java:33) at derooms.be.server.listeners.AbstractListener.onMessage(AbstractListener.java:35) at org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:1321) at org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:131) at org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:202) at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:129) at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:47) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:722) ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users ___ rules-users
Re: [rules-users] uninformative rule parsing/compiling error - org.drools.rule.Rule cannot be cast to org.drools.rule.Query
Op 24/07/2013 14:24, Davide Sottara schreef: Two clarifications first: 1) Which version are you using? Version 5.4.0.Final 2) Is TrackerUpdate a static class inside TrackerRemote? In case, could you post the exact import statements you are using? It is a normal class inside TrackerRemote. public class TrackerRemote extends vrpn.VRPNDevice implements java.lang.Runnable { public class TrackerUpdate {... I imported: import vrpn.TrackerRemote; and used it as follows: rule TrackerRemote.TrackerUpdate when message:TrackerRemote.TrackerUpdate() then System.out.println(Tracker: + message); end Extra information: I have been trying to add type declarations in one file and import them in another and I get exactly the same error message. There I did this: package derooms.be.testRule declare TestEvent @typesafe(false) number : int message : String end and then a rule: package derooms.be.testRule rule TestEvent when event:TestEvent(message == doesDynamicEventTypeWork?) then System.out.println(Got Event: + event.data); end ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users
Re: [rules-users] uninformative rule parsing/compiling error - org.drools.rule.Rule cannot be cast to org.drools.rule.Query
Two clarifications first: 1) Which version are you using? 2) Is TrackerUpdate a static class inside TrackerRemote? In case, could you post the exact import statements you are using? Thanks Davide On 07/24/2013 02:14 PM, De Rooms Brecht wrote: Dear rules users, I am currently writing my own Drools-server since I wanted more control than the drools-execution server (and it never worked very well here) where I can send rules/facts over JMS/AQMP/STOMP. Rules which are sent are saved on the server-side in DRL files that are monitored. That way, I can debug easily by changing the sent files. However, when I sent the following code, the agent does not provide me with an error message at all and hangs: / //rule TrackerRemote.TrackerUpdate// //when// //message:TrackerRemote.TrackerUpdate()// //then// //System.out.println(Tracker: + message);// //end/ at first I thought it was because TrackerRemote.TrackerUpdate is not in that package anymore and thus unknown so I tried to send the rule listed below which gives me the nice and expected error: Unable to resolve ObjectType 'NotExistingType' : [Rule name='Foo'] /rule Foo// //when // //NotExistingType( bloe == test)// //then// //System.out.println(this should not work);// //end/ when I compile the rule myself with a KnowledgeBuilder: KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); InputStream is = new ByteArrayInputStream(drlstring.getBytes()); kbuilder.add( ResourceFactory.newInputStreamResource(is),ResourceType.DRL ); I receive the error: org.drools.rule.Rule cannot be cast to org.drools.rule.Query which I think doesn't tell me anything about the mistake I made in my rule, is this a Drools bug and should I post this somewhere? Kind Regards, De Rooms Brecht Full Stack: java.lang.ClassCastException: org.drools.rule.Rule cannot be cast to org.drools.rule.Query at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:175) at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:118) at org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:67) at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:84) at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:2706) at org.drools.compiler.PackageBuilder.compileRules(PackageBuilder.java:930) at org.drools.compiler.PackageBuilder.compileAllRules(PackageBuilder.java:839) at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:831) at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:467) at org.drools.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:673) at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:45) at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:34) at derooms.be.server.listeners.RulesListener.processMessage(RulesListener.java:33) at derooms.be.server.listeners.AbstractListener.onMessage(AbstractListener.java:35) at org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:1321) at org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:131) at org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:202) at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:129) at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:47) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:722) ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users