It is almost working now...
The JobLauncher implementation is a great idea and is pretty simple to implement!
But I still have an issue with passing each file to be processed as JobParameter.
Here's the code from the JobLauncher's run method:
Code:
// some code to manage state vs restartable, etc...
for (Resource resource : resources) {
JobParameter param = new JobParameter(resource.getFilename());
jobParameters.getParameters().put("file.name", param);
taskExecutor.execute(new MyRunnable(job, jobParameters, jobExecution));
numberOfFilesProcessed++;
}
return jobExecution;
}
Here's the step's config:
Code:
<bean id="myStep" parent="simpleStep">
<property name="itemReader">
<bean parent="myFileItemReader" scope="step"/>
</property>
<property name="itemWriter">
<bean parent="myCompositeItemWriter" scope="step"/>
</property>
</bean>
The reader:
Code:
<bean id="myFileItemReader" parent="flatFileItemReader">
<property name="resource" value="file:${data.root}/${batch.name}/input/#{jobParameters[file.name]}" />
... other bean properties...
</bean>
The composite writer:
Code:
<bean id="myCompositeItemWriter" class="MyCompositeItemWriter">
<property name="validDelegateWriter" ref="validItemWriter"/>
<property name="rejectedDelegateWriter" ref="rejectedItemWriter"/>
</bean>
The delegate writers:
Code:
<bean id="validRecordItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter">
<property name="resource" value="file:${data.root}/${batch.name}/output/#{jobParameters[file.name]}" />
... other properties...
</bean>
<bean id="rejectedItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter">
<property name="resource" value="file:${data.root}/${batch.name}/rejected/#{jobParameters[file.name]}"/>
</bean>
Then the step scope:
Code:
<bean class="org.springframework.batch.core.scope.StepScope" />
And now, the console output:
Job: [SimpleJob: [name=myJob]] launched with the following parameters: [{param=Gino-45}]
Theres no "file.name" parameter...
from my log: Opening file [input] for reading.
And finally, the error:
org.springframework.batch.item.ItemStreamException : Failed to initialize the reader
Am I missing something? Obviously, I don't see it... but probably tomorrow's going to be a better day.
Regards,
Gino
PS I'm using 2.0.0 M4