2016-10-26 2 views
1

У меня есть процессор NiFi, который использует библиотеку redislabs/luascript для загрузки сценария lua и выполнения его на экземпляре redis.NiFi-1.0.0 - load lua script

Дело в том, что я не знаю, где именно положить сценарий lua, чтобы загрузить его с помощью luascript lib. Я поместил его в файл nifi_proc/src/main/resources/lua/name.lua, но получаю исключение IOException.

У меня есть служба поддержки nifi для подключения к redis и процессор, который использует эту услугу.

Моя структура проекта: . ├── nifi-bundle-nar │   └── target ├── nifi-redis_cservice │   ├── src │   └── target ├── nifi-redis_cservice-api │   ├── src │   └── target ├── nifi-redis_cservice-api-nar │   └── target ├── nifi-redis_cservice-nar │   └── target ├── redis-processors │   ├── src │   └── target └── target └── maven-shared-archive-resources

Любые идеи?

+0

В каком модуле (-ах) содержится зависимость LuaScript? – mattyb

ответ

2

Вы можете поделиться более подробной информацией о том, как процессор взаимодействует с библиотекой? Вы проходите в InputStream, вызывая исполняемый файл и т. Д.?

Убедитесь, что ваш ресурс находится в модуле JAR проекта вашего процессора, а не в модуле NAR процессора или в родительском (включая оба). Вы должны иметь возможность использовать getResourceAsStream («lua/name.lua») из объекта класса, который находится в JAR-файле процессора (например, сам класс процессора). Я не уверен, что вам нужно сделать после этого, можно ли поделиться исходным кодом или более подробными сведениями об этом?

EDIT (ответ на комментарии ниже): fromResource() использует LuaScript's classloader, чтобы получить ресурс, мне интересно, если он не имеет доступа к Nifi-прок или ресурсов контроллера услуг. Похоже, что если пользователю не нужно указывать местоположение сценария, необходимо, чтобы служба диспетчера загружалась в сценарии Lua. Таким образом, альтернативой может быть использование класса обслуживания контроллера для getResourceAsStream, чтение всего этого в String и использование fromSource вместо fromResource.

+0

На самом деле у меня есть служба управления nifi и nifi-proc, которая использует эту службу для подключения к экземпляру redis. Я поместил /lua/myscript.lua в папку ресурсов, службы и proc, resources. У меня есть метод, который загружает сценарий lua в redis и управляет хешами. Затем я хочу выполнить lua-скрипт с некоторыми ключами/args. – bsd

+0

luascript Lib: https://github.com/RedisLabs/luascript Способ загрузки: 'частное LuaScript Lua (String FPATH, String redis_uri) бросает IOException { TRY { Ls = LuaScript.fromResource (FPATH, redis_uri); } catch (IOException ie) { throw ie; } return ls; } ' – bsd