Это почти надежный способ, который я обнаружил, который работает для контроля порядка выполнения независимых агентов. Я использую настоящий документ с примечаниями в качестве документа psuedo-lock.
Способ, которым я делал это раньше, - хранить документ Notes, представляющий «замок». Не используйте документ профиля базы данных, так как он подвержен репликации / сохранению конфликтных ситуаций, и вы не можете просматривать его в представлении.
Документ «lock» может иметь флаг, который сообщает 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», еще одно преимущество заключается в том, что вы также можете фиксировать время запуска выполнения, а также ошибки или все, что вам нужно ....