Using the batch data stream framework
Before you start this task, you must identify the correct pattern to use. Select a pattern based on the type of data stream you need to use. For example, if you want to read text from a file, then select the FileReaderPattern. See Implementing batch data stream framework and patterns for a description of the available patterns
- Implement the pattern interface:
<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> - Add a reference to the class that you just created in the previous
step, along with the supporting class in the 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>