Агент вызывался несколько раз одновременно, выполняя один и тот же код - PullRequest
0 голосов
/ 14 мая 2019

У меня есть агенты Java, которые генерируют документы.Я также присваиваю этим документам уникальный уникальный номер подписки, начиная с 1 и увеличивая +1 каждый раз.У меня есть вид, где я получаю последний номер, я беру этот номер и увеличиваю его на единицу.Поэтому, когда агент запускается, он увеличивает это число, это происходит с помощью фрагмента кода, который находится внизу этого вопроса.Иногда этот агент вызывается одновременно, и в результате получается один и тот же номер.Так, например, у меня есть документы, в которых есть число 1001, 4 раза, а не 1001, 1002, 1003, 1004.

Я пытался посмотреть, может ли агент запускать по одному, но это только длязапланированные агенты.

Код, который я запускаю для генерации уникального номера:

String ReturnValue = "";

                View nvwVolgnr =  iOrderDB.getView("Volgnummer");
                lotus.domino.Document docVolgnr = nvwVolgnr.getDocumentByKey("Order");
                if ( docVolgnr!=null){
                    String strVolgnr = docVolgnr.getItemValue("Volgnummer").toString();

                     //System.out.println("strVolgnr " + strVolgnr);

                    //Object intVolgnr = docVolgnr.getItemValue("Volgnummer");

                    strVolgnr = strVolgnr.replace("[", "");
                    strVolgnr = strVolgnr.replace("]", "");

                    double intVolgnr = Double.parseDouble(strVolgnr);

                    strVolgnr = strVolgnr.replace(".0", "");

                    //System.out.println("strVolgnr " + strVolgnr);

                    strVolgnr = "000000" + strVolgnr;
                    //System.out.println("strVolgnr " + strVolgnr);

                    strVolgnr = strVolgnr.substring(strVolgnr.length() - 6);
                    ReturnValue = strVolgnr;

                    intVolgnr = intVolgnr + 1;
                    Double dblVolgnr = new Double(intVolgnr);

                    //System.out.println("strVolgnr " + strVolgnr);

                    //Object objVolgnr =  intVolgnr;

                    docVolgnr.replaceItemValue("Volgnummer", dblVolgnr);
                     if (docVolgnr.save())
                        {

                        }

Можно ли получить уникальные номера (с приращением), даже если этот агент работает одновременно

1 Ответ

0 голосов
/ 14 мая 2019

Самый простой способ, вероятно, состоит в том, чтобы установить единственную точку правды: это может быть дополнительный локальный агент, файл, база данных или API.Вы можете получить следующий номер из любого из них.

Это означает, что вы настроили один из них, чтобы дать вашим агентам следующий номер.Поскольку это происходит в одном месте, у вас больше не будет дубликатов.

Если увеличение чисел не требуется, но вам просто нужно иметь уникальный номер для каждого, вы можете посмотреть UUID.Но я считаю, что это не так.

...