Поддержка расширений

LUWRAIN поддерживает механизм расширений, который позволяет гибко дополнять функциональность системы. Расширения LUWRAIN бывают двух  типов:

  • расширения в виде компилированных jar-файлов;
  • расширения на языке JavaScript.

Расширения (extensions) не следует путать с пакетами (packs). Эти термины тесно связаны, но выполняют разные функции. Расширение — это специальное понятие ядра LUWRAIN, которое служит задаче загрузке новых структур (приложений, команд и пр.). Пакеты, в свою очередь, явным образом ядром системы не воспринимаются, а являются набором файлов с дополнительной информацией и предназначены для доставки расширений на компьютер пользователя с удалённого узла. Другими словами, пакеты — это специально оформленные дистрибутивы, которые помогают в удобной форме загружать расширения со всеми необходимыми файлами и удалять их. Один пакет может содержать внутри несколько расширений, причём разных типов.

Порядок загрузки расширений

По способу загрузки расширения LUWRAIN делятся на две категории: доверенные расширения из состава дистрибутива и пользовательские расширения. Пользовательские расширения могут быть получены из непроверенных источников, поэтому для них добавляются дополнительные механизмы ограничения круга операций, которые они могут выполнять.

В дистрибутивах LUWRAIN присутствуют два каталога для раширений: jar и lib. При запуске системы содержимое этих каталогов сканируется, и загружаются все файлы с расширением *.jar. Подразумевается, что в каталоге jar находятся файлы, которые собраны из исходных текстов проекта, а в lib присутствуют сторонние библиотеки, полученные от других разработчиков в виде бинарных файлов. Фактических различий в порядке обработки файлов между этими каталогами нет, разделение существует сугубо только для удобства и по историческим причинам. При обработке каждого файла с расширением *.jar проверяется его манифест и присутствие секции org/luwrain в нём. Если в этой секции есть значение Extensions, то предполагается, что оно содержит список классов, удовлетворяющих интерфейсу org.luwrain.core.Extension, каждый из которых воспринимается как класс расширения для загрузки. Если такое значение в манифесте отсутствует, то файл загружается просто как вспомогательная библиотека, классы которой будут доступны другим библиотекам.

Пользовательские расширения сохраняются в каталоге extensions в каталоге с пользовательскими данными LUWRAIN (AppData\Roaming\Luwrain в Microsoft Windows и .luwrain в GNU/Linux в домашних каталогах). Внутри каталога extensions просматриваются все подкаталоги, и внутри каждого из них проверяется присутствие подкаталога jar (т. е. )проверяются каталоги extensions/*/jar. Далее все файлы*.jarзагружаются по тем же правилам, что и загрузка расширений из каталоговjarиlibв дистрибутиве LUWRAIN, за исключением правила, что группа файлов внутри каждого пользовательского каталогаjar``` загружается со своим отдельным загрузчиком классов (class loader) (на будущее, пока эта возможность отключена).. Подобное правило требуется для обеспечения контроля полномочий расширения и возможности "горячей" выгрузки расширения.

© 2012–2024 Проект LUWRAIN
Дизайн от Strash