|
Как передать клиенту задеплоенный класс
|
|||
---|---|---|---|
#18+
Задумались над тем, как передавать класс, не показывая его исходник клиенту. Простой способ - передать, а потом задеплоить - не подходит по понятной причине. Передавать готовый CACHE.DAT можно, но это не панацея, т.к. не решает проблему передачи обновлений. Буду рад услышать мнения уважаемых коллег... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2012, 09:33 |
|
Как передать клиенту задеплоенный класс
|
|||
---|---|---|---|
#18+
могу рассказать как работаем мы, мы как раз распространяем только закрытый код в кратце, наше приложение изначально разбито на несколько БД, это - несколько разного характера данные, временная бд, и 2 бд с кодом. БД с кодом, одна с нашим кодом, другая с кодом клиента при обновлении ПО поставляем нашу БД с кодом, статику к CSP и всякие дополнительные файлы. Клиент при обновлении останавливает сервер подменяет БД с кодом статикой и прочие файлы, запускает сервер, запускает утилиту применения обновлений и продолжает работать. для создания БД с кодом у нас есть специальное разработанное у нас ПО для сборки версии, который выгружает из системы контроля версий весь код импортирует в пустую БД, компилирует его, потом запускает Deploy для всех классов и программ, за исключением некоторых. потом эту БД складывает в нужную нам папку туда же все необходимое для обновления и все это передается на клиенту. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2012, 11:30 |
|
Как передать клиенту задеплоенный класс
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2012, 11:39 |
|
Как передать клиенту задеплоенный класс
|
|||
---|---|---|---|
#18+
Спасибо, коллеги! Вариант с передачей CACHE.DAT отпадает: у нас медицина, и работу останавливать, как правило, нельзя. zip-unzip зашифрованного файла с последующим деплоем, пожалуй, тоже: временный файл несложно перехватить. Попробую вариант, предложенный Е. Каратаевым, тем более, что большинство классов нехранимые. О результатах отпишусь. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2012, 12:01 |
|
Как передать клиенту задеплоенный класс
|
|||
---|---|---|---|
#18+
Alexey Maslov, мы тоже cache.dat поставляем. Серьёзные изменения в версии всё равно требуют остановки системы. Может быть дешевле (проще) поставлять версию как cache.dat, а небольшие изменения без остановки системы - открытым кодом... То есть - какая степень защиты исходного кода требуется для удовлетворённости правообладателя (или для защиты от дурака)... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2012, 12:44 |
|
Как передать клиенту задеплоенный класс
|
|||
---|---|---|---|
#18+
ser_shuAlexey Maslov, мы тоже cache.dat поставляем. Серьёзные изменения в версии всё равно требуют остановки системы. Может быть дешевле (проще) поставлять версию как cache.dat, а небольшие изменения без остановки системы - открытым кодом... То есть - какая степень защиты исходного кода требуется для удовлетворённости правообладателя (или для защиты от дурака)... Мы обычно тоже так делаем, особенно после перехода на 2010 это стало еще проще, когда код зависимостей классов меньше требовать стал ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2012, 13:04 |
|
Как передать клиенту задеплоенный класс
|
|||
---|---|---|---|
#18+
Методом Каратаева вроде бы получилось. С версии 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). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2012, 18:01 |
|
Как передать клиенту задеплоенный класс
|
|||
---|---|---|---|
#18+
Исправляю ошибку. При наличии классов с именами вида 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) } ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2012, 19:07 |
|
Как передать клиенту задеплоенный класс
|
|||
---|---|---|---|
#18+
Нужно не забывать еще, что есть OBJ типа pack.name.T1. и еще когда мы перешли с 2008 на 2010.2, по старой привычке пытались отправить OBJ код клиенту, но на 2010 возникла одна проблема, при импорте каше ругался на неверный формат XML, такая проблема была только с OBJ кодом, мы разбираться не стали, перешли на экспорт/импорт исходника. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2012, 20:04 |
|
Как передать клиенту задеплоенный класс
|
|||
---|---|---|---|
#18+
DAiMor, Спасибо за напоминание! Проблема при смене версии, понятное дело, могла случиться, т.к. версия словаря классов изменилась, а программы pack.name.T1 с ней тесно связаны. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2012, 23:39 |
|
Как передать клиенту задеплоенный класс
|
|||
---|---|---|---|
#18+
Мы мажорные обновления поставляем через cache.dat, а срочные патчи через собственную систему патчей. Ранее она заключалась в использовании ^%ROMF/^%RIMF из терминала, которые как раз выгружают объектный код. Но с этим методом были проблемы (web-сервисы не корректно передавались + нельзя было нормально отследить установку патчей). В WRC посоветовали использовать класс %Studio.Project куда через AddItem добавляем нужные классы, затем DeployToGbl, указывая removesource = 1, после чего глобал экспортируется в файл + туда добавляется файл с мета информацией. На сервере клиента происходит обратная ситуация - грузим глобал, выполняем InstallFromGbl. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2012, 07:02 |
|
Как передать клиенту задеплоенный класс
|
|||
---|---|---|---|
#18+
D_De1mosВ WRC посоветовали использовать класс %Studio.Project куда через AddItem добавляем нужные классы, затем DeployToGbl, указывая removesource = 1...Отличная идея - спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2012, 16:31 |
|
Как передать клиенту задеплоенный класс
|
|||
---|---|---|---|
#18+
Alexey Maslov, А как добавить файл с метаинформацией? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2015, 10:29 |
|
Как передать клиенту задеплоенный класс
|
|||
---|---|---|---|
#18+
u78, наверное, об этом стоит спросить у "того, кто это предложил", если он, конечно, читает этот топик, а также помнит, что было 3 года назад. Технологии, потребности и акценты ведь не стояли на месте... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2015, 13:01 |
|
Как передать клиенту задеплоенный класс
|
|||
---|---|---|---|
#18+
u78А как добавить файл с метаинформацией? В прошлом посте был рассказан рецепт приготовления только самого бинарного патча Далее сверху к нему в довесок идет xml, в которую пишется метаинформация по этому патчу и к ней крепится хэшированная контрольная сумма бинарника. На следующем этапе эта пара пакуется в архив К архиву в бонус идет батник, который: 1. Запускает терминал каше и передает ему этот путь к архиву, остальное происходит уже в каше 2. Распаковывает архив 3. Вычитывает всю нужную инфу 4. Выполняет проверки валидности патча (минимальная версия системы, на которую может ставтиться патч, имеются ли более новые патчи и т.д.), в том числе проверяется контрольная сумма бинарника 5. Импортируем бинарник аналогично его сборке ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2015, 20:52 |
|
|
start [/forum/topic.php?fid=39&msg=38045073&tid=1556593]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 286ms |
total: | 425ms |
0 / 0 |