@Override public void handle(QueryEvent event) { LOG.info("Processing " + event.getQueryId() + " of type " + event.getType()); try { writeLock.lock(); QueryState oldState = getState(); try { getStateMachine().doTransition(event.getType(), event); } catch (InvalidStateTransitonException e) { LOG.error("Can't handle this event at current state", e); eventHandler.handle(new QueryEvent(this.id, QueryEventType.INTERNAL_ERROR)); } // notify the eventhandler of state change if (oldState != getState()) { LOG.info(id + " Query Transitioned from " + oldState + " to " + getState()); } } finally { writeLock.unlock(); } }