2013-07-26 15 views
7

(バージョン:ネッティー4.0.4.Final)exceptionCaught()メソッドでChannelOutboundHandler例外がキャッチされないのはなぜですか? (ネッティー4.0.4.Final)

例外はChannelInboundHandlerに上昇した場合、私はexceptionCaught()方法でそれを扱うことができますが、例外はChannelOutboundHandlerに上昇した場合、私はできません。なぜなら、exceptionCaught()はコールではないからです。なぜこれはそうですか?

あり、このようanalize未来の結果により、アウトバウンドの例外を処理するための唯一の方法である:

channel.writeAndFlush(serverPacket).addListener(new ChannelFutureListener() { 
     @Override 
     public void operationComplete(ChannelFuture future) throws Exception { 
      if (!future.isSuccess()) { 
       future.cause().printStackTrace(); 
      } 
     } 
}); 

は、しかし、それは非常に不便です。

答えて

10

これは設計によるものです。Outbound操作のみがFutureを介して通知されます。それ以外の場合は、パフォーマンスのペナルティが2倍の通知を行う必要があります。それをexceptionCaughtハンドラに伝播させたい場合は、ChannelFutureListener.FIRE_EXCEPTION_ON_FAILUREをリスナーとして返されたChannelFutureに追加することができます。

関連する問題