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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Google [Bot]


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

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