Download
Magazine
Develop
Account
Download
Magazine
Develop
Login
Forgot Account/Password
Create Account
Language
Help
Language
Help
×
Login
Login Name
Password
×
Forgot Account/Password
Category:
Software
People
PersonalForge
Magazine
Wiki
Search
OSDN
>
Find Software
>
System
>
TERASOLUNA Framework
>
Forums
>
Open Discussion
>
【バッチFW】コレクターでのエラーチェックに関して
TERASOLUNA Framework
Description
Project Summary
Developer Dashboard
Web Page
Developers
Image Gallery
List of RSS Feeds
Activity
Statistics
History
Downloads
List of Releases
Stats
Source Code
Code Repository list
Subversion
View Repository
Ticket
Ticket List
Milestone List
Type List
Component List
List of frequently used tickets/RSS
Submit New Ticket
Documents
Wiki
FrontPage
Title index
Recent changes
Doc Mgr
List Docs
Communication
Forums
List of Forums
Open Discussion (1277)
Mailing Lists
list of ML
terasoluna-information
News
Forums:
Open Discussion
(Thread #22673)
Return to Thread list
RSS
【バッチFW】コレクターでのエラーチェックに関して (2009-05-08 17:53 by
Anonymous
#43671)
Reply
Create ticket
コレクターでファイルより取得するケースで、エラーチェックを行った場合、
エラーデータはログ出力され、エラーでないものはBLogicの引数として渡されますが
#エラーがあっても続行する設定とする<property name="errorContinueFlg" value="true"/>
BLogic実行時にエラーがあったのか判定はできるのでしょうか?
もしくは、エラーは全て出力するが、コレクター以降の処理を行わないよう設定できるのでしょうか?
エラーデータはログに出力して処理終了とさせたいのですが、
#データをまとめて修正し、バッチを再実行するため
判定方法がわかりませんでしたのでご教授頂ければと思います。
よろしくお願いします。
Reply to #43671
×
Subject
Body
Reply To Message #43671 > > コレクターでファイルより取得するケースで、エラーチェックを行った場合、 > エラーデータはログ出力され、エラーでないものはBLogicの引数として渡されますが > #エラーがあっても続行する設定とする<property name="errorContinueFlg" value="true"/> > > BLogic実行時にエラーがあったのか判定はできるのでしょうか? > もしくは、エラーは全て出力するが、コレクター以降の処理を行わないよう設定できるのでしょうか? > > エラーデータはログに出力して処理終了とさせたいのですが、 > #データをまとめて修正し、バッチを再実行するため > 判定方法がわかりませんでしたのでご教授頂ければと思います。 > よろしくお願いします。
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.)
Login
Nickname
Preview
Post
Cancel
RE: 【バッチFW】コレクターでのエラーチェックに関して (2009-05-11 10:48 by
ahn
#43722)
Reply
Create ticket
質問の内容の「エラーチェック」がcommon validationを使った入力チェックであることを前提に
回答させて頂きます。
「<property name="errorContinueFlg" value="true"/>」
この設定は入力データ(質問の場合はファイルデータ)の各項目を入力チェック例えば、文字数チェックや必須チェックなど、を行い、エラー項目がある場合処理を継続するかしないかを設定する項目になります。
例えば、以下のような入力データがあり
1行:111,111,111
2行:222,222,sss
3行:333,333,333
validationチェックを数字チェックにした場合、上記の設定を「value="true"」にすると
1行目のデータを使いBLogic実行、2行目はスキップ(ログのみ出力)、3行目を使いBLogic実行
になります。
上記の設定を「value="false"」にすると
1行目のデータを使いBLogic実行、2行目の警告ログ出力、以降はエラーによりジョブが中断されます。
「BLogic実行時にエラーがあったのか判定」に関するF/Wの機能はありません。
なぜなら、業務ロジック内で発生した業務エラーは業務仕様をから判定することになり
F/Wが判断することができないからであります。
質問の内容が、入力チェックの結果、エラーが一つでもある場合、BLogicは実行せず
全ファイルデータのエラー状況だけログ出力したい場合は以下の方法をお勧めします。
対応方法:二つのジョブで処理を行う。
BLogicの処理内容がないジョブを「value="true"」で実行し、警告エラーがない
場合、本来のジョブを実行する。
この方法であればファイル内にある異常データがすべてログに出力されると思います。
他にF/Wを拡張する方法もあると思います。
上記の処理を制御するF/Wのクラスは
jp.terasoluna.fw.batch.validation.StandardValidationResultHandler
です。
ValidationResultHandlerインターフェースを使い、処理を実装し
batchapps/common/ValidationContext-AsyncBatch.xmlの以下の設定に実装した
クラスを設定すると、拡張したソースコードを使うことができます。
<!-- ハンドラ定義 -->
<bean id="validationResultHandler" class="jp.terasoluna.fw.batch.validation.StandardValidationResultHandler">
<property name="errorContinueFlg" value="true" />
<property name="messageAccessor" ref="messageAccessor" />
</bean>
Reply to
#43671
Reply to #43722
×
Subject
Body
Reply To Message #43722 > 質問の内容の「エラーチェック」がcommon validationを使った入力チェックであることを前提に > 回答させて頂きます。 > > 「<property name="errorContinueFlg" value="true"/>」 > この設定は入力データ(質問の場合はファイルデータ)の各項目を入力チェック例えば、文字数チェックや必須チェックなど、を行い、エラー項目がある場合処理を継続するかしないかを設定する項目になります。 > 例えば、以下のような入力データがあり > 1行:111,111,111 > 2行:222,222,sss > 3行:333,333,333 > validationチェックを数字チェックにした場合、上記の設定を「value="true"」にすると > 1行目のデータを使いBLogic実行、2行目はスキップ(ログのみ出力)、3行目を使いBLogic実行 > になります。 > 上記の設定を「value="false"」にすると > 1行目のデータを使いBLogic実行、2行目の警告ログ出力、以降はエラーによりジョブが中断されます。 > > 「BLogic実行時にエラーがあったのか判定」に関するF/Wの機能はありません。 > なぜなら、業務ロジック内で発生した業務エラーは業務仕様をから判定することになり > F/Wが判断することができないからであります。 > > 質問の内容が、入力チェックの結果、エラーが一つでもある場合、BLogicは実行せず > 全ファイルデータのエラー状況だけログ出力したい場合は以下の方法をお勧めします。 > > 対応方法:二つのジョブで処理を行う。 > BLogicの処理内容がないジョブを「value="true"」で実行し、警告エラーがない > 場合、本来のジョブを実行する。 > この方法であればファイル内にある異常データがすべてログに出力されると思います。 > > 他にF/Wを拡張する方法もあると思います。 > 上記の処理を制御するF/Wのクラスは > jp.terasoluna.fw.batch.validation.StandardValidationResultHandler > です。 > ValidationResultHandlerインターフェースを使い、処理を実装し > batchapps/common/ValidationContext-AsyncBatch.xmlの以下の設定に実装した > クラスを設定すると、拡張したソースコードを使うことができます。 > <!-- ハンドラ定義 --> > <bean id="validationResultHandler" class="jp.terasoluna.fw.batch.validation.StandardValidationResultHandler"> > <property name="errorContinueFlg" value="true" /> > <property name="messageAccessor" ref="messageAccessor" /> > </bean> > > > > > > > > > > > > > > > > > >
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.)
Login
Nickname
Preview
Post
Cancel
RE: 【バッチFW】コレクターでのエラーチェックに関して (2009-05-11 12:38 by
Anonymous
#43724)
Reply
Create ticket
ご回答ありがとうございます。
対応方法の1つとして、二つのジョブで処理を行う方法をご教授頂きましたが、
「警告エラーがない場合」というのは、どこ(2つ目のジョブ?)で
どのように判定すればよいのでしょうか?
>BLogicの処理内容がないジョブを「value="true"」で実行し、警告エラーがない
>場合、本来のジョブを実行する。
>この方法であればファイル内にある異常データがすべてログに出力されると思います。
Reply to
#43671
Reply to #43724
×
Subject
Body
Reply To Message #43724 > > ご回答ありがとうございます。 > > 対応方法の1つとして、二つのジョブで処理を行う方法をご教授頂きましたが、 > 「警告エラーがない場合」というのは、どこ(2つ目のジョブ?)で > どのように判定すればよいのでしょうか? > > > > >BLogicの処理内容がないジョブを「value="true"」で実行し、警告エラーがない > >場合、本来のジョブを実行する。 > >この方法であればファイル内にある異常データがすべてログに出力されると思います。
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.)
Login
Nickname
Preview
Post
Cancel
RE: 【バッチFW】コレクターでのエラーチェックに関して (2009-05-11 16:47 by
ahn
#43728)
Reply
Create ticket
ご質問の業務を対応するための機能はF/Wが提供していないため、回答した処理方法を参考に
独自の対応方式を検討することをお勧めします。
以下は変形的なやり方ではありますが、単純な(分割ジョブではない)ジョブの場合は
問題なく対応できると思いますのでご参考下さい。
エラーが発生した場合、ジョブ終了コードを変更する方法。
①Springを使いチェック結果保持用クラスのインスタンスを生成。
②インスタンスを、前処理、後処理、ValidationResultHandlerにDIする。
③前処理にてチェック結果を初期化
④ValidationResultHandlerの処理結果をチェック結果保持用インスタンスに反映
⑤後処理にて処理結果を確認し、ジョブ終了方法を変更
上記の方法で実装したサンプルです。
ジョブ前処理
public class JB0004PreLogic implements SupportLogic<JobContext> {
private CheckError checkError = null;
/**
* サポートロジック
*
* @param jobContext ジョブコンテキストクラス
* @return サポートロジックの実行結果、BLogicResultインスタンス。
*/
public BLogicResult execute(JobContext jobContext) {
checkError.setValue(false);
return new BLogicResult(ReturnCode.NORMAL_CONTINUE);
}
/**
* @param checkError 設定する checkError
*/
public void setCheckError(CheckError checkError) {
this.checkError = checkError;
}
}
ValidationResultHandlerの実装
public class TestValidationResultHandler
implements ValidationResultHandler {
……
private CheckError checkError = null;
……
public boolean handle(BindException bindException, Object value) {
if (bindException.getErrorCount() > 0) {
if (errorContinueFlg) {
……
StringBuilder logStr = new StringBuilder();
logStr.append(errorString.toString());
logStr.append(" : [collectedData=");
logStr.append(value);
logStr.append("]");
log.warn(logStr.toString());
checkError.setValue(true);
return false;
} else {
throw new ValidateException(bindException);
}
}
return true;
}
……
/**
* @param checkError 設定する checkError
*/
public void setCheckError(CheckError checkError) {
this.checkError = checkError;
}
}
ジョブ後処理
public class JB0004PostLogic implements SupportLogic<JobContext> {
private CheckError checkError = null;
/**
* サポートロジック
*
* @param jobContext ジョブコンテキストクラス
* @return サポートロジックの実行結果、BLogicResultインスタンス。
*/
public BLogicResult execute(JobContext jobContext) {
if(checkError != null && checkError.isValue()){
return new BLogicResult(ReturnCode.ERROR_END);
}
return new BLogicResult(ReturnCode.NORMAL_CONTINUE);
}
/**
* @param checkError 設定する checkError
*/
public void setCheckError(CheckError checkError) {
this.checkError = checkError;
}
}
結果保持用クラス
public class CheckError {
private boolean value = false;
/**
* @return value
*/
public boolean isValue() {
return value;
}
/**
* @param value 設定する value
*/
public void setValue(boolean value) {
this.value = value;
}
}
ジョブBean定義ファイルの定義例
<!--validationResultHandler-->
<bean id="checkError" class="jp.co.nttdata.my_test.CheckError"/>
<bean
class="jp.co.nttdata.my_test.TestValidationResultHandler" id="validationResultHandler">
<property name="errorContinueFlg" value="true"/>
<property name="messageAccessor" ref="messageAccessor"/>
<property name="checkError" ref="checkError"/>
</bean>
<!-- ジョブ前処理 -->
<util:list id="jobPreLogicList">
<bean class="jp.co.nttdata.my_test.JB0004PreLogic">
<property name="checkError" ref="checkError"/>
</bean>
</util:list>
<!-- ジョブ後処理 -->
<util:list id="jobPostLogicList">
<bean class="jp.co.nttdata.my_test.JB0004PostLogic">
<property name="checkError" ref="checkError"/>
</bean>
</util:list>
ただし、この方法は変形的なサンプルであるため、分割ジョブ機能を使った
多重実行をする場合は正しく動作しない恐れもありますのでご注意ください。
(CheckErrorの動作がスレッドセーフではないため)
他の方法としては「ValidationResultHandler」の実装で
チェックエラーがある場合は特定のディレクトリにファイルを生成し
ファイル有無を確認することで正常、異常を判定する方法も考えられます。
※ 先ほどの回答で「batchapps/common/ValidationContext-AsyncBatch.xml」の中の定義を修正
するということは非同期デーモンを使う場合のみであり、通常はジョブBean定義内の設定になります。
Reply to
#43724
Reply to #43728
×
Subject
Body
Reply To Message #43728 > ご質問の業務を対応するための機能はF/Wが提供していないため、回答した処理方法を参考に > 独自の対応方式を検討することをお勧めします。 > 以下は変形的なやり方ではありますが、単純な(分割ジョブではない)ジョブの場合は > 問題なく対応できると思いますのでご参考下さい。 > > エラーが発生した場合、ジョブ終了コードを変更する方法。 > ①Springを使いチェック結果保持用クラスのインスタンスを生成。 > ②インスタンスを、前処理、後処理、ValidationResultHandlerにDIする。 > ③前処理にてチェック結果を初期化 > ④ValidationResultHandlerの処理結果をチェック結果保持用インスタンスに反映 > ⑤後処理にて処理結果を確認し、ジョブ終了方法を変更 > > 上記の方法で実装したサンプルです。 > ジョブ前処理 > public class JB0004PreLogic implements SupportLogic<JobContext> { > > private CheckError checkError = null; > > /** > * サポートロジック > * > * @param jobContext ジョブコンテキストクラス > * @return サポートロジックの実行結果、BLogicResultインスタンス。 > */ > public BLogicResult execute(JobContext jobContext) { > checkError.setValue(false); > return new BLogicResult(ReturnCode.NORMAL_CONTINUE); > } > > /** > * @param checkError 設定する checkError > */ > public void setCheckError(CheckError checkError) { > this.checkError = checkError; > } > } > > ValidationResultHandlerの実装 > > public class TestValidationResultHandler > implements ValidationResultHandler { > > …… > > private CheckError checkError = null; > > …… > > public boolean handle(BindException bindException, Object value) { > if (bindException.getErrorCount() > 0) { > if (errorContinueFlg) { > …… > StringBuilder logStr = new StringBuilder(); > logStr.append(errorString.toString()); > logStr.append(" : [collectedData="); > logStr.append(value); > logStr.append("]"); > log.warn(logStr.toString()); > > checkError.setValue(true); > > return false; > } else { > throw new ValidateException(bindException); > } > } > return true; > } > > …… > > /** > * @param checkError 設定する checkError > */ > public void setCheckError(CheckError checkError) { > this.checkError = checkError; > } > } > > ジョブ後処理 > > public class JB0004PostLogic implements SupportLogic<JobContext> { > > private CheckError checkError = null; > > /** > * サポートロジック > * > * @param jobContext ジョブコンテキストクラス > * @return サポートロジックの実行結果、BLogicResultインスタンス。 > */ > public BLogicResult execute(JobContext jobContext) { > if(checkError != null && checkError.isValue()){ > return new BLogicResult(ReturnCode.ERROR_END); > } > return new BLogicResult(ReturnCode.NORMAL_CONTINUE); > } > /** > * @param checkError 設定する checkError > */ > public void setCheckError(CheckError checkError) { > this.checkError = checkError; > } > > } > > 結果保持用クラス > > public class CheckError { > > private boolean value = false; > > /** > * @return value > */ > public boolean isValue() { > return value; > } > > /** > * @param value 設定する value > */ > public void setValue(boolean value) { > this.value = value; > } > } > > ジョブBean定義ファイルの定義例 > <!--validationResultHandler--> > <bean id="checkError" class="jp.co.nttdata.my_test.CheckError"/> > > <bean > class="jp.co.nttdata.my_test.TestValidationResultHandler" id="validationResultHandler"> > <property name="errorContinueFlg" value="true"/> > <property name="messageAccessor" ref="messageAccessor"/> > <property name="checkError" ref="checkError"/> > </bean> > > <!-- ジョブ前処理 --> > <util:list id="jobPreLogicList"> > <bean class="jp.co.nttdata.my_test.JB0004PreLogic"> > <property name="checkError" ref="checkError"/> > </bean> > </util:list> > > <!-- ジョブ後処理 --> > <util:list id="jobPostLogicList"> > <bean class="jp.co.nttdata.my_test.JB0004PostLogic"> > <property name="checkError" ref="checkError"/> > </bean> > </util:list> > > ただし、この方法は変形的なサンプルであるため、分割ジョブ機能を使った > 多重実行をする場合は正しく動作しない恐れもありますのでご注意ください。 > (CheckErrorの動作がスレッドセーフではないため) > > 他の方法としては「ValidationResultHandler」の実装で > チェックエラーがある場合は特定のディレクトリにファイルを生成し > ファイル有無を確認することで正常、異常を判定する方法も考えられます。 > > ※ 先ほどの回答で「batchapps/common/ValidationContext-AsyncBatch.xml」の中の定義を修正 > するということは非同期デーモンを使う場合のみであり、通常はジョブBean定義内の設定になります。
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.)
Login
Nickname
Preview
Post
Cancel