[jboss-jira] [JBoss JIRA] (DROOLS-243) CEP Operators in Rules failing to compile when getting PKG

Demian Calcaprina (JIRA) jira-events at lists.jboss.org
Tue Aug 27 15:10:26 EDT 2013


    [ https://issues.jboss.org/browse/DROOLS-243?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12799695#comment-12799695 ] 

Demian Calcaprina commented on DROOLS-243:
------------------------------------------

The cause of this problem is at reading the object from the pkg.

The operator from BeforeOperator class,
https://github.com/droolsjbpm/drools/blob/5.5.x/drools-core/src/main/java/org/drools/base/evaluators/BeforeEvaluatorDefinition.java#L202

is being returned as null when unmarshalling and thus is breaks.

The BeforeEvaluator has the operator, but, when unmarshalling it, it goes to this method
https://github.com/droolsjbpm/drools/blob/5.5.x/drools-core/src/main/java/org/drools/base/evaluators/Operator.java#L140
that will get it from the operators CACHE:
  public static Operator determineOperator(final String operatorId,
                                             final boolean isNegated) {
        Operator op = CACHE.get( getKey( operatorId,
                                         isNegated ) );
        return op;
    }

As it is not in the cache, it returns null.

Now, why it is not in the cache?

The BEFORE operator should be added to the CACHE in this static invocation:
https://github.com/droolsjbpm/drools/blob/5.5.x/drools-core/src/main/java/org/drools/base/evaluators/BeforeEvaluatorDefinition.java#L82

As in my app, and also in the test I posted, first creates the KnowledgeAgent, BeforeEvaluatorDefinition was never needed, nor from my app and more important, not from the PKG unmarshall mechanism. As is it not being references, the static block is not being executed.

If this is in some other place, for example (and this is what I did in the pull request I am sending), directly in BeforeEvaluator, as it is needed while unmarshalling, the static block will be called and things will work fine.
                
> CEP Operators in Rules failing to compile when getting PKG
> ----------------------------------------------------------
>
>                 Key: DROOLS-243
>                 URL: https://issues.jboss.org/browse/DROOLS-243
>             Project: Drools
>          Issue Type: Feature Request
>      Security Level: Public(Everyone can see) 
>    Affects Versions: 5.5.0.Final
>            Reporter: Demian Calcaprina
>            Assignee: Mark Proctor
>            Priority: Critical
>
> The issue is described in the following community post:
> http://drools.46999.n3.nabble.com/Problem-with-PKG-from-guvnor-tc4025687.html
> This code can reproduce it:
>     	KnowledgeBaseConfiguration config = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
>     	config.setOption( EventProcessingOption.STREAM );
>     	KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(config);
>     	
>     	KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory
> 				.newKnowledgeAgentConfiguration();
> 		aconf.setProperty("drools.agent.scanDirectories", "true");
> 		aconf.setProperty("drools.agent.scanResources", "true");
> 		aconf.setProperty("drools.agent.newInstance", "false");
>         KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent("MortgageAgent", kbase, aconf);
>         Resource changeset = ResourceFactory.newClassPathResource(
>                 "cs.xml");
>         kagent.applyChangeSet(changeset);
>         KnowledgeBase kbase2 = kagent.getKnowledgeBase();
> Creating a changeset that points to a binary package in guvnor, with a rules which uses the temporal operator. For example, somthing like this:
> when 
>         myfact: EventA( main > 21 ) over window:length (1) 
>         myfact2 : EventA( main <= 21 , this before myfact ) over window:length (2) 
> What is happening in that when it tries to compare the temporal distance, it will throw a NPE:
> when 
>         myfact: EventA( main > 21 ) over window:length (1) 
>         myfact2 : EventA( main <= 21 , this before myfact ) over window:length (2) 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the jboss-jira mailing list