データベースとして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");
}
}
この問題は、次の条件に該当する場合の更新操作にあります。
- 更新は存在しないキーで行われます。つまり、Key2 は存在しません。
- 更新は古いデータに対するものです。つまり、キーは存在しますが、データは古くなっています
これら 2 つのケースでは、更新操作が失敗した/例外をスローした/行に影響しなかったことを DataService が示すと想定します。しかし、それは何の兆候も示さず、wso2ログもチェックして、これに関連するメッセージ/例外があるかどうかを確認しましたが、何も表示されませんでした.
そして明らかに、db テーブルは更新操作後も変更されません。
WSO2 DSS はこれらのシナリオをどのように処理しますか? 更新操作が成功しなかった場合、クライアントはどのようにして知ることができますか? コードに何か不足していますか?
EDITここで 述べたように、ストアドプロシージャを使用して結果行の数を確認したくありません