2015-02-23 26 views

risposta

1

Dai un'occhiata al progetto mdedetrich/mdc-async-netty-eventloopgroup su GitHub. Fondamentalmente, devi decorare EventLoopGroup.execute

@Override 
public void execute(Runnable runnable) { 
    delegate.execute(new Runnable() { 
     @Override 
     public void run() { 
      Map<String, String> oldMdcContext = MDC.getCopyOfContextMap(); 
      setContextMap(mdcContext); 
      try { 
       runnable.run(); 
      } finally { 
       setContextMap(oldMdcContext); 
      } 

     } 
    }); 
} 

private void setContextMap(Map<String, String> context) { 
    if (context == null) { 
     MDC.clear(); 
    } else { 
     MDC.setContextMap(context); 
    } 
} 
+0

Questa soluzione non funziona. Richiede anche una "istantanea" della mappa di contesto del thread che richiama MDCEventLoopGroup.fromThread(), e perde traccia di tutte le sue future modifiche, passando questa istantanea a tutti i runnables. Eppure non funziona ancora come in un ambiente multi-thread multi-core. Ho provato a modificarlo, ho provato anche a sovrascrivere i metodi submit (...) e schedule ... (...), oltre a sovrascrivere il metodo newChild (...) che crea un figlio con exec sovrascritto (...), invia (...) e pianifica ... (...) metodi senza successo: il contesto è ancora perduto. – Uniqus