Расширенные методы загрузки внешних библиотек в http-сервисах OneScript

Публикация № 836133

Разработка - Языки и среды - OneScript

web http-сервисы OneScript 1Scroipt

5
В статье описаны расширенные методы загрузки внешних библиотек в http-сервисах OneScript на примере механизма фоновых заданий.

Введение

Наверное, нет смысла описывать преимуществ использования библиотек в программировании, а также выгод получаемых от использования переносимого кода, поэтому приступим к делу.

В настоящее время и OneScript и 1С:Предприятия имеют развитые средства для обеспечения повторного использования кода, однако они недостаточно совместимы между собой, что приводит к необходимости редактирования кода при переносе между этими платформами. Первым шагом, для улучшения переносимости кода между платформами, стала реализация концепции общих модулей в http-сервисах OneScript, однако опыт, полученный мною при написании демонстрационных конфигураций показал, что периодически возникают ситуации, когда различия в реализации концепции библиотек дают о себе знать, что приводит к непроизводительной трате ресурсов на адаптацию кода под разные платформы. В качестве примера, можно привести фрагмент кода, иллюстрирующий использование библиотеки фоновых заданий из этой статьи.

Вроде бы все неплохо, однако для доступа к менеджеру фоновых заданий, сначала необходимо создать экземпляр объекта соответствующего типа, в то время, как в 1С:Предприятие уже существует глобальное свойство с именем ФоновыеЗадания. Эти различия приводят к примерно следующим конструкциям:

 
// Создаем объект менеджера фоновых заданий. Только для OneScript

//<OneScript>

ФоновыеЗадания = Новый МенеджерФоновыхЗаданийWeb;

//<!OneScript>

 

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

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

О том, что из этого получилось – читайте ниже.  

Как это работает

Процесс загрузки внешних библиотек происходит при начальной инициализации “движка” OneScript, который в дальнейшем будет выполнять Ваш код, поэтому рассмотрим его подробнее.

Инициализация происходит в несколько этапов:

Создание и инициализация “движка”

На этом этапе создается экземпляр среды выполнения, которая содержит стандартные функции OneScript и не содержит каких-либо внешних библиотек или компонентов.

Загрузка сборок внешних библиотек

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

Создание глобальных свойств для общих модулей

На этом этапе, в экземпляре среды выполнения создаются пустые глобальные свойства с именами, соответствующими именам общих модулей. Данный этап необходим для разрешения зависимости между модулями при их дальнейшей компиляции.

Создание глобальных свойств для внешних библиотек

Собственно данный этап как и предыдущий необходим для того, чтобы среда выполнения могла скомпилировать код общих модулей и других частей приложения с учетом межмодульных и прочих зависимостей.

Компиляция и установка значений глобальных свойств общих модулей

На данном этапе происходит компиляция исходного кода общих модулей и скомпилированные объекты присваиваются соответствующим глобальным свойствам.

Создание и установка глобальных свойств внешних библиотек

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

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

Реализация

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

Поскольку у нас могут быть уже готовые компоненты, написанные ранее, нам необходимо создать класс-загрузчик, который должен реализовывать нижеследующий интерфейс:

   

 
public interface ILibraryAsPropertiesLoader

{
    // Метод возвращает список имен глобальных свойств, которые будут созданы
    List<string> GetPropertiesNamesForInjecting(string info);
    // Метод создает экземпляры свойств и присваевает свойствам соответствующие значения
    void AssignPropertiesValues(HostedScriptEngine engine);

}

 

 

В случае фоновых заданий, код класса-загрузчика выглядит следующим образом:

  

 
public class BackgroundJobs : ILibraryAsPropertiesLoader
{
    public List<string> GetPropertiesNamesForInjecting(string info)
    {
        List<string> propNames = new List<string>();
        propNames.Add("ФоновыеЗадания");
        
        return propNames;
    }

    public void AssignPropertiesValues(HostedScriptEngine engine)
    {
        engine.EngineInstance.Environment.SetGlobalProperty("ФоновыеЗадания", new WebBackgroundJobsManagerImpl());
    }
}

Собственно все, что он делает – это создает экземпляр класса МенеджерФоновыхЗаданийWeb (WebBackgroundJobsManager) и устанавливает значение свойства ФоновыеЗадания равным ссылке на экземпляр класса.

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

Настройка и использование

Для использования внешних библиотек, а также возможности их загрузки, соответствующие сборки необходимо поместить в папку Bin, Вашего приложения. В дальнейшем предположим, что мы имеем две сборки (dll). Одну – содержащую внешнюю компоненту и вторую, которая реализует класс-загрузчик.

Сначала, необходимо включить сборку, которая содержит внешнюю компоненту в список сборок, которые будут загружены в среду выполнения. Это можно сделать, добавив нижеследующую строку в раздел appSettings, файла web.config Вашего web-приложения:

<add key="ИмяСборки" value="attachAssembly" />

Далее, нам необходимо дать приложению информацию о классах-загрузчиках. Это можно сделать, добавив строки следующего вида:

<add key="propertiesInjector;WebBackgroundJobs;OneScript.HTTPService.BackgroundJobs" value="" />

Где:

propertiesInjector – признак того, что информация относится к загрузчику свойств.

WebBackgroundsJob – имя сборки-загрузчика (в нашем конкретном случае загрузчик находится в сборке внешней компоненты).

OneScript.HTTPService.BackgroundJobs – имя типа класса-загрузчика.

value – произвольная строка, которая передается в функцию получения списка свойств.

После подключения сборки WebBackgroundJobs вышеуказанным способом, код использования этого механизма в OneScript становится практически идентичным коду платформы 1С:Предприятие:

 

 
// Запускаем фоновые задания на выполнение

МассивПараметров = Новый Массив;
МассивПараметров.Добавить(1);
МассивПараметров.Добавить("1.txt");

ФоновыеЗадания.Execute("Тестовый.ТестовоеФЗ", МассивПараметров, "Ключ1", "Описание1");

МассивПараметров = Новый Массив;
МассивПараметров.Добавить(1);
МассивПараметров.Добавить("2.txt");

ФоновыеЗадания.Execute("Тестовый.ТестовоеФЗ", МассивПараметров);

// Получаем все выполняющиеся задания
МассивЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания();

// Ожидаем завершения выполнения запущеных заданий
ФоновыеЗадания.ОжидатьЗавершения(МассивЗаданий);

// Продолжаем выполнение

 

 То есть по сути он стал полностью переносимым на уровне синтаксиса. Поскольку определение класса внешней компоненты также известно системе, код в старом стиле будет также работоспособным.

Заключение

С использованием данного подхода можно реализовать модульное добавление необходимых объектов платформы 1С:Предприятие в OneScript, при этом обеспечив переносимость кода. В следующей статье планируется описать механизм обработок, созданный по данной схеме. Также, при необходимости, реализацию этих компонентов можно поменять (скажем, не нравится Вам текущая реализация механизма фоновых заданий), без необходимости пересборки остальных частей web-приложения.

P.S.

Хочу выразить благодарность Андрею Овсянкину за помощь при адаптации библиотек к платформе 1.0.20.

5

Специальные предложения

Избранное Подписка Сортировка: Древо
В этой теме еще нет сообщений.
Оставьте свое сообщение

См. также

АИТП. Подсистема взаимодействия с рабочими серверами OneScript 20

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) OneScript

В статье описан механизм взаимодействия конфигурации АИТП с рабочими серверами OneScript.

22.05.2019    2881    blackhole321    33       

1Script.Web. Интернет-приложения на языке 1С 119

Статья Программист Нет файла v8 Бесплатно (free) WEB OneScript

Запросы рынка таковы, что любое современное клиент-серверное приложение должно иметь веб-интерфейс. Почему бы не писать такие приложения на языке 1С? Андрей Овсянкин расскажет о возможностях разработки веб-приложений на базе 1Script, рассмотрит перспективы этого направления и в качестве демонстрации покажет «боевое» веб-приложение на новом движке – кроссплатформенную консоль администрирования парка кластеров 1С.

20.05.2019    11469    Evil Beaver    32       

Создание высокодоступной фермы рабочих серверов OneScript в ОС Centos 7 12

Статья Системный администратор Программист Нет файла Linux Бесплатно (free) OneScript

В статье описана методика создания высокодоступной фермы рабочих серверов OneScript, для конфигурации АИТП.

14.05.2019    2490    blackhole321    0       

Разворачиваем рабочий сервер OneScript для конфигурации АИТП 26

Статья Системный администратор Программист Нет файла v8 Linux Бесплатно (free) OneScript

В статье описана методика развертывания рабочего сервера OneScript для конфигурации АИТП, на ОС CentOS 7.

09.05.2019    3598    blackhole321    0       

Хостим OneScript.Web приложение (heroku) 18

Статья Программист Нет файла Бесплатно (free) OneScript

Развертывание oscript.web в heroku.

19.12.2018    3837    pallid    4       

Хостим OneScript.Web приложение 28

Статья Программист Нет файла Бесплатно (free) OneScript

Удобная возможность для размещения своего OneScript.Web приложение, это завернуть его в docker. Остается вопрос: где разместить контейнер, сделать это можно на vscale или DO, но хочется упростить и не делать установку самого docker на хосте. Один из вариантов - это сервис now https://zeit.co/.

04.07.2018    5651    pallid    3       

Добавляем онлайн-чат в web-приложение OneScript 16

Статья Программист Нет файла v8 Бесплатно (free) OneScript

В статье рассмотрено подключение онлайн-чата к web-приложению на основе http-сервисов OneScript

24.06.2018    5304    blackhole321    1       

Сказ про то, как я DevOps-ом занимался (OneScript, Deployka, Jenkins) 112

Статья Системный администратор Программист Нет файла v8 1cv8.cf ИТ-компания Бесплатно (free) OneScript DevOps Jenkins

Решаем задачу: автоматизировать обновление тестовых баз 1С из хранилища конфигурации при появлении в нём новых изменений. Данная статья родилась в муках хождения по граблям и поиска безопасного форватора среди подводных камней. Изложение постарался представить в виде инструкции для новичка, в которой собрал всё, с чем пришлось столкнуться. Сам я не DevOps-ер, ни на что не претендую, просто делюсь опытом :)

17.06.2018    14760    stas_ganiev    33       

Макеты в http-сервисах OneScript 10

Статья Программист Нет файла v8 Бесплатно (free) OneScript

В статье описана библиотека, реализующая механизм макетов в http-сервисах OneScript, аналогично платформе 1С:Предприятие.

03.06.2018    5743    blackhole321    1       

Перечисления в http-сервисах OneScript 7

Статья Программист Нет файла v8 Бесплатно (free) OneScript

В статье описывается библиотека, реализующая механизм перечислений в http-сервиах OneScript, аналогичный механизму платформы 1С:Предприятие

03.06.2018    5386    blackhole321    13       

Обработки в http-сервисах OneScript 11

Статья Системный администратор Программист Нет файла Бесплатно (free) OneScript

В статье описана библиотека, реализующая механизм обработок в http-сервисах OneScript.

25.05.2018    5568    blackhole321    0       

Сборка, тестирование, доставка приложения на onescript с помощью gitlab-ci 33

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) OneScript

Сборка, тестирование, доставка приложения на onescript с помощью gitlab-ci на примере портирования на onescript функции daСклонение.

14.05.2018    9416    pallid    3       

OneScript в облаке или Развертываем http-сервис OneScript на хостинге 23

Статья Программист Нет файла Бесплатно (free) OneScript

В статье описан процесс развертывания web-приложения, созданного на базе http-сервисов OneScript на бесплатном хостинге.

05.05.2018    7142    blackhole321    0       

TMSSQL - работа с базами данных MS SQL Server в скриптах на OneScript и из командной строки 56

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) OneScript

Представляю вашему вниманию библиотеку TMSQL для работы с базами данных на MS SQL Server. Библиотека подключается в качестве модуля или класса в скрипты, написанные на OneScript, а также может работать как независимое консольное приложение.

26.04.2018    11123    Tavalik    22       

Развертывание http-сервиса OneScript на Raspberry Pi 26

Статья Системный администратор Нет файла Бесплатно (free) OneScript

В статье описан процесс настройки, а также процесс развертывания http-сервиса (web-приложения) OneScript на Raspbian (Raspberry Pi 2).

23.04.2018    8329    blackhole321    10       

Создаем свою библиотеку для OneScript 145

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) OneScript

Как упаковать свою библиотеку в пакет? Что такое загрузчик и зачем он нужен? Как вообще создать свою библиотеку? Разбираемся на примере.

06.03.2018    16707    nixel    35       

Развертывание http-сервиса (web-приложения) OneScript на Ubuntu Server 16.04 43

Статья Системный администратор Программист Нет файла Ubuntu Бесплатно (free) OneScript

В статье описан процесс настройки сервера, а также процесс развертывания http-сервиса (web-приложения) OneScript на Ubuntu Server 16.04

04.03.2018    12540    blackhole321    14       

Обзор имеющихся библиотек OneScript 298

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) OneScript

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

14.11.2017    30551    nixel    85       

Начало работы с OneScript 135

Статья Системный администратор Программист Нет файла Бесплатно (free) OneScript

Краткая инструкция по установке и начале работы с OneScript. Пишу потому что сам много шишек набил, пока нашел все инструменты. В статье рассмотрены: 1) Установка OneScript. 2) Установка редактора кода. 3) Настройка редактора кода под OneScript. 4) Запуск скриптов из редактора кода 5) Полезные ссылки

18.10.2017    30210    DmitrySinichnikov    50       

С чего начать разработку скриптов на OneScript? Первые шаги 154

Статья Программист Нет файла Бесплатно (free) OneScript

После моего доклада на INFOSTART 2017 EVENT COMMUNITY ко мне многие обращались с таким вопросом: с чего начать разработку скриптов на OneScript? В этой статье привожу набор ссылок и некий порядок действий (как его вижу я) для людей, не знакомым с этим инструментом.

11.10.2017    21588    Tavalik    12       

Вебинтерфейс для OneScript и 1С 27

Статья Программист Нет файла v8 Россия Windows Бесплатно (free) OneScript

Пример создания вебинтерфейса для OneScript с использованием библиотеки UfaScript.osb

30.06.2017    11119    andreosh    7       

OneScript и Ajax. POST-запрос и мои дальнейшие планы с фантазиями о будущем 11

Статья Программист Нет файла v8 Россия Бесплатно (free) OneScript

Моя библиотека для OneScript (версия 3.0 от 09.06.2017 см.GitHab UfaScript) https://github.com/andreosh/UfaScript теперь позволяет посылать POST-запросы на сервер без использования сторонних библиотек типа jquery.

09.06.2017    15535    andreosh    3       

Как сделать OneScript объектно-ориентированным 10

Статья Программист Нет файла Россия Бесплатно (free) OneScript

Описание метода создания объектов на OneScript и метода передачи функции в качестве параметра.

16.04.2017    6758    andreosh    7