1

BlazeDS を介して Java バックエンドと通信する Flex アプリケーションがあります。

以前は、SQL エラーが発生した場合、SQL 例外が Flex アプリケーションでアラートとして表示され、CallResponder の障害ハンドラーが呼び出されて、何か問題が発生したことがユーザーに通知されていました。

Flex コード: Call Responder:

<s:CallResponder id="loginResult" result="loginResult_resultHandler(event)" fault="displayGenericErrorMessage(event)"/>

サービスへの呼び出し:

var authenticationMessage:String = loginResult.lastResult as String;

古い Java コード:

Map resultSet = simpleJdbcCall.execute();
ArrayList list = (ArrayList) resultSet.get("RESULT_SET");

上記のコードからわかるように、SQL 実行ステートメントは try-catch ブロック内にありません (コーディング エラー)。これは実際にはそれほど問題にはなりませんが、例外をエラー ログに出力できるようにしたかったので、execute ステートメントを try-catch ブロック内に配置することは正しいことです。したがって、コードは次のようになりました。

新しい Java コード:

ArrayList list = new ArrayList();

        try {
            Map resultSet = simpleJdbcCall.execute();
            list = (ArrayList) resultSet.get("RESULT_SET");
        }
        catch (Exception e) {
            logger.error(e.getMessage());
        }

以前は (try-catch ブロックなしで)、例外が発生した場合、例外のメッセージが Flex に戻され、アラートとして表示され、CallResponder の障害ハンドラーが呼び出されていました。必ずしも例外をアラートとして表示する必要はありませんでしたが、何か問題が発生したことをユーザーに通知するため、フォールト ハンドラーを呼び出すことは適切でした。

(try-catch ブロックを使用して) 例外が発生した場合、必要に応じて例外がログに出力されますが、CallResponder の障害ハンドラーは呼び出されません。Flex は、サービスがnull正しくない値で正常に返されたと考えています。

呼び出しが成功しなかったこと、および try-catch ブロックを削除する以外に障害ハンドラーを呼び出す必要があることを Flex に示す他の方法はありますか?

前もって感謝します。

4

1 に答える 1

3

サーバー側でログに記録された後に例外を再スローするだけで、以前と同様に Flex フロントエンドに適切に処理されます。

于 2013-01-16T11:41:28.877 に答える