for (Observer observer : observers) {
try {
observer.invoke(event);
} catch (Throwable t) {
if (!(event instanceof ObserverFailed)) {
fireEvent(new ObserverFailed(observer, event, t));
}
if (t instanceof InvocationTargetException && t.getCause() != null) {
Logger.getLogger(ObserverManager.class.getName()).log(Level.SEVERE, "error invoking " + observer, t.getCause());
} else {
Logger.getLogger(ObserverManager.class.getName()).log(Level.SEVERE, "error invoking " + observer, t);