org.drools.core.common.DefaultFactHandle cannot be cast to org.drools.core.common.EventFact

233 views
Skip to first unread message

nishapa...@gmail.com

unread,
Apr 25, 2016, 3:45:29 PM4/25/16
to Drools Usage

I am testing below rule which is deployed on the kie server 6.3 running on tomcat 8, and I am getting following error on the catalina.out when i execute an command.

I have displayed my rule and java code below.




25-Apr-2016 19:19:04.430 SEVERE [http-nio-8082-exec-8] org.kie.server.services.impl.KieContainerCommandServiceImpl.callCon
tainer Error calling container 'EvtContainer'
 java.lang.ClassCastException: org.drools.core.common.DefaultFactHandle cannot be cast to org.drools.core.common.EventFact
Handle

        at org.drools.core.reteoo.WindowNode.assertObject(WindowNode.java:166)
        at org.drools.core.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:60)
        at org.drools.core.reteoo.ObjectTypeNode.propagateAssert(ObjectTypeNode.java:298)
        at org.drools.core.phreak.PropagationEntry$Insert.execute(PropagationEntry.java:93)
        at org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:96)
        at org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:69)
        at org.drools.core.impl.StatefulKnowledgeSessionImpl.flushPropagations(StatefulKnowledgeSessionImpl.java:1993)
        at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1289)
        at org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1294)
        at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1281)
        at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1265)
        at org.drools.core.command.runtime.rule.FireAllRulesCommand.execute(FireAllRulesCommand.java:105)
        at org.drools.core.command.runtime.rule.FireAllRulesCommand.execute(FireAllRulesCommand.java:34)

at org.drools.core.command.runtime.BatchExecutionCommandImpl.execute(BatchExecutionCommandImpl.java:153)
        at org.drools.core.command.runtime.BatchExecutionCommandImpl.execute(BatchExecutionCommandImpl.java:69)
        at org.drools.core.impl.StatefulKnowledgeSessionImpl.execute(StatefulKnowledgeSessionImpl.java:738)
        at org.drools.core.impl.StatefulKnowledgeSessionImpl.execute(StatefulKnowledgeSessionImpl.java:712)
        at org.kie.server.services.impl.KieContainerCommandServiceImpl.callContainer(KieContainerCommandServiceImpl.java:1
13)
        at org.kie.server.services.impl.KieContainerCommandServiceImpl.executeScript(KieContainerCommandServiceImpl.java:1
41)
        at org.kie.server.remote.rest.common.resource.KieServerResource.executeCommands(KieServerResource.java:57)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:168)
        at org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:269)
        at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:227)
        at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:216)
        at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:541)
        at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:523)
        at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:125)
        at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:20
8)
        at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)
        at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.kie.server.services.impl.security.web.CaptureHttpRequestFilter.doFilter(CaptureHttpRequestFilter.java:42)

 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:614)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
        at org.kie.integration.tomcat.JACCValve.invoke(JACCValve.java:101)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1526)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1482)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)





Rule:



1. | package org.demo;
2. |
3. | import java.lang.Number;
4. |
5. | rule "rule002"
6. |     dialect "java"
7. |     when
8. |         Event( region == "AZ" ) over window:length (10)
9. |     then
10. |         System.out.println("Hi from rule 002");
11. | end


Java code :


KieServicesConfiguration config = KieServicesFactory.newRestConfiguration(serverUrl, user, password);
config.setMarshallingFormat(MarshallingFormat.XSTREAM);
//config.setOption( EventProcessingOption.STREAM );
KieServicesClient client = KieServicesFactory.newKieServicesClient(config);
commands = new ArrayList<GenericCommand<?>>();
InsertObjectCommand insertObjectCommand = new InsertObjectCommand();
insertObjectCommand.setOutIdentifier("message");
insertObjectCommand.setObject((Event)factObj);
GetObjectsCommand getObjectsCommand = new GetObjectsCommand();
getObjectsCommand.setOutIdentifier("objects");
FireAllRulesCommand fireAllRulesCommand = new FireAllRulesCommand(5);
commands.add(insertObjectCommand);
commands.add(fireAllRulesCommand);
commands.add(getObjectsCommand);
BatchExecutionCommand command = new BatchExecutionCommandImpl(commands);
String xStreamXml = BatchExecutionHelper.newXStreamMarshaller().toXML(command);
KieServerCommand call = new CallContainerCommand(containerId, xStreamXml); 
List<KieServerCommand> cmds = Arrays.asList(call);
CommandScript script = new CommandScript(cmds);
    System.out.println(script.getCommands());
    ServiceResponsesList reply = client.executeScript(script);  
    for (ServiceResponse<? extends Object> r : reply.getResponses()) {
            System.out.println(r.getResult());
             if (r.getResult() != null) {
                ExecutionResultImpl result = (ExecutionResultImpl) BatchExecutionHelper.newXStreamMarshaller().fromXML((String) r.getResult());
                 // getting the same object that was sent but with filled in values
                msg = (DDSEvent) result.getResults().get(d);
                 // Objects From insert(fact0) in rule. The problem is that they are staying and multiplying there in Drools, don't know yet how to manage it. ToDo.
                 ArrayList<Object> objects = (ArrayList<Object>) result.getResults().get("objects");    
               
                 ListIterator<Object > iter = objects.listIterator();
                 while(iter.hasNext())
                 {
                  Object temp = iter.next();
                  if(temp instanceof EventData )
                  {
                    sResult = (EventData) temp;
                  }
                 }
                
                 if (sResult.getRuleSource() != null) {sResult.getRuleSource();}else{System.out.println("IT's null");};
                 System.out.println("=====================");
                 System.out.println(sResult.getDescription());
                 System.out.println("=====================");
                 System.out.println(sResult.getSeverity());
                
     }
     else
                 System.out.println("Empty result...?");
     }


   

Reply all
Reply to author
Forward
0 new messages