/ / SEVERE: Event konnte nicht gesendet werden: Eventbus com.google.common.eventbus.SubscriberExceptionContext - java, spring, guava

SEVERE: Event konnte nicht gesendet werden: Eventbus com.google.common.eventbus.SubscriberExceptionContext - java, spring, guava

Für EventBus habe ich den Code in meiner Java-Spring-App zusammengeführt und habe die volle Kontrolle darüber, aber das Ergebnis hat sich nicht geändert.

Wenn ich den EventBus im Frühjahr st (javaw) starte, gibt es kein Problem, aber wenn ich mit java -jar project.jar auf dem Server laufe, gibt es das gleiche SEVERE: Event konnte nicht gesendet werden: error

Das unten funktioniert nicht für mich ..

package edu.uams.event;

import java.awt.EventQueue;
import java.lang.reflect.InvocationTargetException;
import java.util.concurrent.Executor;

import org.apache.log4j.Logger;

import com.google.common.eventbus.AsyncEventBus;
import com.google.common.eventbus.EventHandler;
import com.google.common.eventbus.SubscriberExceptionHandler;


import edu.uams.domain.TirEvent;
import edu.uams.pacs.IncomingFileMonitor;

public class AysncTraumaEventBus extends AsyncEventBus {

private final static Logger logger = Logger.getLogger(AysncTraumaEventBus.class);
private String name = null;

public AysncTraumaEventBus(Executor executor,
SubscriberExceptionHandler subscriberExceptionHandler) {
super(executor, subscriberExceptionHandler);

logger.info("AysncTraumaEventBus created.");
}

public AysncTraumaEventBus(String name, Executor executor) {
super(name,executor);
this.name=name;
logger.info("AysncTraumaEventBus created. Name:"+this.name);
}

@Override
public void register(Object object) {
super.register(object);
}

@Override
public void unregister(Object object) {
super.unregister(object);
}

@Override
public void dispatch(Object event, EventHandler wrapper) {
try {
logger.info("Let"s dispatch Aysnchroneous Trauma Event:"+ ((TirEvent) event).getResultMessage());
wrapper.handleEvent(event);
} catch (InvocationTargetException e) {
// My logger
logger.error("Could not dispatch event: " + event + " to handler " + wrapper+"  e:"+e.getMessage());
logger.info("Lets try to disptach again!");
super.post(new ExceptionEvent(event, e));
}
}


public static final class ExceptionEvent {
public final Object event;
public final InvocationTargetException exception;

public ExceptionEvent(final Object event, final InvocationTargetException exception) {
this.event = event;
this.exception = exception;
}
}

}

Irgendwie kann der EventHandler das Zielereignis nicht aufrufen.

wrapper.handleEvent (Ereignis);

Wenn Sie den Wrapper (EventHandler) betrachten:

public void handleEvent(Object event) throws InvocationTargetException {
checkNotNull(event);
try {
method.invoke(target, new Object[] { event });
} catch (IllegalArgumentException e) {
throw new Error("Method rejected target/argument: " + event, e);
} catch (IllegalAccessException e) {
throw new Error("Method became inaccessible: " + event, e);
} catch (InvocationTargetException e) {
if (e.getCause() instanceof Error) {
throw (Error) e.getCause();
}
throw e;
}
}

Sie sehen das method.invoke (Ziel, neues Objekt [] {Ereignis}); löst die InvocationTargetException aus der Method.class aus

public Object invoke(Object obj, Object... args)
throws IllegalAccessException, IllegalArgumentException,
InvocationTargetException
{
if (!override) {
if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) {
Class<?> caller = Reflection.getCallerClass(1);

checkAccess(caller, clazz, obj, modifiers);
}
}
MethodAccessor ma = methodAccessor;             // read volatile
if (ma == null) {
ma = acquireMethodAccessor();
}
return ma.invoke(obj, args);
}

Irgendwie kann es nicht aufrufen .. Aber der interessanteste Teil ist, dass die gleiche JAR-Datei zusammen mit EventBus in STS Run (javaw) gut laufen kann, aber wenn ich Java von der Kommandozeile als java -jar project.jar ausführe, kann sie das Ereignis nicht versenden.

Antworten:

11 für die Antwort № 1
@Subscribe
@AllowConcurrentEvents
public void receivedDicomFile(TirEvent event){

try {



} catch (ClassNotFoundException e) {
logger.error(e.getMessage());
} catch (SQLException e) {
logger.error(e.getMessage());
} catch(Exception e){
logger.error(e.getMessage());
}



}

Es braucht immer einen Versuch zu fangen .. Danke @dwnz für Ihre Hilfe