powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как передать клиенту задеплоенный класс
15 сообщений из 15, страница 1 из 1
Как передать клиенту задеплоенный класс
    #38044945
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задумались над тем, как передавать класс, не показывая его исходник клиенту. Простой способ - передать, а потом задеплоить - не подходит по понятной причине. Передавать готовый CACHE.DAT можно, но это не панацея, т.к. не решает проблему передачи обновлений.

Буду рад услышать мнения уважаемых коллег...
...
Рейтинг: 0 / 0
Как передать клиенту задеплоенный класс
    #38045073
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
могу рассказать как работаем мы, мы как раз распространяем только закрытый код
в кратце, наше приложение изначально разбито на несколько БД, это - несколько разного характера данные, временная бд, и 2 бд с кодом.
БД с кодом, одна с нашим кодом, другая с кодом клиента
при обновлении ПО поставляем нашу БД с кодом, статику к CSP и всякие дополнительные файлы.
Клиент при обновлении останавливает сервер подменяет БД с кодом статикой и прочие файлы, запускает сервер, запускает утилиту применения обновлений и продолжает работать.

для создания БД с кодом у нас есть специальное разработанное у нас ПО для сборки версии, который выгружает из системы контроля версий весь код импортирует в пустую БД, компилирует его, потом запускает Deploy для всех классов и программ, за исключением некоторых. потом эту БД складывает в нужную нам папку туда же все необходимое для обновления и все это передается на клиенту.
...
Рейтинг: 0 / 0
Как передать клиенту задеплоенный класс
    #38045092
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как передать клиенту задеплоенный класс
    #38045131
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, коллеги!

Вариант с передачей CACHE.DAT отпадает: у нас медицина, и работу останавливать, как правило, нельзя.

zip-unzip зашифрованного файла с последующим деплоем, пожалуй, тоже: временный файл несложно перехватить.

Попробую вариант, предложенный Е. Каратаевым, тем более, что большинство классов нехранимые. О результатах отпишусь.
...
Рейтинг: 0 / 0
Как передать клиенту задеплоенный класс
    #38045205
ser_shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Maslov,
мы тоже cache.dat поставляем.
Серьёзные изменения в версии всё равно требуют остановки системы.
Может быть дешевле (проще) поставлять версию как cache.dat, а небольшие изменения без остановки системы - открытым кодом...
То есть - какая степень защиты исходного кода требуется для удовлетворённости правообладателя (или для защиты от дурака)...
...
Рейтинг: 0 / 0
Как передать клиенту задеплоенный класс
    #38045242
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ser_shuAlexey Maslov,
мы тоже cache.dat поставляем.
Серьёзные изменения в версии всё равно требуют остановки системы.
Может быть дешевле (проще) поставлять версию как cache.dat, а небольшие изменения без остановки системы - открытым кодом...
То есть - какая степень защиты исходного кода требуется для удовлетворённости правообладателя (или для защиты от дурака)...
Мы обычно тоже так делаем, особенно после перехода на 2010 это стало еще проще, когда код зависимостей классов меньше требовать стал
...
Рейтинг: 0 / 0
Как передать клиенту задеплоенный класс
    #38045836
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Методом Каратаева вроде бы получилось. С версии 3.x, во времена которой писал Евгений, много воды утекло, и стало всё даже проще. Для Cache 2010.1 и выше в классе достаточно определить метод экспорта всех его объектников, примерно так:ClassMethod export(file="") As %Status [ ProcedureBlock = 1 ]
{
  set x=$this_"."
  for  {
    set x=$o(^rOBJ(x)) quit:$p(x,".",1,2)'=$this
    set array(x_".OBJ")=""
  }
  quit $system.OBJ.Export(.array, file)
}Для импорта подойдёт обычный $system.OBJ.Load(file).
...
Рейтинг: 0 / 0
Как передать клиенту задеплоенный класс
    #38045925
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исправляю ошибку. При наличии классов с именами вида pack.name1 и pack.name1.name2 метод pack.name1::export() должен экспортировать только OBJ-код класса pack.name1./// Export *.OBJ of this class
ClassMethod export(file="") As %Status [ ProcedureBlock = 1 ]
{
  set (x, x0)=$this_"."
  for  {
    set x=$o(^rOBJ(x))
    quit:'$isvalidnum($piece(x, x0, 2))
    set array(x_".OBJ")=""
  }
  quit $system.OBJ.Export(.array, file)
}
...
Рейтинг: 0 / 0
Как передать клиенту задеплоенный класс
    #38045971
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно не забывать еще, что есть OBJ типа pack.name.T1.
и еще когда мы перешли с 2008 на 2010.2, по старой привычке пытались отправить OBJ код клиенту, но на 2010 возникла одна проблема, при импорте каше ругался на неверный формат XML, такая проблема была только с OBJ кодом, мы разбираться не стали, перешли на экспорт/импорт исходника.
...
Рейтинг: 0 / 0
Как передать клиенту задеплоенный класс
    #38046147
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

Спасибо за напоминание!
Проблема при смене версии, понятное дело, могла случиться, т.к. версия словаря классов изменилась, а программы pack.name.T1 с ней тесно связаны.
...
Рейтинг: 0 / 0
Как передать клиенту задеплоенный класс
    #38046319
D_De1mos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы мажорные обновления поставляем через cache.dat, а срочные патчи через собственную систему патчей.
Ранее она заключалась в использовании ^%ROMF/^%RIMF из терминала, которые как раз выгружают объектный код. Но с этим методом были проблемы (web-сервисы не корректно передавались + нельзя было нормально отследить установку патчей).
В WRC посоветовали использовать класс %Studio.Project куда через AddItem добавляем нужные классы, затем DeployToGbl, указывая removesource = 1, после чего глобал экспортируется в файл + туда добавляется файл с мета информацией. На сервере клиента происходит обратная ситуация - грузим глобал, выполняем InstallFromGbl.
...
Рейтинг: 0 / 0
Как передать клиенту задеплоенный класс
    #38047332
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_De1mosВ WRC посоветовали использовать класс %Studio.Project куда через AddItem добавляем нужные классы, затем DeployToGbl, указывая removesource = 1...Отличная идея - спасибо!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как передать клиенту задеплоенный класс
    #39026830
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov,

А как добавить файл с метаинформацией?
...
Рейтинг: 0 / 0
Как передать клиенту задеплоенный класс
    #39026988
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
u78,

наверное, об этом стоит спросить у "того, кто это предложил", если он, конечно, читает этот топик, а также помнит, что было 3 года назад. Технологии, потребности и акценты ведь не стояли на месте...
...
Рейтинг: 0 / 0
Как передать клиенту задеплоенный класс
    #39053257
D_De1mos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
u78А как добавить файл с метаинформацией?
В прошлом посте был рассказан рецепт приготовления только самого бинарного патча
Далее сверху к нему в довесок идет xml, в которую пишется метаинформация по этому патчу и к ней крепится хэшированная контрольная сумма бинарника.
На следующем этапе эта пара пакуется в архив
К архиву в бонус идет батник, который:
1. Запускает терминал каше и передает ему этот путь к архиву, остальное происходит уже в каше
2. Распаковывает архив
3. Вычитывает всю нужную инфу
4. Выполняет проверки валидности патча (минимальная версия системы, на которую может ставтиться патч, имеются ли более новые патчи и т.д.), в том числе проверяется контрольная сумма бинарника
5. Импортируем бинарник аналогично его сборке
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как передать клиенту задеплоенный класс
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]