Текущее время: Вс, июл 20 2025, 02:31

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Обмен статусами/сообщениями между двумя запущенными программами.
СообщениеДобавлено: Пт, ноя 20 2009, 12:08 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Как организовать обмен сообщениями между двумя запущенными программами разных пользователей?
По сути нужно синхронизировать их работу между собой. Напрмер, при запуске одна выставляет статус готовности и ожидает такого же статуса от другой проги. Соотвественно и вторая делает то, же. Потом обе изменяют статус на рабочий и начинают синхронно работать, периодически подкидывая друг другу инфу.
Я накидал пример на использовании shared buffer с циклическим опросом, но как то не очень красиво получилось и ненадежно. Иногда 2-я прога (запущенная позже) успевает прочитать статус готовности 1-й, выставить свой "Готов", а на следующем такте перейти в режим "Работа" сменив свой статус, при этом 1-я прога стормозив не успевает прочитать статус "Готов" от 2-й, а видит сразу "Работа", поэтому продолжает ожидать готовности.

Может знает кто какой-то стандартный интерфейс для подобных задач? Или что то свое понадежней?

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обмен статусами/сообщениями между двумя запущенными программами.
СообщениеДобавлено: Пт, ноя 20 2009, 12:30 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пн, май 14 2007, 13:05
Сообщения: 561
Откуда: Москва
Насчёт стандарта не знаю - возможно WF.
Как вариант использовать механизм блокировок - определить несколько записей, отвечающих за статус.
Каждая из программ ставит свои и проверяет чужие блокировки, в зависимости от состояния принимается решение.

_________________
Sapere aude!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обмен статусами/сообщениями между двумя запущенными программами.
СообщениеДобавлено: Пт, ноя 20 2009, 12:39 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
2 объекта блокировок (статуса):
1.Ожидание(готовность к работе). - Выставляется 1-й запущенной программой, снимается 2-й программой
2.Работа. - выставляется 2-й программой, если была снята блокировка с объекта 1.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обмен статусами/сообщениями между двумя запущенными программами.
СообщениеДобавлено: Пт, ноя 20 2009, 14:17 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
А может просто табличку из двух полей: ID1 ID2.
Первая запущенная программа создает запись: ID1 пусто. И по таймеру селектит пока не станет ID1 ID2. После этого уходит "в работу".
Вторая при запуске селектит запись с пустым ID2. Как находит - заполняет поле своим ID и сразу уходит в работу.
По выходу: обратная ситуация + возможно перекидывание ID2 в ID1, если первая программа "ушла".


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обмен статусами/сообщениями между двумя запущенными программами.
СообщениеДобавлено: Пт, ноя 20 2009, 16:22 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, июн 22 2005, 09:51
Сообщения: 208
Пол: Мужской
М.б. попробовать ABAP shared objects (если версия системы позволяет).



P.S. Если версия системы не позволяет, то игры с блокировками (как Удав предложил) имхо лучший выбор.

_________________
С уважением, В.Ш.
4.6C


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обмен статусами/сообщениями между двумя запущенными программами.
СообщениеДобавлено: Пт, ноя 20 2009, 16:52 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Спасибо всем!
Однако получается в любом случае приходится в цикле сканить некий параметр, что принципиально ничего не изменяет.
Я надеялся таки, что можно как то через некие события организовать...

Ладно, пока есть мысля изменить смысл статуса, типа:
"Я ждал тебя и дождался, пошел работать именно для тебя, не тормози, догоняй!" :)

Т.е. смысл в том, чтобы не просто работать, а работать авторизованно, для партнера.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обмен статусами/сообщениями между двумя запущенными программами.
СообщениеДобавлено: Пт, ноя 20 2009, 20:00 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Ср, ноя 01 2006, 22:58
Сообщения: 794
Откуда: Заарбрюкен
Пол: Мужской
А shared objects не позволяют вешать обработчики на event?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обмен статусами/сообщениями между двумя запущенными программами.
СообщениеДобавлено: Пт, ноя 20 2009, 21:59 
Президент
Президент

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

Если не секрет, какая задача у всех этих передвижений? Может имеет смысл сделать отдельно основную программу, а отдельно "запускалку"? Например, юзер А запускает запускалку, она обновляет поле А и заканчивает работу. Юзер Б тоже запускает запускалку, она видит, что А уже обновлено, обновляет Б, запускает основную программу и заканчивает работу. Основная программа перед окончанием работы чистит А и Б. И не надо никаких циклов и таймеров. Тут, конечно, тоже есть масса loopholes, но по крайней мере ничего не висит и не жрет ресурсы...

_________________
"One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important." Bertrand Russell


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обмен статусами/сообщениями между двумя запущенными программами.
СообщениеДобавлено: Пн, ноя 23 2009, 11:02 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, мар 09 2006, 10:12
Сообщения: 565
Откуда: Волгодонск
Пол: Мужской
Можно попробовать использовать блокировки базы данных:
допустим первая прога делает Select single for update *
то вторая прога когда выполнит Select single for update * будет висеть на этом операторе пока первая commit не сделает, вот и синхронизация

_________________
Изображение Попытка не пытка


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обмен статусами/сообщениями между двумя запущенными программами.
СообщениеДобавлено: Пн, ноя 23 2009, 14:48 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
А это не могут, например, быть два ФМ, которые запускаются в одной программе через new task а их состаяние и перезапуск оцениваются подпрограммами возврата? Входящими значениями для них могуь быть "слепки" их предыдущих состояний, хранимых в главной программе, persistent object или SHMO + данные возвращенные другим модулем?

_________________
Я слышу и забываю,
Я вижу и помню долго,
Я делаю и — понимаю.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обмен статусами/сообщениями между двумя запущенными программами.
СообщениеДобавлено: Пн, ноя 23 2009, 22:32 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Jelena написала:
А что если 4 пользователя запустят программу? Или если выполнение одной или обоих программ будет прервано? А если программа 1 завершится пока программа 2 еще работает и пользователь запустит еще одну копию программы 1? Как долго одна программа должна "ждать" другую? :?
Предполагается, что это могут быть, по крайней мере пока, только две проги двух разных пользователей. Точнее одна, но запущенная двумя юзерами одновременно. При прерывании одной проги, завершается и другая. Время ожидания не принципиально, я пока тестирую на 10 секунд.
Jelena написала:
Если не секрет, какая задача у всех этих передвижений?
Скоро выложу! :)

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обмен статусами/сообщениями между двумя запущенными программами.
СообщениеДобавлено: Пн, ноя 30 2009, 21:43 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
Под прерыванием имелось в виду abnormal termination. Например, если одна программа свалилась в dump, каким образом об этом узнает другая? :?

_________________
"One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important." Bertrand Russell


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

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


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

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


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

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