2017-03-17 7 views
0

私は自分のプロジェクトでSpring Integrationを使用しています。行を挿入し結果を返さないストアドプロシージャがあります。 int-jdbc:stored-proc-outbound-gatewayを使用すると、フローは終了して次のチャネルに接続しません。結果を返さないストアドプロシージャを処理する最善の方法

DEBUG [org.springframework.jdbc.core.JdbcTemplate.doInCallableStatement] CallableStatement.execute() returned 'false' 
DEBUG [org.springframework.jdbc.core.JdbcTemplate.doInCallableStatement] CallableStatement.getUpdateCount() returned 0 
DEBUG [org.springframework.jdbc.core.JdbcTemplate.extractReturnedResults] CallableStatement.getUpdateCount() returned -1 

私の要件は、ストアドプロシージャが結果を返さない場合でもフローを継続することです。どのような方法で対処するのですか?

UPDATE

アルテムの応答の後、私は次のようにストアドプロシージャの発信チャネルアダプタを設定している:

<int:service-activator ref="msgHandler" method="buildRequestBasedDataSource" input-channel="PQPutUserBAInformation-SPCall2" output-channel="PQPutUserBAInformation-publishSubscribeChannel"/> 
    <!-- PQPutUserBAInformation Channel --> 

     <int:publish-subscribe-channel id="PQPutUserBAInformation-publishSubscribeChannel" /> 

     <int-jdbc:stored-proc-outbound-channel-adapter 
         id="PQPutUserBAInformation-AWD-StoredProcedure2" 
         channel="PQPutUserBAInformation-publishSubscribeChannel" 
         data-source="routingDataSource" 
         stored-procedure-name="ZSPPQINSERTUSERIDBA" 
         ignore-column-meta-data="true" 
         use-payload-as-parameter-source = "false" > 

         <int-jdbc:sql-parameter-definition name="P_USERID" direction="IN" type="VARCHAR" /> 

         <int-jdbc:parameter name="P_USERID" expression="#xpath(payload, '//CurrentUserID')" /> 
     </int-jdbc:stored-proc-outbound-channel-adapter> 

     <!-- Service Activator to build the Message from the Stored Procedure ResultSet --> 
    <int:service-activator input-channel="PQPutUserBAInformation-publishSubscribeChannel" ref="msgHandler" method="buildMessageFromExtSysResponse" />  
+0

重複した質問。ここを参照してください。私は同じことを尋ねた:) http://stackoverflow.com/questions/42676147/spring-integration-chain-flow-handling-void-gateway-calls/42676419#42676419 – haju

+0

私のストアドプロシージャが挿入中に失敗した場合私はエラーメッセージが必要です。だから、あなたの質問はその場合に私を助けないかもしれません。 –

+0

ストアドプロシージャで例外をキャッチし、それを飲み込んでいますか? Oracleの例外をゲートウェイに伝播し、エラー・チャネルを使用できるようにする必要があります。それが私の誤りのためにしたことです。 – haju

答えて

1

ではなくstored-proc-outbound-channel-adapterを使用することを考えてみましょう。

その後、このアダプタの入力としてpublish-subscribe-channelを使用することを検討してください。もう1人の加入者をストリームに進めるようにします。

同じ動作を実現する別の方法はrecipient-list-routerです。

+0

遅れて申し訳ありません。最近私は休暇中でした。 'int-jdbc:stored-proc-outbound-channel-adapter'と' int:publish-subscribe-channel'を追加しましたが、例外が発生しました。 'java.lang.IllegalArgumentException:出力チャネルが提供されました。チェーンの最後のハンドラはMessageProducerインタフェースを実装していません。 ' –

+1

あなたは 'chain'を使用しているとは言いませんでした。もちろん、あなたがアウトバウンドチャンネルアダプタを使うつもりなら、それを壊す必要があります。 –

+0

私は 'chain'コンポーネントを使っていることを教えてくれないことをお詫びします。 'stored-proc-outbound-channel-adapter'の入出力チャネルを指定する方法。私は初めてそれを使用しています。あなたは一例を教えてください。私は、ストアドプロシージャから結果(ResultSet)を取得する可能性があることを忘れていました。だから、このような状況にどう対処するかについて私に示唆してもらえますか? –

関連する問題