Ls агенты: проблема запуска с сервера на сервере

Тема в разделе "Lotus - Программирование", создана пользователем AlexyeNov, 19 фев 2010.

  1. AlexyeNov

    AlexyeNov Гость

    Репутация:
    0
    Имею Сервер1, на котором юзер запускает агент1 через RunOnServer.
    Агент1 запускает через RunOnServer Агент2, находящийся на другом сервере.
    Возникает ошибка "Cannot access foreign servers when running on a server"

    Оба агента - Lotus Script-овые, агенты (NotesAgent) получаются через NotesDataBase.GetAgent.

    В настройках безопасности, в разделе Трастед в обоих серверных документах прописаны данные серваки.

    Версия сервера : 7.0.4

    Кто знает, как разрулить ? :)

    В инете бегло порылся, пишут что нужно юзать Java либо HTTP... не шибко хотелось бы.
    Пысы: оба агента получают параметры NoteID на вход, нужно передачу параметра сохранить.
     
  2. ToxaRat

    ToxaRat Чёрный маг
    Команда форума Lotus team

    Репутация:
    0
    Регистрация:
    6 ноя 2007
    Сообщения:
    3.171
    Симпатии:
    21
    AlexyeNov
    жуткая конструкция
    я бы лучше пулял в другой сервер док-запрос, и там бы агент САМ стартовал, чем вот тот дергаться
     
  3. AlexyeNov

    AlexyeNov Гость

    Репутация:
    0

    Насколько в таком случае удастся сохранить синхронность и оперативность вызовов?
    Агент1 должен получить результат работы Агента2 (документ-отчёт передаётся на вход Агенту2)

    В целом задача такая:
    Пользователь работает на Сервер1,
    Пользователь не имеет доступа к Сервер2
    Пользователь имеет полномочия на запуск агентов на Сервер1
    Сервер1 имеет доступ на Сервер2
    Пользователю требуется выполнить агент на Сервер2 и получить результат работы

    ТАким образом, наиболее очевидной видится как раз указанная мной в первом сообщении схема.

    Вместе с юзером это:

    Юзер -> Сервер1 { CreateDocument.NoteID 1 -> Agent1.RunOnServer(NoteId 1) } -> Сервер2 {CreateDocument.NoteID 2 -> Agent2.RunOnServer(NoteId 2) -> NoteId 2 -> } -> Сервер1 {Перекладываем результат в NoteId 1}-> Юзер сотрит на то, что лежит в NoteID 1, получает информацию

    Юзер - видит Сервер1, но не видит Сервер2
    Agent1 - агент на первом сервере, NoteId 1 - документ на Сервер1, в котором пользователь видит результат работы Agent2
    Agent2 - агент на втором сервере, NoteId 2 - документ на Сервер2, в который пишет результат работы Agent2. После его работы, результат будет скопирован в документ NoteID 1, который лежит на Сервер1

    NoteId 2 нужен, поскольку Сервер2 не знает, с какого сервера произошел вызов его агента.
     
  4. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Репутация:
    1
    Регистрация:
    27 авг 2008
    Сообщения:
    6.357
    Симпатии:
    334
    зачем, вообще, нужна такая схема?
     
  5. AlexyeNov

    AlexyeNov Гость

    Репутация:
    0
    На Сервер2 стоит Sap Connector (с набором RFC библиотек). У Сервер1 не должно быть этого.
    Тоесть, пользователь работает с Sap через Сервер2, не имея к нему непосредственного доступа.
    Ещё более точно - Сервер1 может быть где нить на дальнем востоке, а Сервер2 - в Москве...

    пысы:
    Схема Агент1.Run -> Agent2.RunOnServer не подходит - в этом случае у Юзера должны быть полномочия на доступ к Сервер2
    пысы2:
    Схема Агент1.RunOnServer ->Agent2.Run не подходит, поскольку в этом случае Agent2 выполняется на Сервер1, и будут ошибки создания объекта Sap Connector по причине отсутствия RFC библиотек на Сервер1.

    оба пысы проверены...


    пысы3: будут толковые предложения ??? :)
     
  6. Akupaka

    Akupaka А че я?.. О.о

    Репутация:
    0
    Регистрация:
    4 окт 2007
    Сообщения:
    3.360
    Симпатии:
    2
    думаю, не удастся. агенты по обработке стартуют не в момент появления документа, а попозжее.
    эта фраза заставляет задуматься, что подобное реализовать нельзя, либо сложно :))
    хотя...

    чем не устраивает дергание по http? сервера уже в трастед прописаны ;)
    Код (Text):
    http://Host/Database/AgentName?OpenAgent&pd=ParameterDocUnid
    агент получает в контексте документ с цги-переменными, тебе нужно обработать Query_String
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content">
    Код (Text):
        Dim s As New NotesSession
    Dim db As NotesDatabase
    Dim wdc As NotesDocument
    Dim pddoc As NotesDocument
    Dim qs As String
    Dim pdunid As String

    Set wdc = s.DocumentContext
    Set db = s.CurrentDatabase

    qs = wdc.GetItemValue("Query_String")(0)
    pdunid = StrRight(qs, "=") ' других ключей не должно быть
    Set pddoc = db.GetDocumentByUnid(pdunid) ' подразумевается, что агент и парам-док в одной базе
    Call pddoc.ReplaceItemValue("SomeItem", "SomeValue:" & Now)
    Call pddoc.Save(True, False)
    но, остается под вопросом синхронизация выполнения кода. придется в таком случае цеплять цикл ожидания и опрос документа-параментов.

    еще можно сбацать свой domino add-in - сервер, который будет на определенном порту принимать определенные запросы и выполнять нужные операции. с пом java, думаю, будет не очень сложно такое сделать.
    примеры можно легко нагуглить "domino add-in java":
    http://www.nsftools.com/tips/JavaTips.htm#javaaddin
    зы: сдаю lmike как знатока lotus + java ;)
     
  7. ToxaRat

    ToxaRat Чёрный маг
    Команда форума Lotus team

    Репутация:
    0
    Регистрация:
    6 ноя 2007
    Сообщения:
    3.171
    Симпатии:
    21
    ужасная и безтолковая конструкция...

    а что нельзя на сервере1 иметь реплику или часть базы сервера2?
     
  8. Akupaka

    Akupaka А че я?.. О.о

    Репутация:
    0
    Регистрация:
    4 окт 2007
    Сообщения:
    3.360
    Симпатии:
    2
    ;)
    предложи лучше :) ))
     
  9. ToxaRat

    ToxaRat Чёрный маг
    Команда форума Lotus team

    Репутация:
    0
    Регистрация:
    6 ноя 2007
    Сообщения:
    3.171
    Симпатии:
    21
    Akupaka
    читай выше, я предложил сделать:
    1) через документ запрос
    2) через один сервер посредством реплики, копии и других сокращенный данных которые могут быть разрешены юзеру
     
  10. Akupaka

    Akupaka А че я?.. О.о

    Репутация:
    0
    Регистрация:
    4 окт 2007
    Сообщения:
    3.360
    Симпатии:
    2
    ну, если ты так уверен, что твое предложение (1) лучше, то почему бы тебе не ответить на остальные вопросы, которые тебе же задали? ))
    кроме того, в первом же посте было указано, что документ-параметр, или как ты назвал "документ запрос", используется. вопрос был в том, как заставить его обработать агентом на другом сервере, сохранив, при этом, синхронность выполнения кода.

    а предложение (2) не предложение, а встречный вопрос, как бы: "автор, ты догадайся как это использовать сам, ага?" :)
     
  11. AlexyeNov

    AlexyeNov Гость

    Репутация:
    0
    ToxaRat: Реплика меня не спасёт.
    Толку от репликиv никакого, когда выполнение кода и синхронный ответ должны производится именно на Сервер2 ?
    Ведь именно там лежат библиотеки связи с SAP.


    Akupaka: Domino Add IN на жаве это интересно... только опять таки, будет ли работать синронность ? Ведь мне важно не только послать запрос на сервер2 (тоесть, вызвать агента2), но и получить ответ, в текущей сессии вызова.

    /*отмодерировано*/ вся проблема упирается только в то, чтобы разрешить серверам пускать агенты другого сервера с выполнением на этом сервере... неужели, нету никаких расширенных настроек сервера, например в notes.ini, которые разрешат это???? :)

    Проблема то чисто настроечной видится. Ну типа, как в винде - по умолчанию в windows explorer прячутся файлы системных папок, но их всегда можно отобразить по желанию и на свой страх и риск.
     
  12. Akupaka

    Akupaka А че я?.. О.о

    Репутация:
    0
    Регистрация:
    4 окт 2007
    Сообщения:
    3.360
    Симпатии:
    2
    ну, можно ведь подключится к жава-серверу на другом сервере, отослать запрос на него и дождаться ответа... но конкретно код не дам - не знаю )

    вот что вычитал на форуме ibm
    отсюда, но ничего полезного более там нет, вроде
    http://www-10.lotus.com/ldd/nd6forum.nsf/5...71?OpenDocument

    если не забуду, поищу завтра на интертраста, или сам поищи :) http://techforum.intertrust.ru/

    lmike , мы тоскуем без твоих кросс-платформенных решений на жаве :)
     
  13. AlexyeNov

    AlexyeNov Гость

    Репутация:
    0
    Akupaka: да, я тоже видел - на google это один из первых линков по проболеме.. и чуть ли не единственный (!)
    Удивляет, честно говоря, что мало у кого была подобная проблема.
    Кстатии, тема та ещё с 2005 года тянется, интересно вот неужели в семёрке нету положительных сдвигов с агент манагером?

    Может, попробовать в c++ api что нить нарыть?
     
  14. ToxaRat

    ToxaRat Чёрный маг
    Команда форума Lotus team

    Репутация:
    0
    Регистрация:
    6 ноя 2007
    Сообщения:
    3.171
    Симпатии:
    21
    каких сдвигов то?
    какой нормальный админ согласится чтобы на его сервере дергал агенты другой сервер? :welcome:
     
  15. Klido

    Klido Гость

    Репутация:
    0
    :welcome:

    да и зачем - непонятно....
     
  16. AlexyeNov

    AlexyeNov Гость

    Репутация:
    0
    Админ волен соглашаться на то, что ему говорят
    И неволен противоречить :welcome:
    Просто получается, что всё равно функционал нужно реализовать, и всё равно будут дёргаться агенты, только делаться это будет через задницу...

    И, кстати, какая принципиальная разница админу по части безопасности?

    что Юзер -> RunOnServer
    что Сервер -> RunOnServer

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

    Кстати, ещё один нюанс.
    На обоих серверах стоит Company Media. Может быть, можно через интертрастовский агент манагер прикрутить, который вроде как намного круче стандартного? :)
     
  17. ToxaRat

    ToxaRat Чёрный маг
    Команда форума Lotus team

    Репутация:
    0
    Регистрация:
    6 ноя 2007
    Сообщения:
    3.171
    Симпатии:
    21
    а ну ка расскажите поподробнее, что там такого крутого? :welcome:

    может сделать так чтобы SAP все готовые результаты уже накидал юзеру в его сервер и сделать так чтобы юзер свой сервер не покидал вообще?
     
  18. AlexyeNov

    AlexyeNov Гость

    Репутация:
    0
    По части ActiveFrame AM - хотя бы то, что там нету ограничения на запуск раз в 5 минут фоновых агентов.

    ПО части SAP-а : так это и происходит, когда синхронизация идёт со стороны сервера, где стоит SAP коннектор.
    Тоесть, Sap вызывает по HTTP агент на сервере с SAP коннектором, после чего агент через SAP коннектор делает запрос в SAP и получает данные, которые через файл, вставленный в rich text, кидаются на сервер, где сидит юзер и где эти данные анализируются. Приоткрою тайну - суть в синхронизации между SAP HR и Company Media, в односторонном порядке - данные HR попадают в бд СО.

    Но проблема начинается, когда синхронизация инициируется со стороны синхронихируемого сервера лотуса, непонятно, как Юзеру, который не имеет права на доступ к серверу с SAP коннектором, вызвать эту самую синхронизацию принудительно - возникает ошибка, которую я описал в первом сообщении. Ведь тут как раз и нужно через двойной запуск RunOnServer это разруливать (либо по другому принципу, который пока туманен).

    Обобщая:
    - есть несколько филиалов CM, и есть коммуникационный Lotus сервер, который общается с SAP и получает данные по HR.
    - при запуске синхронизации со стороны филиала, необходимо передать коммуникационному серверу код головной единицы филиала (посредством параметра noteid в случае использования LS agent.run,runonserver
    - сихнронизация со стороны филиала инициируется юзером (а не SAP-ом), она должна быть выполнена сихронно - пользователь должен иметь результат сразу после окончания запроса...
    - юзер не имеет доступа к коммуникационному серверу
    - c SAP общается только комуникационный сервер, поэтому делать РАБОТАЮЩУЮ в случае наличия RFC библиотек на сервер1 конструкцию Юзер -> RunOnServer (server1) -> Run (server2) - НЕЛЬЗЯ !!!!
     
  19. TIA

    TIA :-)
    Lotus team

    Репутация:
    0
    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    1
    AlexyeNov
    Ничего не сказали про доступ подписанта агента1 к БД на сервере2 по ACL.
     
  20. AlexyeNov

    AlexyeNov Гость

    Репутация:
    0

    Ну агент1 подписан сервером1, разумеется.
    пробовал и юзером подписывать.

    Разумеется, добавил и сервер1 и юзера в как в ACL БД на сервер2, так и в безопасность серверного документа Сервера2.
    :)

    Собственно, если нету в ACL, то возникает другая ошибка - "Вы не имеете права выполнять эту операцию" :welcome:
    Впрочем, юзер мне всё равно не нужен в ACL - в промышленной версии у него там прав не будет..
     
Загрузка...

Поделиться этой страницей