AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 27.10.2009, 12:47   #1  
SHiSHok is offline
SHiSHok
Участник
SHiSHok's Avatar
Дети Юза
 
219 / 103 (4) +++++
Join Date: 28.07.2005
Location: Донецк
одновременный запуск 2 runBuf - ошибка
ax3sp3:
столкнулся с проблемкой:
есть серверный класс запускающий код через runbuf , при одновременном запуске в 2х клиентах runbuf функций использующих одинаковые таблицы (другое не проверял) оба runbuf слетают.
для примера сделал 2 серверных стат метода (переменные обозвал по разному) и вызывал из 2х клиентов - результат слёт обоих:

первый
X++:
s1='str convert1(str _input, Common _parent, Args _args)\n'+
'{\n'+
'inventtable      itab1;\n'+
';\n'+
'    return _input;\n'+
'}\n';
второй
X++:
s1='str convert(str input, Common parent, Args args)\n'+
'{\n'+
'inventtable      itab;\n'+
';\n'+
'    return input;\n'+
'}\n';
может кто сталкивался и знает решение?
__________________
--- SHiSHok
Old 27.10.2009, 13:09   #2  
SHiSHok is offline
SHiSHok
Участник
SHiSHok's Avatar
Дети Юза
 
219 / 103 (4) +++++
Join Date: 28.07.2005
Location: Донецк
все гораздо проще: просто 2 runbuf в одном процессе на сервере не исполняются нормально. на клиенте все хорошо (в разных процессах),а на сервере даже не важно что табличные переменные одного типа объявлены (переменные усугубляют).
__________________
--- SHiSHok
Old 27.10.2009, 13:10   #3  
Lemming is offline
Lemming
Участник
Lemming's Avatar
 
1,144 / 343 (14) ++++++
Join Date: 20.04.2004
Location: Москва, Чайнатаун в Люблино
Blog Entries: 10
Что-то не очень понятен тайный смысл таких методов? Или это предельно упрощенные для теста и все равно падает?

p.s. Кстати, если перед строковой константой поставить собаку "@", то можно избавиться от ручного перевода строк \n. Удобно например писать SQL запросы без многочисленных конкатенаций.

X++:
str     strtest = @"

    InventTable     inventTable;

    SELECT * FROM SOMETABLE
        WHERE A = B;

    return inventTable;
    ";
    ;

    info(strtest);
This post has been rated by: Zabr (2).
Old 27.10.2009, 13:13   #4  
SHiSHok is offline
SHiSHok
Участник
SHiSHok's Avatar
Дети Юза
 
219 / 103 (4) +++++
Join Date: 28.07.2005
Location: Донецк
Quote:
Originally Posted by Lemming View Post
Что-то не очень понятен тайный смысл таких методов?
можно слееп добавить чтоб в ранбуфе подольше висел. именно тестовый "пустой" кусок .
__________________
--- SHiSHok
Old 27.10.2009, 13:27   #5  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Join Date: 03.12.2001
Да, не работает одновременно. Я когда то давно писал про это. Если очень нужно - используйте XppCompiler - он избавлен от этого недостатка.

Хотя, на мой взгляд, динамический код - зло и бледная попытка обойтись в языке без полноценных макросов.
Old 27.10.2009, 14:43   #6  
SHiSHok is offline
SHiSHok
Участник
SHiSHok's Avatar
Дети Юза
 
219 / 103 (4) +++++
Join Date: 28.07.2005
Location: Донецк
у нас активно используется в Группах Определения (sysExpImpGroup)

так что, никак нельзя этот "ньюанс" победить?
__________________
--- SHiSHok

Last edited by SHiSHok; 27.10.2009 at 14:46.
Old 27.10.2009, 23:52   #7  
SHiSHok is offline
SHiSHok
Участник
SHiSHok's Avatar
Дети Юза
 
219 / 103 (4) +++++
Join Date: 28.07.2005
Location: Донецк
Есть вообщето идея:
перебросить исполнение runbuf на клиента, только вот какой трафик это породит и какие временные затраты будут? Но по крайней мере ситуация непредвиденного "слёта" решена - каждый клиент свой runbuf сам исполнят.
__________________
--- SHiSHok
Old 28.10.2009, 17:04   #8  
SHiSHok is offline
SHiSHok
Участник
SHiSHok's Avatar
Дети Юза
 
219 / 103 (4) +++++
Join Date: 28.07.2005
Location: Донецк
решение проблемы запусков 2 runbuf в одном процессе
Идею реализовал и оттестировал. вкратце:
сделал стат методы класса test, из джобиков вызывал testRunBufCS изменяя модификатор client/server метода RunBufT (метод вызывает тестовый runBuf).
testRunBufCS1 - серверная реализация тестового механизма для тестирования 2х одновременных серверных исполнений.

Результаты одновременного запуска testRunBufCS и testRunBufCS1 в разных клиентах:
1) при запуске тестов с модификаторами server как и ожидалось произошел сбой.
2) в RunBufT ставим модификатор client - при запуске тестов все отработало без ошибок (1 runBuf исполнился в серверном процессе, 2-й в клиентском)

Результаты задержек при исполнении runBuf на клиенте:
1) RunBufT на сервере - 18 сек
2) RunBufT на клиенте - 37 сек

Т.о. задержка при передаче исполнения клиенту возрастает в 2 раза при данной реализации вызова runBuf.

X++:
static server void testRunBufCS()
{
    inventTable it;
    str         s;
    int         cnt;
;
    timeStamp();

    while select it
    {
        s=test::RunBufT(it.ItemId, it);
        cnt++;
    }

    info(int2str(cnt));
    timeStamp();
}
X++:
static client str RunBufT(str _s, common _c)
{
    str     expr;
;
expr=@'str convert2(str _s, common _c)
{
    inventTable         it = _c;
    inventItemGroup     iig = inventItemGroup::find(it.ItemGroupId);
;
    return _s+iig.Name;
}';
   return runbuf(expr,_s,_c);
}
X++:
static server void testRunBufCS1()
{
    inventTable it;
    str         s;
    int         cnt;
    str         expr;
;
expr=@'str convert2(str _s, common _c)
{
    inventTable         it = _c;
    inventItemGroup     iig = inventItemGroup::find(it.ItemGroupId);
;
    return _s+iig.Name;
}';
    timeStamp();

    while select it
    {
        s=runbuf(expr,it.ItemId, it);
        cnt++;
    }

    info(int2str(cnt));
    timeStamp();
}

PS: к слову, при реализации RunBufT как static server str RunBufT(str _s, common _c, common _c1, common _c2 ), время выполнеия у меня следующее: 47 / 79 (сервер/клиент соответственно)
__________________
--- SHiSHok
Old 29.10.2009, 23:29   #9  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Join Date: 03.12.2001
Quote:
Идею реализовал и оттестировал. вкратце:
Я, кстати, не понял, почему предложенный мною вариант с XppCompiler Вам не подошел. Он прекрасно работает на сервере и избавлен он недостатков runBuf.
Old 30.10.2009, 10:06   #10  
SHiSHok is offline
SHiSHok
Участник
SHiSHok's Avatar
Дети Юза
 
219 / 103 (4) +++++
Join Date: 28.07.2005
Location: Донецк
Quote:
Originally Posted by db View Post
Я не знаю ваш это случай или нет, но память при работе с XppComiler (он же runbuf) течет замечательно.
утечка памяти в аксапта

таки течет в XppComiler, а runBuf нет.
__________________
--- SHiSHok
Tags
runbuf

 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Ошибка (?) при печати приходного ордера в DAX 4.0 SP2 Ivanhoe DAX: Программирование 7 19.01.2021 14:13
Ошибка в логе при установке клиента AX 2009 sao DAX: Администрирование 9 04.02.2010 11:56
Ошибка в формате числа. 36AC DAX: Программирование 7 19.10.2006 10:04
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Функция RunBuf Maxim Gorbunov DAX: База знаний и проекты 0 27.11.2001 17:15

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 11:24.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.