Foros: Open Discussion (Thread #37300)

TERASOLUNA Batch Framework for JavaのDBCollectorについて (2015-11-18 10:23 by ビン #77204)

お疲れ様です。

TERASOLUNA Batch Framework for Java 3.x.xを利用しております。
BLogicの中に、DBCollectorを利用して、データを取得していますが、
問題は取得した結果が0件の判断できませんね。
QueryDAOを利用すれば判断できますが、DBCollectorを利用する場合、どのような判断できるのかお教えて頂けませんか。

宜しくお願い致します。

Responder al #77204×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Entrar

Re: TERASOLUNA Batch Framework for JavaのDBCollectorについて (2015-11-25 20:05 by komodan #77247)

利用されているTERASOLUNA Batch Framework for Java(以下、フレームワークと言います)のバージョンが3.2.0以降であれば、
Collector#hasNextを利用して取得した結果が0件かどうか判断できます。
(Collector#hasNextはCollector#nextで次に返却するデータが無い場合はfalseを返すメソッドです。)

■サンプルコード
(同梱されているチュートリアルのSMP001BLogicのコードを元にしています)
===
// コレクタ
Collector<NyusyukkinData> collector = new DBCollector<NyusyukkinData>(
this.queryRowHandleDAO, "SMP001.selectNyusyukkin", null);
try {
NyusyukkinData inputData = null;
if (!collector.hasNext()) {
// 取得したデータが0件だった場合の処理
return 0;
}

while (collector.hasNext()) {
// 取得したデータ1件ごとに対する処理
inputData = collector.next();
}
===

上記の手順は一例のご紹介になります。
拡張入力チェックエラーハンドラクラスを指定していた場合など、
他の条件によっては、別の方法をご紹介できると思います。

上記の方法ではやりたいことを満たせなかった場合は、
お手数ですが使用しているフレームワークの詳細なバージョンも添えて詳細にご質問いただけますでしょうか。

フレームワークの詳細なバージョンは、
お使いのterasoluna-batch-3.x.x.jarを解凍した中にあるMETA-INF/MANIFEST.MFファイルにある
Implementation-Versionの記述から確認できます。

よろしくお願いします。
Responder al #77204

Responder al #77247×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Entrar

Re: TERASOLUNA Batch Framework for JavaのDBCollectorについて (2015-11-26 18:41 by ビン #77257)

[Reply To Message #77247]
> 利用されているTERASOLUNA Batch Framework for Java(以下、フレームワークと言います)のバージョンが3.2.0以降であれば、
> Collector#hasNextを利用して取得した結果が0件かどうか判断できます。
> (Collector#hasNextはCollector#nextで次に返却するデータが無い場合はfalseを返すメソッドです。)
>
> ■サンプルコード
> (同梱されているチュートリアルのSMP001BLogicのコードを元にしています)
> ===
> // コレクタ
> Collector<NyusyukkinData> collector = new DBCollector<NyusyukkinData>(
> this.queryRowHandleDAO, "SMP001.selectNyusyukkin", null);
> try {
> NyusyukkinData inputData = null;
> if (!collector.hasNext()) {
> // 取得したデータが0件だった場合の処理
> return 0;
> }
>
> while (collector.hasNext()) {
> // 取得したデータ1件ごとに対する処理
> inputData = collector.next();
> }
> ===
>
> 上記の手順は一例のご紹介になります。
> 拡張入力チェックエラーハンドラクラスを指定していた場合など、
> 他の条件によっては、別の方法をご紹介できると思います。
>
> 上記の方法ではやりたいことを満たせなかった場合は、
> お手数ですが使用しているフレームワークの詳細なバージョンも添えて詳細にご質問いただけますでしょうか。
>
> フレームワークの詳細なバージョンは、
> お使いのterasoluna-batch-3.x.x.jarを解凍した中にあるMETA-INF/MANIFEST.MFファイルにある
> Implementation-Versionの記述から確認できます。
>
> よろしくお願いします。

ご回答、ありがとうございます。

> if (!collector.hasNext()) {
> // 取得したデータが0件だった場合の処理
> return 0;
> }
取得データは0件だけではなく、DBアクセスなどの例外もReturn 0となりますね。
Responder al #77247

Responder al #77257×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Entrar

Re: TERASOLUNA Batch Framework for JavaのDBCollectorについて (2015-11-27 19:21 by komodan #77261)

書いていただいたとおり、例外が発生した際にもReturn 0となる(Collector#hasNextがfalseとなる)場合があります。

DBアクセス例外やデータの入力チェックエラー例外が発生した時に、
拡張例外ハンドラや入力チェックエラーハンドラを使って
CollectorExceptionHandlerStatus(ValidateErrorStatus)のSKIPやENDをreturnすると、例外が発生したデータを無視します。

例えば、例外発生データ1件だけがDBに格納されていたとして、例外ハンドラでSKIPやENDを設定する実装になっていると、
例外発生データ1件を無視するので、結果的に0件という扱いになってしまいます。

上記の状況にあてはまっていますでしょうか?
Responder al #77257

Responder al #77261×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Entrar