From: arne@vajhoej.dk   
      
   On 3/18/2025 3:51 PM, Arne Vajhøj wrote:   
   > I am happy to report that Spring Batch 4.3 works fine on   
   > VMS x86-64 (and probably also on VMS Itanium, but not on   
   > VMS Alpha due to too old Java version).   
   >   
   > For database, XML, JSON and CSV the following jar files:   
      
   > The code and configuration is the same as on any other platform.   
      
   Spring Batch can read/write from/to relational databases and a few NoSQL   
   databases   
   as well: MongoDB, Neo4J and Redis.   
      
   Obviously it does not read/write VMS index-sequential files out of the box.   
      
   But since I happen to have a library allowing JVM languages to access VMS   
   index-sequential files, then creating a wrapper allowing Sping Batch to   
   access   
   them was tempting.   
      
   So I did.   
      
   First the simple model with only one index-sequential file.   
      
   import org.springframework.batch.item.ExecutionContext;   
   import org.springframework.batch.item.NonTransientResourceException;   
   import org.springframework.batch.item.ParseException;   
   import org.springframework.batch.item.UnexpectedInputException;   
   import org.springframework.batch.item.support.AbstractItemStreamItemReader;   
      
   import dk.vajhoej.isam.IsamException;   
   import dk.vajhoej.isam.IsamResult;   
   import dk.vajhoej.isam.IsamSource;   
   import dk.vajhoej.record.RecordException;   
      
   public class SingleIsamItemReader extends   
   AbstractItemStreamItemReader {   
    private IsamSource source;   
    private Class type;   
    private IsamResult result;   
    public IsamSource getSource() {   
    return source;   
    }   
    public void setSource(IsamSource source) {   
    this.source = source;   
    }   
    public Class getType() {   
    return type;   
    }   
    public void setType(Class type) {   
    this.type = type;   
    }   
    @Override   
    public void open(ExecutionContext ec) {   
    try {   
    result = source.readStart(type);   
    } catch (IsamException e) {   
    throw new RuntimeException(e);   
    } catch (RecordException e) {   
    throw new RuntimeException(e);   
    }   
    }   
    @Override   
    public T read() throws Exception, UnexpectedInputException,   
   ParseException, NonTransientResourceException {   
    if(result.read()) {   
    return result.current();   
    } else {   
    return null;   
    }   
    }   
    @Override   
    public void close() {   
    try {   
    result.close();   
    source.close();   
    } catch (IsamException e) {   
    throw new RuntimeException(e);   
    }   
    }   
   }   
      
      
       
       
       
      
      
       
       
      
      
   import java.util.List;   
      
   import org.springframework.batch.item.support.AbstractItemStreamItemWriter;   
      
   import dk.vajhoej.isam.IsamSource;   
      
   public class SingleIsamItemWriter extends   
   AbstractItemStreamItemWriter {   
    private IsamSource source;   
    public IsamSource getSource() {   
    return source;   
    }   
    public void setSource(IsamSource source) {   
    this.source = source;   
    }   
    @Override   
    public void write(List extends T> items) throws Exception {   
    for(T item : items) {   
    source.create(item);   
    }   
    }   
   }   
      
      
       
       
       
      
      
       
      
      
   Arne   
      
   --- SoupGate-DOS v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   
|