Что приводит к увеличению ID разговора
Я пытаюсь отследить проблему с моими разговорами CDI. У меня есть страница, которая работает, если я прохожу один маршрут через свое приложение, но нет, если я прохожу другой. Я верю, что это что-то связанное с разговором, но я не могу понять что.
Рабочий процесс происходит так:
- Загрузить страницу A
- Открыть страницу редактирования A
- На этом этапе новый разговор начинается с идентификатором 1
- Сделайте редактирование и сохраните, что возвращает мне страницу A
- Нажмите на ссылку на странице A, чтобы загрузить страницу B
- Открыть страницу редактирования B
- Разговор начинается с идентификатора 2. Нажатие кнопки "Обновить" при этом запускает разговор с идентификатором 3. Другие обновления увеличивают идентификатор разговора.
- Редактирование прошло успешно
Рабочий процесс, где он не работает, выглядит следующим образом: Рабочий процесс происходит следующим образом:
- Загрузить страницу A
- Нажмите на ссылку на странице A, чтобы загрузить страницу B
- Открыть страницу редактирования B
- Разговор начинается с идентификатора 1. Обновление страницы скажет мне, что мой идентификатор беседы по-прежнему равен 1.
- Различные действия на странице вызывают исключение "WELD-000321 Не найден диалог для восстановления с идентификатором 1".
Таким образом, различия между этими двумя рабочими процессами состоят в том, что в рабочем рабочем процессе я делаю успешное редактирование, и когда я нахожусь на своей второй странице редактирования, я получаю дополнительные идентификаторы разговоров. Не работает рабочий процесс, ID беседы всегда равен 1, но я ничего не могу сделать!
Вещи, которые я пытаюсь понять:
- Если у меня есть разговор с идентификатором 1, сделайте что-нибудь, а затем завершите разговор, когда я начну новый разговор - каким будет этот идентификатор? 1 (как этот разговор был закончен) или 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);
}
}
Есть ли что-нибудь кроме разговора, который не завершается должным образом, который хотел бы видеть увеличивающиеся идентификаторы разговора, которые я вижу? Насколько я могу судить, я правильно закрываю свои разговоры.
Нет, здесь вы ничего не пропустили. Скорее всего, проблема будет в вашем коде (что является хорошей новостью, потому что вы можете изменить его:-)