0

データベースとしてMySQLを使用してWSO2 DataService Componentを実験しています。WSO2 コンポーネントを使用して MySQL データベースをサービスとして公開し、WSDL を使用して Java コードを生成することができました。

Java CXF クライアントを使用して、データベースに接続し、CRUD 操作を実行できます。今、私が最も関心を持っているのは、WSO2 DSS コンポーネントがダーティ データをどのように処理するかということです。シナリオをテストするために、次のコードがあります。

public class TestService{

//Code to connect to service

private void callInsertOperation(HermesCompleteServicePortType port) {
        ((BindingProvider) port).getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
        port.beginBoxcar();
        port.insertOperation("Key1", "TestData", Double.valueOf(0.00));
        try {
            port.endBoxcar(null);
        } catch (DataServiceFault e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("Insert completed");
    }

    private void callUpdateOperation(HermesCompleteServicePortType port) {
        ((BindingProvider) port).getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
        port.beginBoxcar();
        port.updateOperation("Key2", "TestData1", Double.valueOf(10.00));
        try {
            port.endBoxcar(null);
        } catch (DataServiceFault e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("Update completed");
    }

}

この問題は、次の条件に該当する場合の更新操作にあります。

  1. 更新は存在しないキーで行われます。つまり、Key2 は存在しません。
  2. 更新は古いデータに対するものです。つまり、キーは存在しますが、データは古くなっています

これら 2 つのケースでは、更新操作が失敗した/例外をスローした/行に影響しなかったことを DataService が示すと想定します。しかし、それは何の兆候も示さず、wso2ログもチェックして、これに関連するメッセージ/例外があるかどうかを確認しましたが、何も表示されませんでした.

そして明らかに、db テーブルは更新操作後も変更されません。

WSO2 DSS はこれらのシナリオをどのように処理しますか? 更新操作が成功しなかった場合、クライアントはどのようにして知ることができますか? コードに何か不足していますか?

EDITここで 述べたように、ストアドプロシージャを使用して結果行の数を確認したくありません

4

1 に答える 1

2

どうやら、DSS には、更新操作が行に影響を与えたかどうかを識別する直接的な機能はありません。ご指摘の 2 つのシナリオでは、SQLException は発生しません。これらは、mysql (データベース) コマンド プロンプトから実行しても、通常の更新操作として実行されます。ただし、影響を受ける行 = 0 として結果が表示されます。DSS の現在の実装では、実行が成功しないことを除いて、クライアントに失敗メッセージを返しません。これは、ここでは当てはまりません。

これは、INSERT/UPDATE などの特定のクエリ呼び出しで「更新された行数」を返す DSS の将来のリリースに新機能として追加されます。

于 2013-02-01T10:32:51.200 に答える