このトピックでは、バッチ・データ・ストリーム (BDS) フレームワークを使用する方法の例を示します。
始める前に
使用する適切なパターンを指定します。パターンは、必要なデータ・ストリームのタイプに基づいて選択します。例えば、ファイルからテキストを読み取るには、FileReaderPattern を選択します。パターンの選択については、
バッチ・データ・ストリームのフレームワークおよびパターンを参照してください。
手順
- パターン・インターフェースを実装します。
<codeblock>package com.ibm.websphere.samples;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Properties;
import com.ibm.websphere.batch.devframework.configuration.BDSFWLogger;
import com.ibm.websphere.batch.devframework.datastreams.patternadapter.FileReaderPattern;
// Implement the FileReaderPattern
public class TransactionListStream implements FileReaderPattern {
private Properties properties;
private BDSFWLogger logger;
/**
Save properties specified in the xJCL
*/
public void initialize(Properties props) {
// create logger
logger = new BDSFWLogger(props);
if (logger.isDebugEnabled())
logger.debug("entering TransactionListInputStream.initialize()");
properties = props;
}
// This method is where you should add the business logic of processing the read //string
public Object fetchRecord(BufferedReader reader) throws IOException {
String str = null;
Posting posting = null;
if (logger.isDebugEnabled())
logger.debug("Entering TransactionListInputStream.fetchRecord");
if(reader.ready()) {
str = reader.readLine();
}
if(str != null) {
posting = _generateRecord(str);
}
if (logger.isDebugEnabled())
logger.debug("Exiting TransactionListInputStream.fetchRecord with " + posting);
return posting;
}
// Helper method that parses the read string and creates an internal object for use
// by other parts of the code
private Posting _generateRecord(String str) {
Posting post = null;
String [] tokens = str.split(",", 3);
if(tokens.length == 3) {
String txTypeStr = tokens[0];
String actNoStr = tokens[1];
String amtStr = tokens[2];
int txType = Integer.parseInt(txTypeStr);
double amt = Double.parseDouble(amtStr);
post = new Posting(txType,actNoStr,amt);
} else {
logger.error("Invalid csv string" + str);
}
if (logger.isDebugEnabled())
logger.debug("Loaded posting record " + post);
return post;
}
public void processHeader(BufferedReader reader) throws IOException {
// NO OP for this sample
}
}
</codeblock>
- 前述のステップで作成したクラスおよびサポート・クラスを xJCL で参照します。
xJCL の例
<codeblock><batch-data-streams>
<bds>
<logical-name>txlististream</logical-name>
<props>
<prop name="IMPLCLASS" value= "com.ibm.websphere.samples.TransactionListStream"/>
<prop name="FILENAME" value="/opt/inputfile.txt"/>
<prop name="debug" value="true"/>
</props>
<impl-class>com.ibm.websphere.batch.devframework.datastreams.patterns.TextFileReader</impl-class>
</bds>
</batch-data-streams>
</codeblock>