Как загрузить все файлы DRL и содержимое строки DRL за один сеанс kie

Я хотел бы загрузить все файлы DRL и сгенерировать DRL с помощью шаблона правил в одном сеансе kie через Kie Helper. С помощью приведенной ниже конфигурации я могу загрузить отдельный файл DRL и содержимое DRL (String). Но я хотел бы загрузить все файлы DRL и содержимое drl (String) одновременно.

        KieHelper kieHelper = new KieHelper();
        kieHelper.addContent(drl, ResourceType.DRL);
kieHelper.addResource(ResourceFactory.newClassPathResource("com/sample/Rules.drl"), ResourceType.DRL);
        Results results = kieHelper.verify();
        KieSession session = kieHelper.build().newKieSession();

Если я использую это, kieHelper.addResource (ResourceFactory.newClassPathResource ("com / sample / *. Drl"), ResourceType.DRL); Я получаю исключение "Файл не найден".

Пожалуйста, дайте мне знать, как этого добиться. Я не хочу создавать сеанс kie через контейнер пути к классам Kie. Ценю любую помощь в этом!


person Suresh    schedule 26.12.2017    source источник
comment
Почему бы вам не вызывать kieHelper.addResource(...) повторно для всех ваших файлов .drl?   -  person laune    schedule 26.12.2017
comment
Привет, Лауне, я согласен, что это один из вариантов, но есть некоторые файлы DRL, созданные во время выполнения. Я бы тоже хотел загрузить их. Я пробовал этот kieHelper.addResource (ResourceFactory.newClassPathResource (*. Drl), ResourceType.DRL); Но он ищет фактическое имя файла. Есть ли способ загрузить * .drl с помощью Kie Helper?   -  person Suresh    schedule 27.12.2017
comment
Наверняка вы знаете, как сопоставить имена файлов из каталога с именем пути, содержащим подстановочный знак?   -  person laune    schedule 27.12.2017
comment
Вы имеете в виду это? kieHelper.addResource (ResourceFactory.newClassPathResource (com / sample / *. drl), ResourceType.DRL); Это не работает.   -  person Suresh    schedule 27.12.2017
comment
Вам нужно будет написать несколько строк кода Java.   -  person laune    schedule 27.12.2017
comment
Для этого я использовал Spring PathMatchingPatternResolver. ClassLoader cl = Thread.currentThread (). GetContextClassLoader (). GetClass (). GetClassLoader (); ResourcePatternResolver resolver = новый PathMatchingResourcePatternResolver (cl); Resource [] resources = resolver.getResources (путь к классам *: com / sample / rules / ** / *. Drl); для (Ресурсный ресурс: ресурсы) {kieHelper.addResource (ResourceFactory.newFileResource (resource.getFile ()), ResourceType.DRL); }   -  person Suresh    schedule 27.12.2017


Ответы (1)


Если кто-то ищет решение, воспользуйтесь этим. Я использовал Spring PathMatchingPatternResolver для загрузки всех файлов DRL.

 private static KieHelper getResourceFolderFiles (String folder, KieHelper kieHelper) throws IOException {  
    ClassLoader cl =  Thread.currentThread().getContextClassLoader().getClass().getClassLoader();
        ResourcePatternResolver resolver = new
       PathMatchingResourcePatternResolver(cl);     
Resource[] resources = resolver.getResources("classpath*:com/sample/rules/**/*.drl") ;  
for (Resource resource: resources){
    kieHelper.addResource(ResourceFactory.newFileResource(resource.getFile()),
   ResourceType.DRL);
        }   }   return kieHelper;


  }
person Suresh    schedule 27.12.2017