@Override protected void preprocess(IAccessEvent event) { event.prepareForDeferredProcessing(); } };
@Override protected void postProcessEvent(IAccessEvent event) { event.prepareForDeferredProcessing(); }
@Override protected void postProcessEvent(IAccessEvent event) { event.prepareForDeferredProcessing(); }
@Override protected void postProcessEvent(IAccessEvent event) { event.prepareForDeferredProcessing(); }
@Override protected void postProcessEvent(IAccessEvent event) { event.prepareForDeferredProcessing(); }
@Override protected void appendInternal(IAccessEvent eventObject) { eventObject.prepareForDeferredProcessing(); publishEvent(eventObject); }
/** * Adds the Logback-access event. * Waits a moment for space becomes available if necessary. * If it times out, throws an exception. * * @param event the Logback-access event. */ public void push(IAccessEvent event) { event.prepareForDeferredProcessing(); event = (IAccessEvent) deserialize(serialize(event)); try { if (!queue.offer(event, TIMEOUT_FOR_QUEUE_ACCESS.getSeconds(), TimeUnit.SECONDS)) { throw new IllegalStateException("Could not push a Logback-access event: event=[" + event + "]"); } } catch (InterruptedException exc) { Thread.currentThread().interrupt(); throw new IllegalStateException("Could not push a Logback-access event: event=[" + event + "]", exc); } }
private Object buildSerializedAccessEvent() throws IOException, ClassNotFoundException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); IAccessEvent ae = DummyAccessEventBuilder.buildNewAccessEvent(); // average time for the next method: 5000 nanos ae.prepareForDeferredProcessing(); oos.writeObject(ae); oos.flush(); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); HardenedAccessEventInputStream hardenedOIS = new HardenedAccessEventInputStream(bais); Object sae = hardenedOIS.readObject(); hardenedOIS.close(); return sae; }
IAccessEvent ae = DummyAccessEventBuilder.buildNewAccessEvent(); ae.prepareForDeferredProcessing(); oos.writeObject(ae); oos.flush(); t1 = System.nanoTime(); ae.prepareForDeferredProcessing(); oos.writeObject(ae); oos.flush();
@Test public void callingPrepareForDeferredProcessingShouldBeIdempotent() { String key = "key-"+diff; String val = "val-"+diff; IAccessEvent ae = DummyAccessEventBuilder.buildNewAccessEvent(); DummyRequest request = (DummyRequest) ae.getRequest(); Map<String, String> headersMap = request.getHeaders(); Map<String, String[]> parametersMap = request.getParameterMap(); headersMap.put(key, val); request.setAttribute(key, val); parametersMap.put(key, new String[] {val}); ae.prepareForDeferredProcessing(); assertEquals(val, ae.getAttribute(key)); assertEquals(val, ae.getRequestHeader(key)); assertEquals(val, ae.getRequestParameter(key)[0]); request.setAttribute(key, "change"); headersMap.put(key, "change"); parametersMap.put(key, new String[] {"change"}); ae.prepareForDeferredProcessing(); assertEquals(val, ae.getAttribute(key)); assertEquals(val, ae.getRequestHeader(key)); assertEquals(val, ae.getRequestParameter(key)[0]); }
@Test public void testAttributesAreNotTakenFromRecycledRequestWhenProcessingDeferred() { DummyRequest request = new DummyRequest(); DummyResponse response = new DummyResponse(); DummyServerAdapter adapter = new DummyServerAdapter(request, response); IAccessEvent event = new AccessEvent(request, response, adapter); request.setAttribute("testKey", "ORIGINAL"); event.prepareForDeferredProcessing(); request.setAttribute("testKey", "NEW"); // Event should capture the original value assertEquals("ORIGINAL", event.getAttribute("testKey")); } }