@Test public void setupTracingCompletionWhenAsyncRequestCompletes_should_add_WingtipsRequestSpanCompletionAsyncListener( ) throws ServletException, IOException { // given AsyncContext asyncContextMock = mock(AsyncContext.class); doReturn(asyncContextMock).when(requestMock).getAsyncContext(); TracingState tracingStateMock = mock(TracingState.class); ArgumentCaptor<AsyncListener> listenerCaptor = ArgumentCaptor.forClass(AsyncListener.class); // when servlet3Runtime.setupTracingCompletionWhenAsyncRequestCompletes(requestMock, tracingStateMock); // then verify(asyncContextMock).addListener(listenerCaptor.capture()); List<AsyncListener> addedListeners = listenerCaptor.getAllValues(); assertThat(addedListeners).hasSize(1); assertThat(addedListeners.get(0)).isInstanceOf(WingtipsRequestSpanCompletionAsyncListener.class); WingtipsRequestSpanCompletionAsyncListener listener = (WingtipsRequestSpanCompletionAsyncListener)addedListeners.get(0); assertThat(listener.originalRequestTracingState).isSameAs(tracingStateMock); }
public static void destroy() { if (es == null) { return; } es.shutdownNow(); for (final OpenEJBAsyncContext ctx : new ArrayList<>(INITIALIZED)) { if (ctx.lastTouch + ctx.getTimeout() < System.currentTimeMillis()) { for (final AsyncListener listener : ctx.listeners) { try { listener.onTimeout(ctx.event); } catch (final IOException t) { throw new OpenEJBRuntimeException(t); } } ctx.complete(); } } INITIALIZED.clear(); }
public static void init() { if (!"true".equalsIgnoreCase(SystemInstance.get().getProperty("openejb.http.async.eviction", "true"))) { return; } es = Executors.newScheduledThreadPool(1, new DaemonThreadFactory(OpenEJBAsyncContext.class)); es.scheduleWithFixedDelay(new Runnable() { @Override public void run() { for (final OpenEJBAsyncContext ctx : new ArrayList<>(INITIALIZED)) { if (ctx.lastTouch + ctx.getTimeout() < System.currentTimeMillis()) { INITIALIZED.remove(ctx); for (final AsyncListener listener : ctx.listeners) { try { listener.onTimeout(ctx.event); } catch (final IOException t) { throw new OpenEJBRuntimeException(t); } } ctx.complete(); } } } }, 1, 1, TimeUnit.MINUTES); }
@Override public void complete() { for (final AsyncListener listener : listeners) { try { listener.onComplete(event); } catch (final IOException t) { throw new OpenEJBRuntimeException(t); } } try { commit(); } finally { INITIALIZED.remove(this); } }
@Override public void addListener(AsyncListener listener) { check(); AsyncListenerWrapper wrapper = new AsyncListenerWrapper(); wrapper.setListener(listener); listeners.add(wrapper); }
@Override public void addListener(AsyncListener listener, ServletRequest servletRequest, ServletResponse servletResponse) { check(); AsyncListenerWrapper wrapper = new AsyncListenerWrapper(); wrapper.setListener(listener); wrapper.setServletRequest(servletRequest); wrapper.setServletResponse(servletResponse); listeners.add(wrapper); }
@Override public void complete() { for (AsyncListener listener : this.listeners) { try { listener.onComplete(new AsyncEvent(this, this.request, this.response)); } catch (IOException e) { throw new IllegalStateException("AsyncListener failure", e); } } }
@Override public void complete() { try { servletResponse.flushBuffer(); } catch (IOException e1) { e1.printStackTrace(); } for (AsyncListener asyncListener : getAsyncListeners()) { try { asyncListener.onComplete(new AsyncEvent(this)); } catch (IOException e) { e.printStackTrace(); } } }
@Override public void complete() { MockHttpServletRequest mockRequest = WebUtils.getNativeRequest(request, MockHttpServletRequest.class); if (mockRequest != null) { mockRequest.setAsyncStarted(false); } for (AsyncListener listener : this.listeners) { try { listener.onComplete(new AsyncEvent(this, this.request, this.response)); } catch (IOException e) { throw new IllegalStateException("AsyncListener failure", e); } } }
@DataProvider(value = { "true | true | true", "true | false | false", "false | true | false", "false | false | false" }, splitBy = "\\|") @Test public void determineServletRuntime_returns_ServletRuntime_based_on_arguments( boolean classHasServlet3Method, boolean useAsyncListenerClassThatExists, boolean expectServlet3Runtime ) { // given Class<?> servletRequestClass = (classHasServlet3Method) ? GoodFakeServletRequest.class : BadFakeServletRequest.class; String asyncListenerClassname = (useAsyncListenerClassThatExists) ? AsyncListener.class.getName() : "does.not.exist.AsyncListener" + UUID.randomUUID().toString(); // when ServletRuntime result = ServletRuntime.determineServletRuntime(servletRequestClass, asyncListenerClassname); // then if (expectServlet3Runtime) { assertThat(result).isInstanceOf(Servlet3Runtime.class); } else { assertThat(result).isInstanceOf(Servlet2Runtime.class); } }
private void setupAsyncContextWorkflow() { listenerCapturingAsyncContext = mock(AsyncContext.class); capturedAsyncListeners = new ArrayList<>(); doReturn(listenerCapturingAsyncContext).when(requestMock).getAsyncContext(); doReturn(true).when(requestMock).isAsyncStarted(); doAnswer(invocation -> { capturedAsyncListeners.add((AsyncListener) invocation.getArguments()[0]); return null; }).when(listenerCapturingAsyncContext).addListener(any(AsyncListener.class)); }
public void complete() { Servlet3MockHttpServletRequest mockRequest = WebUtils.getNativeRequest(request, Servlet3MockHttpServletRequest.class); if (mockRequest != null) { mockRequest.setAsyncStarted(false); } for (AsyncListener listener : this.listeners) { try { listener.onComplete(new AsyncEvent(this, this.request, this.response)); } catch (IOException e) { throw new IllegalStateException("AsyncListener failure", e); } } }
@Override public void addListener(AsyncListener listener, ServletRequest servletRequest, ServletResponse servletResponse) { check(); AsyncListenerWrapper wrapper = new AsyncListenerWrapper(); wrapper.setListener(listener); listeners.add(wrapper); }
@Override public void addListener(AsyncListener l) { if (!isContextActive) { throw new IllegalStateException("Listener can only be added when the asynchronous context is active."); } pal.addListener(l); }
@Override public void addListener(AsyncListener l, ServletRequest req, ServletResponse resp) { if (!isContextActive) { throw new IllegalStateException("Listener can only be added when the asynchronous context is active."); } pal.addListener(l, req, resp); }
@SuppressWarnings("unchecked") @Override public <T extends AsyncListener> T createListener(Class<T> cls) throws ServletException { T obj = null; try { obj = (T) createInstance(cls); } catch (Throwable t) { throw new ServletException(t); } return obj; }
private void onError(final Throwable ignored) { for (final AsyncListener listener : listeners) { try { listener.onError(event); } catch (final IOException t) { throw new OpenEJBRuntimeException(t); } } try { HttpServletResponse.class.cast(response).sendError(HttpURLConnection.HTTP_INTERNAL_ERROR); commit(); } catch (final IOException e) { // no-op } }
public void internalStartAsync() { started = true; for (final AsyncListener listener : listeners) { try { listener.onStartAsync(event); } catch (final IOException t) { throw new OpenEJBRuntimeException(t); } } }
@Override public void addListener(final AsyncListener listener) { listeners.add(listener); if (started) { try { listener.onStartAsync(event); } catch (final IOException e) { throw new OpenEJBRuntimeException(e); } } }
@Override public <T extends AsyncListener> T createListener(final Class<T> clazz) throws ServletException { try { return (T) context.inject(clazz.newInstance()); } catch (final Exception e) { throw new ServletException(e); } }
@Override public <T extends AsyncListener> T createListener(Class<T> clazz) throws ServletException { return null; }
public AsyncListener getListener() { return listener; }
public void setListener(AsyncListener listener) { this.listener = listener; }
@Override public void addListener(AsyncListener listener) { this.listeners.add(listener); }
@Override public void addListener(AsyncListener listener, ServletRequest servletRequest, ServletResponse servletResponse) { this.listeners.add(listener); }
@Override public <T extends AsyncListener> T createListener(Class<T> clazz) throws ServletException { return BeanUtils.instantiateClass(clazz); }