Переглянути джерело

Minimal fix for error handling with streaming (#12578)

There are still issues in PushHandler where the wrong resource is used but these should not be as critical. They will be fixed in #12920

Change-Id: Ife8d3694bdb6ee29c5b4adbd8988cc0346c4fe3f
tags/7.1.9
Artur Signell 10 роки тому
джерело
коміт
e9335620bb

+ 14
- 2
server/src/com/vaadin/server/communication/PushHandler.java Переглянути файл

@@ -264,11 +264,12 @@ public class PushHandler extends AtmosphereResourceEventListenerAdapter
return;
}

UI ui = null;
session.lock();
try {
VaadinSession.setCurrent(session);
// Sets UI.currentInstance
final UI ui = service.findUI(vaadinRequest);
ui = service.findUI(vaadinRequest);
if (ui == null) {
sendNotificationAndDisconnect(resource,
UidlRequestHandler.getUINotFoundErrorJSON(service,
@@ -282,8 +283,19 @@ public class PushHandler extends AtmosphereResourceEventListenerAdapter
SystemMessages msg = service.getSystemMessages(
ServletPortletHelper.findLocale(null, null,
vaadinRequest), vaadinRequest);

AtmosphereResource errorResource = resource;
if (ui != null && ui.getPushConnection() != null) {
// We MUST use the opened push connection if there is one.
// Otherwise we will write the response to the wrong request
// when using streaming (the client -> server request
// instead of the opened push channel)
errorResource = ((AtmospherePushConnection) ui
.getPushConnection()).getResource();
}

sendNotificationAndDisconnect(
resource,
errorResource,
VaadinService.createCriticalNotificationJSON(
msg.getInternalErrorCaption(),
msg.getInternalErrorMessage(), null,

Завантаження…
Відмінити
Зберегти