2016-10-31 2 views
0

メッセージゲートウェイメソッドはタイプセマンティクスを返します。void戻り値の型は応答が生成されないことを示します(応答チャネルは作成されません)。非同期呼び出しモード(AsyncTaskExecutorを利用)。GatewayProxyFactoryBeanは、未返答メソッドとして<Void>を考慮しない

ここで、これらの2つを結合して非応答メソッドを非同期にしたい場合、返り値の型をFuture<Void>と宣言するという単なる可能性があると主張できます:メソッドは非同期的に呼び出されます。 Future)、メソッドは応答を期待しません(型パラメーターVoidを宣言することによって)。 GatewayProxyFactoryBeanのソースコードを見てみると

は、そうではありません明確である:

private Object invokeGatewayMethod(MethodInvocation invocation, boolean runningOnCallerThread) throws Exception { 
    ... 
    boolean shouldReply = returnType != void.class; 
    ... 

だけの簡単なボイド戻り値の型がチェックされます。だから私はこれが機能かバグかと思っています。これが機能の場合、Future<Void>の戻り値の型は、期待通りに導くことができず、(私の意見では)別の方法で処理する必要があります(検証エラーなどが発生します)。

答えて

0

この場合、Future<Void>を返す点は何ですか?

Future<Void>を「特別」として扱うことができない理由は、下流のフローがそのようなオブジェクトを返す可能性があることです。フレームワークは意図を暗示することはできません。

応答を非同期的に返さないフローを実行する場合は、要求チャネルをExecutorChannelにするだけです。 XML構成を使用している場合は、documentation is here

Java構成を使用している場合は、ExecutorChannelのチャネル@Beanを定義します。

関連する問題