Это почти надежный способ, который, как я обнаружил, работает для управления порядком выполнения независимых агентов. Я использую настоящий документ заметок как документ с псевдоблокировкой.
Раньше я делал это так, чтобы сохранить документ Notes, который представляет собой «блокировку». Не используйте документ профиля базы данных, поскольку он подвержен конфликтам репликации / сохранения, и вы не можете просмотреть его в представлении.
Документ «блокировки» может иметь флаг, который сообщает java-агенту, разрешено ли ему запускаться сейчас. В Java-агенте просто есть код, похожий на этот
Session s = NotesFactory.createSession();
Database db = s.getDatabase("This Server", "This database");
View vw = db.getView("(lockView)");
Document docControl = vw.getFirstDocument();
String sRunStatus = docControl.getItemValueString("runStatus");
boolean bContinue = false;
if (sRunStatus =="Go"){
bContinue = true;
}
if(bContinue){
//do agent code here....
// reset the status to "wait". The lotusscript agent should then set it to "Go"
// the other agent will execute on "wait" and then update the status to "Go" on
// completion to prevent simulatenous execution. Can also use different state names
// instead of go/wait, like run0, run1, run2 etc
docControl.replaceItemValue("runStatus", "wait");
docControl.save(true);
}
Обратите внимание, что вы используете агентов для установки значений «Go» / «wait» в поле «runStatus» в контрольном документе. Вам нужен только 1 документ, поэтому вам нужно вывести только первый документ из представления.
Аналогичную логику следует еще проще добавить в агент LotusScript. Единственный недостаток, который я могу найти, заключается в том, что java-агент может не выполнять код, потому что контрольный документ еще не настроен на «go», а тест «IF» завершается неудачно без запуска логики, поэтому это не пауза как таковая, а предотвращает Java-агенту от выполнения с агентом lotusscript не в желаемом порядке. Но затем он сработает на следующем запланированном экземпляре, если агент LotusScript выпустил его.
Вы также можете расширить эту идею, чтобы управлять набором агентов и даже объединять несколько агентов в цепочку, используя определенные значения, такие как «RunAgent1», «RunAgent2», еще одно преимущество заключается в том, что вы также можете фиксировать время начала выполнения, ошибки или что-то еще. вам нужно ....
person
angryITguy
schedule
07.09.2011