У меня есть портлет. Когда портлет загружается, то до отображения первого представления в некоторых случаях возникает необходимость вызвать репозиторий, который изменяет данные в базе данных. Я не стал бы более подробно рассказывать о том, почему это необходимо, и ответы об этом, являющиеся недостатком дизайна, не помогают. Я знаю, что это дефект дизайна, но мне все же хотелось бы найти альтернативное решение следующей проблемы:
Проблема с этой настройкой заключается в том, что браузеры отправляют запросы предварительной загрузки. Например, URL-адрес страницы, в которой находится портлет, - это /test -portlet. Теперь, когда вы вводите его в свою адресную строку, тогда, если у вас есть его в истории браузера, браузер отправляет запрос GET на страницу уже, когда это вам предложит. Если вы нажмете клавишу ввода, прежде чем первый запрос GET будет разрешен, браузер отправит новый запрос GET. Это означает, что портлет получает 2 отдельных запроса, которые он начинает обрабатывать параллельно. Первая процедура базы данных может работать правильно, но с учетом характера процедуры базы данных второй вызов обычно дает исключение.
Каким будет хороший чистый способ справиться с вышеупомянутой проблемой из приложения Java?
Sidenote: Я использую Spring MVC.
Простой пример возможного контроллера:
@RequestMapping
public String index( Model model, RenderRequest request ){
String username = dummyRepository.changeSomeData(request.getAttribute("userId"));
model.add("userName", username);
return "view";
}
Меня бы заинтересовало решение полностью заблокировать первое выполнение. Например, somekind перенаправления на POST с контроллера, который браузер не будет запускать. Не уверен, что это возможно.