Текущее время: Вс, июл 27 2025, 22:03

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Как заставить background job не лезть без очереди?
СообщениеДобавлено: Пн, июн 12 2006, 18:33 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
Задача: одна программа запускает другую программу как background job (с немедленным выполнением) с помощью:

Code:
CALL FUNCTION 'JOB_OPEN'
SUBMIT ...
CALL FUNCTION 'JOB_CLOSE'


Все ничего, но бывает, что 2 юзера одновременно запускают программу и, соответственно, одновременно стартуют две jobs. Вопрос: как сделать, чтобы они начинались одна после другой, а не одновременно?

На mainframe была такая фича как "job queue" - можно было программы ставить в эту очередь и они выполнялись одна за другой. В SAP что-то ничего подобного не нашла. Подходы с predecessor/successor не канают, т.к. в большинстве случаев программа запускается в одном экземпляре. Также почитала про всякие ENQUEUE/DEQUEUE, но не вижу, как это можно сюда прикрутить. Заставлять юзеров ждать пока уже начатая job завершиться - нельзя. Она может минут 10-15 работать, народ озвереет.

Что делать?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июн 12 2006, 18:51 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Пн, сен 06 2004, 11:43
Сообщения: 1551
Пол: Мужской
А в чем проблема ? Пусть программы параллельно выполняются.......
Есть вариант - запуск задания по событию...........

_________________
Ex ipso fonte bibere
Цитата:
Abyssus abyssum invocat
Dies diem docet
Ducunt volentem fata, nolentem trahunt

Estote prudentes sicut serpentes


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июн 12 2006, 19:57 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
Проблема в том, что запускаемая в бэкграунде программа печатает документы. Документы должны быть напечатаны в строгой последовательности (требование юзеров), а если jobs работают параллельно, то документы смешиваются: т.е. один документ из одной job, другой - из другой.

А что конкретно вы предлагаете изобразить с помощью события? Заканчивать им job, типа "путь свободен"? А как же тогда быть с самым первым запуском?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июн 13 2006, 09:43 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, мар 25 2005, 11:46
Сообщения: 282
Откуда: SPb
Ну так, пусть при запуске идет проверка на работающее задание, в зависимости от статуса разная логика...

_________________
Лучше сделать и пожалеть, чем не сделать и потом жалеть.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июн 13 2006, 10:55 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Пн, сен 06 2004, 11:43
Сообщения: 1551
Пол: Мужской
Jelena написала:
А что конкретно вы предлагаете изобразить с помощью события? Заканчивать им job, типа "путь свободен"? А как же тогда быть с самым первым запуском?


Две программы по-любому не могут стартовать одновременно......
Дальше алгоритм примерно такой:
1. Программа стартует и проверяет есть ли еще такое задание среди уже выполняющихся.......
2. Если есть - перепланирует себя на на старт по событию.....
3. По своему окончанию выдает событие типа "путь свободен".....

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

Кстати (в 4.6 смотрю) там есть запуск одного задания по окончанию другого...... Здесь главное будет получить последнее задание из очереди и сказать вашему, что стартовать только по окончании указанного

_________________
Ex ipso fonte bibere
Цитата:
Abyssus abyssum invocat
Dies diem docet
Ducunt volentem fata, nolentem trahunt

Estote prudentes sicut serpentes


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июн 13 2006, 12:51 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 14:35
Сообщения: 1519
Откуда: В ВЕЧНОМ БАНЕ
vvvictor написал:
Кстати (в 4.6 смотрю) там есть запуск одного задания по окончанию другого...... Здесь главное будет получить последнее задание из очереди и сказать вашему, что стартовать только по окончании указанного

С очередью могут быть грабли в том плане что там толи 12 толи 10 всего может быть событий в цепочке... в общем количество точно не помною, но такое ограничение естью


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июн 13 2006, 20:22 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
vvvictor написал:
Дальше алгоритм примерно такой:
1. Программа стартует и проверяет есть ли еще такое задание среди уже выполняющихся.......
2. Если есть - перепланирует себя на на старт по событию.....
3. По своему окончанию выдает событие типа "путь свободен".....

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


Опробовала этот вариант. Работает отлично для двух jobs, но после этого (т.е. если одна уже работает, а в это время еще 2 и больше лезут) уже действительно без "базок" не обойтись, иначе по событию запускаются все jobs, которые его ждут на тот момент.

vvvictor написал:
Кстати (в 4.6 смотрю) там есть запуск одного задания по окончанию другого...... Здесь главное будет получить последнее задание из очереди и сказать вашему, что стартовать только по окончании указанного


Тут получилась интересная петрушка. Добыла я jobcount от той job, что уже крутиться (обзовем last_jobcount), и попробовала запустить следующую с тем условием, чтобы она стартовала после ее окончания:

Code:
CALL FUNCTION 'JOB_CLOSE'
  EXPORTING
  jobcount               = jobcount
  jobname                = jobname
  predjob_checkstat      = 'Y'
  pred_jobcount          = last_jobcount
  pred_jobname           = jobname.


Не работает-с (у нас 6.2.). Запись в TBTCO создается, но в SM37 ничего не видно (даже как scheduled) и вторая job никогда не запускается. Может я чего упустила?

Кстати, тут есть большой раздел SAP Help по поводу background processing.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июн 13 2006, 21:17 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
А может маленький workflow построить?

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 14 2006, 11:02 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 14:35
Сообщения: 1519
Откуда: В ВЕЧНОМ БАНЕ
Jelena написала:
Не работает-с (у нас 6.2.). Запись в TBTCO создается, но в SM37 ничего не видно (даже как scheduled) и вторая job никогда не запускается. Может я чего упустила?

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 14 2006, 14:00 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Пн, сен 06 2004, 11:43
Сообщения: 1551
Пол: Мужской
Uukrul написал(а):
Jelena написала:
Не работает-с (у нас 6.2.). Запись в TBTCO создается, но в SM37 ничего не видно (даже как scheduled) и вторая job никогда не запускается. Может я чего упустила?

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

Это действительно надо попробовать....... Пока практически так планировать не пытался....... Возможно, что уже работающее задание подцепить не удастся......

Есть еще один вариант:
Выполняется одна программа(которая стартовала первая)........
Остальные просто накидывают в базу по export-у специфичные для пользователя данные
Программа по-очереди по import-у поднимает эти данные из базы и исполняет себя с новыми параметрами........
Затем эти данные запуска удаляются............

_________________
Ex ipso fonte bibere
Цитата:
Abyssus abyssum invocat
Dies diem docet
Ducunt volentem fata, nolentem trahunt

Estote prudentes sicut serpentes


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 14 2006, 14:05 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Пн, сен 06 2004, 11:43
Сообщения: 1551
Пол: Мужской
Сергей Королев написал:
А может маленький workflow построить?

А поподробнее ?
Учитывая, что заранее не известно кто когда запустит и т.д. К тому-же разные пользователи, которые выполняют параллельные функции......
Не получится "конкуренции" как со стартом Job-ов по событию окончания ? (WF я, пока, знаком в общих чертах)


Хотя если подумать.....

_________________
Ex ipso fonte bibere
Цитата:
Abyssus abyssum invocat
Dies diem docet
Ducunt volentem fata, nolentem trahunt

Estote prudentes sicut serpentes


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 14 2006, 14:37 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
vvvictor написал:
Сергей Королев написал:
А может маленький workflow построить?

А поподробнее ?
Учитывая, что заранее не известно кто когда запустит и т.д. К тому-же разные пользователи, которые выполняют параллельные функции......
Не получится "конкуренции" как со стартом Job-ов по событию окончания ? (WF я, пока, знаком в общих чертах)


Хотя если подумать.....

Теоретически можно, но возни много получится, овчинка выделки может и не стоит:
  • сделать объект блокировки
  • сделать бизнес объект с методом, который сначала блокирует объект блокировки, а потом вызывает указанную программу
  • в методе предусмореть exception с "Temporary" ошибкой, которую выдавать при неудачной попытке блокировки нашего объекта.
  • сделать стандартную задачу со ссылкой на этот метод

По идее потоки с "Temporary" ошибками перезапускаются несколько раз с заданным интервалом, так что должны автоматом выстроиться в очередь.
Вообще-то, может достаточно одного объекта блокировки... Но тогда придется в саму программу встраивать механизм "откладывания" - какой-нибудь WAIT при неудачной блокировке.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 14 2006, 16:07 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 16:09
Сообщения: 202
qRFC с destionition NONE


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 14 2006, 16:15 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Snegurenok написал(а):
qRFC с destionition NONE

И правда...

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 14 2006, 16:18 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Ср, сен 22 2004, 08:42
Сообщения: 1079
Откуда: Москва
Пол: Мужской
Snegurenok написал(а):
qRFC с destionition NONE

Это если один сервер для фоновых заданий, а если их несколько видимо опрос всех фоновиков устраивать придется.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB