Search code examples
javadrools

Unable to build new drools rule, error: Rule Compilation error : !!! is exceeding the 65535 bytes limit


I have created 1032 new successed rules. When I want to created 1033 there was some error.

I was build new Rules with Knowledge builder in Drools. This is my code

public KnowledgeBuilder buildRules(String ruleContent){
        KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
        knowledgeBuilder.add(ResourceFactory.newInputStreamResource(new ByteArrayInputStream(ruleContent.getBytes())),
                ResourceType.DRL);

        // check the builder for errors
        if (knowledgeBuilder.hasErrors()) {
            LOGGER.error(knowledgeBuilder.getErrors().toString());
            throw new RuntimeException("Unable to build new drools rule, error: " + knowledgeBuilder.getErrors());
        }

        return knowledgeBuilder;
    }

I expect to create 1033 rules. (Have been success for 1032 rules) But the I get an error output :

Unable to build new drools rule, error: Rule Compilation error : [Rule name='PROM_APPLYCHECKER_2103_G00002382']
    com/indolotte/drools/pm/Rule_PROM_APPLYCHECKER_2103_G00002382191827255.java (6:877) : The code of method defaultConsequence(KnowledgeHelper, OptimizerOrderReqEVO, FactHandle)
is exceeding the 65535 bytes limit

Solution

  • 65535 is the maximum size of a method in java, and there's no way around it. You need to make your ruleContent shorter.

    (split it into serveral maybe? Not familiar with how Droos works. but "Rule_PROM_APPLYCHECKER_2103_G00002382191827255" is definitely too big.)