optaplanner с aws lambda

Я использую optaplanner для решения проблемы планирования. Я хочу вызвать код планирования из AWS Lambda (я знаю, что максимальное время выполнения Lambda составляет 5 минут, и это нормально для этого приложения)

Для этого я создал проект maven с двумя модулями: модуль-1: код оптимизации планирования модуль-2: лямбда-обработчик aws (вызывает код планирования из модуля-1)

Когда я запускаю свои тесты в IntelliJ Idea для модуля-1 (с кодом optaplanner), он работает нормально.

Когда я вызываю лямбда-функцию, я получаю следующее исключение:

java.lang.ExceptionInInitializerError:    
java.lang.ExceptionInInitializerError
java.lang.ExceptionInInitializerError
 at org.kie.api.internal.utils.ServiceRegistry.getInstance(ServiceRegistry.java:27)
 ...
Caused by: java.lang.RuntimeException: Child services [org.kie.api.internal.assembler.KieAssemblers] have no parent
 at org.kie.api.internal.utils.ServiceDiscoveryImpl.buildMap(ServiceDiscoveryImpl.java:191)
 at org.kie.api.internal.utils.ServiceDiscoveryImpl.getServices(ServiceDiscoveryImpl.java:97)
 ...

Я включил следующую зависимость в файл maven: org.optaplanner optaplanner-core 7.7.0.Final

Также проверил, что в файле jar есть drools-core, kie-api, kei-internal, drools-compiler. Кто-нибудь знает, в чем может быть проблема?


person mluser    schedule 10.07.2018    source источник
comment
Для чего бы это ни стоило (не много), EasyScoreCalculator и IncrementalScoreCalculator не будут иметь этой проблемы.   -  person Geoffrey De Smet    schedule 10.07.2018
comment
@GeoffreyDeSmet эта ошибка возникает, когда я инициализирую SolverFactory из XMLResource, задолго до этапа расчета баллов.   -  person mluser    schedule 11.07.2018
comment
Вы на 100% уверены? Я ожидаю, что это произойдет в solverFactory.buildSolver(), а не в SolverFactory.createFromXmlResource(). В первом случае другие калькуляторы не затрагиваются.   -  person Geoffrey De Smet    schedule 12.07.2018
comment
@GeoffreyDeSmet да, вы правы, это происходит в solverFactory.buildSolver()   -  person mluser    schedule 12.07.2018


Ответы (2)


Похоже на ошибку в слюнях при работе в среде с ограниченным доступом, такой как AWS-лямбда. Пожалуйста, создайте JIRA и свяжите ее здесь.

person Geoffrey De Smet    schedule 10.07.2018
comment
Спасибо за ваш ответ @Geoffrey. Я создал jira (issues.jboss.org/browse/DROOLS-2726) проездной билет. Это что-то, что можно исправить раньше, или вы предлагаете какое-то обходное решение? - person mluser; 11.07.2018
comment
видимо еще не исправили. - person sansa; 18.03.2019
comment
Я улучшил отчет об ошибке, так что он отправляется к ребятам из ядра. Временное решение: не используйте расчет баллов Drools. - person Geoffrey De Smet; 19.03.2019

Я получал ту же ошибку при попытке запустить толстую банку, содержащую пример проекта OptaPlanner. Небольшая отладка показала, что проблема заключалась в том, что services был пуст при вызове ServiceDiscoveryImpl::buildMap; Я использовал первый META-INF/kie.conf в сборке, и в результате в этом файле отсутствовали сервисы. Естественно, ваши тесты будут работать правильно, потому что путь к классу будет содержать все зависимости (то есть несколько отдельных файлов META-INF/kie.conf), а не сборку, которую вы пытались выполнить на лямбда-выражении.

Вместо этого объединение этих файлов (используя соответствующую стратегию слияния в сборке) устраняет проблему и выглядит уместно, учитывая, как они загружаются ServiceDiscoveryImpl. Обновленный JAR правильно работает как лямбда-выражение AWS.

Примечание. Я использовал значение по умолчанию scoreDrl из примера v7.12.0.Final Cloud Balancing.

person Luis Woods    schedule 07.10.2018
comment
Не могли бы вы дать подробное руководство о том, какие шаги вы предприняли для решения этой проблемы? - person Sebastiandg7; 28.06.2019