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

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

  1. AlexyeNov

    AlexyeNov Гость

    Имею Сервер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

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

    AlexyeNov Гость


    Насколько в таком случае удастся сохранить синхронность и оперативность вызовов?
    Агент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

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

    AlexyeNov Гость

    На Сервер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 А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    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

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

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

    Akupaka А че я?.. О.о

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

    ToxaRat Чёрный маг
    Lotus team

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

    Akupaka А че я?.. О.о

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

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

    AlexyeNov Гость

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


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

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

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

    Akupaka А че я?.. О.о

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

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

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

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

    AlexyeNov Гость

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

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

    ToxaRat Чёрный маг
    Lotus team

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

    Klido Гость

    :welcome:

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

    AlexyeNov Гость

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

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

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

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

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

    ToxaRat Чёрный маг
    Lotus team

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

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

    AlexyeNov Гость

    По части 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

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

    AlexyeNov Гость


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

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

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

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