NullPointerExceptions при использовании нескольких одновременных сеансов KieSession - PullRequest
0 голосов
/ 29 июня 2018

Мы сталкиваемся с NullPointerExceptions во время StatelessKieSession, когда он внутренне располагается в среде параллельного выполнения.

java.lang.NullPointerException в org.drools.core.impl.StatelessKnowledgeSessionImpl.dispose (StatelessKnowledgeSessionImpl.java:395) в org.drools.core.impl.StatelessKnowledgeSessionImpl.execute (StatelessKnowledgeSessionImpl.java:355)

Пример кода

 public class ThreadExecutor {

    public static void main(String[] args){
        ExecutorService submitAsyncPool = Executors.newCachedThreadPool();

        Callable<Boolean> processor = new WorkerThread();
        for (int i = 0; i < 50; i++) {
            submitAsyncPool.submit(processor);
        }
    }
}

    public class WorkerThread implements Callable<Boolean> {

    @Autowired
    StatelessKieSession kieSession;

    @Override
    public Boolean call() {

        // some code snippet

        kieSession.execute(input);

        // some code snippet

    }
}

Это происходит только при одновременном выполнении правил. StatelessKieSessio n совместно используется несколькими потоками и выполняется одновременно. Другой вариант - создавать StatelessKieSession каждый раз, что я считаю очень дорогой операцией.

Похоже, это дефект движка правил? Есть ли обходной путь?

Примечание: мы используем Drools 6.x

1 Ответ

0 голосов
/ 18 июля 2018

Я могу устранить вышеуказанную ошибку, обновив версию drools с 6.1.0.Final до 6.2.0.Final

Тот же тестовый пример, который я выполнил с 6.2.0.Final, и проблем не найдено.

Звучит немного странно, но это решило наши проблемы.

Я надеюсь, что это может помочь другим.

...