Что приводит к увеличению ID разговора

Я пытаюсь отследить проблему с моими разговорами CDI. У меня есть страница, которая работает, если я прохожу один маршрут через свое приложение, но нет, если я прохожу другой. Я верю, что это что-то связанное с разговором, но я не могу понять что.

Рабочий процесс происходит так:

  1. Загрузить страницу A
  2. Открыть страницу редактирования A
  3. На этом этапе новый разговор начинается с идентификатором 1
  4. Сделайте редактирование и сохраните, что возвращает мне страницу A
  5. Нажмите на ссылку на странице A, чтобы загрузить страницу B
  6. Открыть страницу редактирования B
  7. Разговор начинается с идентификатора 2. Нажатие кнопки "Обновить" при этом запускает разговор с идентификатором 3. Другие обновления увеличивают идентификатор разговора.
  8. Редактирование прошло успешно

Рабочий процесс, где он не работает, выглядит следующим образом: Рабочий процесс происходит следующим образом:

  1. Загрузить страницу A
  2. Нажмите на ссылку на странице A, чтобы загрузить страницу B
  3. Открыть страницу редактирования B
  4. Разговор начинается с идентификатора 1. Обновление страницы скажет мне, что мой идентификатор беседы по-прежнему равен 1.
  5. Различные действия на странице вызывают исключение "WELD-000321 Не найден диалог для восстановления с идентификатором 1".

Таким образом, различия между этими двумя рабочими процессами состоят в том, что в рабочем рабочем процессе я делаю успешное редактирование, и когда я нахожусь на своей второй странице редактирования, я получаю дополнительные идентификаторы разговоров. Не работает рабочий процесс, ID беседы всегда равен 1, но я ничего не могу сделать!

Вещи, которые я пытаюсь понять:

  1. Если у меня есть разговор с идентификатором 1, сделайте что-нибудь, а затем завершите разговор, когда я начну новый разговор - каким будет этот идентификатор? 1 (как этот разговор был закончен) или 2 (следующий неиспользуемый идентификатор).
  2. Есть ли что-нибудь кроме разговора, который не завершается должным образом, который хотел бы видеть увеличивающиеся идентификаторы разговора, которые я вижу? Насколько я могу судить, я правильно закрываю свои разговоры.

Надеемся, что ответ на один из них пролил некоторый свет на то, что идет не так. Спасибо за любой вклад

1 ответ

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

Если у меня есть разговор с идентификатором 1, сделайте что-нибудь, а затем завершите разговор, когда я начну новый разговор - каким будет этот идентификатор? 1 (как этот разговор был закончен) или 2 (следующий неиспользуемый идентификатор).

Способ создания новых идентификаторов CDI не указан. Weld делает следующее:

public class ConversationIdGenerator implements Callable<String>, Serializable {

    public static final String CONVERSATION_ID_GENERATOR_ATTRIBUTE_NAME = ConversationIdGenerator.class.getName();

    private static final long serialVersionUID = 8489811313900825684L;

    // The next conversation ID
    private final AtomicInteger id;

    /**
     * Creates a new conversation ID generator
     */
    public ConversationIdGenerator() {
        this.id = new AtomicInteger(1);
    }

    public String call() {
        int nextId = id.getAndIncrement();
        return String.valueOf(nextId);
    }

}

Есть ли что-нибудь кроме разговора, который не завершается должным образом, который хотел бы видеть увеличивающиеся идентификаторы разговора, которые я вижу? Насколько я могу судить, я правильно закрываю свои разговоры.

Нет, здесь вы ничего не пропустили. Скорее всего, проблема будет в вашем коде (что является хорошей новостью, потому что вы можете изменить его:-)

Другие вопросы по тегам