您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

CommErrorEmulatorServlet.java 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package com.vaadin.tests.application;
  2. import java.io.IOException;
  3. import java.util.Collections;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import com.vaadin.server.DeploymentConfiguration;
  8. import com.vaadin.server.RequestHandler;
  9. import com.vaadin.server.ServiceException;
  10. import com.vaadin.server.VaadinRequest;
  11. import com.vaadin.server.VaadinResponse;
  12. import com.vaadin.server.VaadinServlet;
  13. import com.vaadin.server.VaadinServletService;
  14. import com.vaadin.server.VaadinSession;
  15. import com.vaadin.server.communication.HeartbeatHandler;
  16. import com.vaadin.server.communication.UidlRequestHandler;
  17. import com.vaadin.ui.UI;
  18. public class CommErrorEmulatorServlet extends VaadinServlet {
  19. private Map<UI, Integer> uidlResponseCode = Collections
  20. .synchronizedMap(new HashMap<UI, Integer>());
  21. private Map<UI, Integer> heartbeatResponseCode = Collections
  22. .synchronizedMap(new HashMap<UI, Integer>());
  23. private final CommErrorUIDLRequestHandler uidlHandler = new CommErrorUIDLRequestHandler();
  24. private final CommErrorHeartbeatHandler heartbeatHandler = new CommErrorHeartbeatHandler();
  25. public class CommErrorUIDLRequestHandler extends UidlRequestHandler {
  26. @Override
  27. public boolean synchronizedHandleRequest(VaadinSession session,
  28. VaadinRequest request, VaadinResponse response)
  29. throws IOException {
  30. UI ui = session.getService().findUI(request);
  31. if (ui != null && uidlResponseCode.containsKey(ui)) {
  32. response.sendError(uidlResponseCode.get(ui), "Error set in UI");
  33. return true;
  34. }
  35. return super.synchronizedHandleRequest(session, request, response);
  36. }
  37. }
  38. public class CommErrorHeartbeatHandler extends HeartbeatHandler {
  39. @Override
  40. public boolean synchronizedHandleRequest(VaadinSession session,
  41. VaadinRequest request, VaadinResponse response)
  42. throws IOException {
  43. UI ui = session.getService().findUI(request);
  44. if (ui != null && heartbeatResponseCode.containsKey(ui)) {
  45. response.sendError(heartbeatResponseCode.get(ui),
  46. "Error set in UI");
  47. return true;
  48. }
  49. return super.synchronizedHandleRequest(session, request, response);
  50. }
  51. }
  52. public class CommErrorEmulatorService extends VaadinServletService {
  53. public CommErrorEmulatorService(VaadinServlet servlet,
  54. DeploymentConfiguration deploymentConfiguration)
  55. throws ServiceException {
  56. super(servlet, deploymentConfiguration);
  57. }
  58. @Override
  59. protected List<RequestHandler> createRequestHandlers()
  60. throws ServiceException {
  61. List<RequestHandler> handlers = super.createRequestHandlers();
  62. handlers.add(uidlHandler);
  63. handlers.add(heartbeatHandler);
  64. return handlers;
  65. }
  66. }
  67. @Override
  68. protected VaadinServletService createServletService(
  69. DeploymentConfiguration deploymentConfiguration)
  70. throws ServiceException {
  71. CommErrorEmulatorService s = new CommErrorEmulatorService(this,
  72. deploymentConfiguration);
  73. s.init();
  74. return s;
  75. }
  76. public void setUIDLResponseCode(final UI ui, int responseCode,
  77. final int delay) {
  78. uidlResponseCode.put(ui, responseCode);
  79. System.out.println(
  80. "Responding with " + responseCode + " to UIDL requests for "
  81. + ui + " for the next " + delay + "s");
  82. new Thread(() -> {
  83. try {
  84. Thread.sleep(delay * 1000);
  85. } catch (InterruptedException e) {
  86. e.printStackTrace();
  87. }
  88. System.out.println("Handing UIDL requests normally again");
  89. uidlResponseCode.remove(ui);
  90. }).start();
  91. }
  92. public void setHeartbeatResponseCode(final UI ui, int responseCode,
  93. final int delay) {
  94. heartbeatResponseCode.put(ui, responseCode);
  95. System.out.println("Responding with " + responseCode
  96. + " to heartbeat requests for " + ui + " for the next " + delay
  97. + "s");
  98. new Thread(() -> {
  99. try {
  100. Thread.sleep(delay * 1000);
  101. } catch (InterruptedException e) {
  102. e.printStackTrace();
  103. }
  104. System.out.println("Handing heartbeat requests normally again");
  105. heartbeatResponseCode.remove(ui);
  106. }).start();
  107. }
  108. }