Как распространять и менять бизнес-логику во время выполнения? - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть опыт обмена бизнес-логикой в ​​.NET путем загрузки сборок и использования рефлексии для поиска реализованного интерфейса.Это позволило составлять поведение во время выполнения, просто распределяя и помещая файлы DLL в свой рабочий каталог.Как я могу добиться того же в Clojure?

Мне сообщили, что я могу скомпилировать свой проект Lein без компиляции AoT, с зависимостью от класса, который JVM будет искать, я полагаю из файлов JAR одного уровня?Я также видел, что в Java 9 есть решение под названием «Jigsaw», и есть другие проекты, такие как lein-jlink .Я не уверен, подходят ли они.

Я был бы очень признателен за статью / руководство, рабочий пример или несколько советов о том, как это сделать, так как я новичок в JVM.

Мой проект, в частности, будет включать «модуль» модели бизнес-логики, загружаемый при запуске, потребляющий сообщения и создающий сообщения в ответ.Это должно быть что-то вроде черного ящика.
Альтернативный маршрут, которого я хотел бы избежать, - это подход в стиле MQTT, где распределенные модули представляют собой относительно тяжелые автономные программы.

Спасибо за ваше время.

1 Ответ

0 голосов
/ 27 сентября 2019

В простой Java вы можете использовать тот же подход, что и в C #: вы разрабатываете ядро ​​и предоставляете интерфейсы, которые можно использовать для расширений, затем вы проверяете (используя отражение) Java CLASSPATH для реализации интерфейса в файлах Jar.(это та же идея с библиотеками DLL), но Java CLASSPATH является либо переменной среды, либо параметром командной строки со списком путей для поиска файлов JAR.

В Clojure у вас есть преимуществочто вы можете распространять библиотеки либо в виде скомпилированного кода, либо в виде исходного кода, который будет загружать среда выполнения Clojure.Я бы порекомендовал заглянуть в руководство Deps and CLI , потому что оно даст вам хорошее руководство о том, как:

  • добавлять зависимости в файл конфигурации с помощью различных средств, включая загрузку зависимостейиз частных репозиториев или даже из зависимости в git-репозитории с точным коммитом
  • запуск вашего кода с различными переключателями или конфигурацией, которые вам могут понадобиться, чтобы вы могли изменить поведение, отредактировав файл конфигурации
...