private void notifyEventListeners(Event event) { if (event.getData() instanceof EventDataWrapper) { event = new Event(event.getHeader(), ((EventDataWrapper) event.getData()).getExternal()); } for (EventListener eventListener : eventListeners) { try { eventListener.onEvent(event); } catch (Exception e) { if (logger.isLoggable(Level.WARNING)) { logger.log(Level.WARNING, eventListener + " choked on " + event, e); } } } }
/** * @return deserialized event or null in case of end-of-stream */ public Event nextEvent(ByteArrayInputStream inputStream) throws IOException { if (inputStream.peek() == -1) { return null; } EventHeader eventHeader = eventHeaderDeserializer.deserialize(inputStream); EventData eventData; switch (eventHeader.getEventType()) { case FORMAT_DESCRIPTION: eventData = deserializeFormatDescriptionEventData(inputStream, eventHeader); break; case TABLE_MAP: eventData = deserializeTableMapEventData(inputStream, eventHeader); break; default: EventDataDeserializer eventDataDeserializer = getEventDataDeserializer(eventHeader.getEventType()); eventData = deserializeEventData(inputStream, eventHeader, eventDataDeserializer); } return new Event(eventHeader, eventData); }
@Override public Event nextEvent(ByteArrayInputStream inputStream) throws IOException { try { // Delegate to the superclass ... Event event = super.nextEvent(inputStream); // We have to record the most recent TableMapEventData for each table number for our custom deserializers ... if (event.getHeader().getEventType() == EventType.TABLE_MAP) { TableMapEventData tableMapEvent = event.getData(); tableMapEventByTableId.put(tableMapEvent.getTableId(), tableMapEvent); } return event; } // DBZ-217 In case an event couldn't be read we create a pseudo-event for the sake of logging catch(EventDataDeserializationException edde) { EventHeaderV4 header = new EventHeaderV4(); header.setEventType(EventType.INCIDENT); header.setTimestamp(edde.getEventHeader().getTimestamp()); header.setServerId(edde.getEventHeader().getServerId()); if(edde.getEventHeader() instanceof EventHeaderV4) { header.setEventLength(((EventHeaderV4)edde.getEventHeader()).getEventLength()); header.setNextPosition(((EventHeaderV4)edde.getEventHeader()).getNextPosition()); header.setFlags(((EventHeaderV4)edde.getEventHeader()).getFlags()); } EventData data = new EventDataDeserializationExceptionData(edde); return new Event(header, data); } } };