/* * Copyright 2007-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package biz.deinum.batch.item; import org.springframework.batch.item.ExecutionContext; import org.springframework.batch.item.ItemReader; import org.springframework.batch.item.ItemStream; import org.springframework.batch.item.ItemStreamException; import org.springframework.batch.item.ItemStreamReader; import org.springframework.batch.item.NonTransientResourceException; import org.springframework.batch.item.ParseException; import org.springframework.batch.item.UnexpectedInputException; /** * {@link ItemStreamReader} with a synchronized read method. Is useful when needing to synchronize on read in a * concurrent environment. * * @author Marten Deinum */ public class SynchronizedItemReader<T> implements ItemStreamReader<T> { private final ItemReader<T> delegate; /** * * @param delegate delegate ItemReader which does the actual work. */ public SynchronizedItemReader(final ItemReader<T> delegate) { super(); this.delegate = delegate; } public synchronized T read() throws Exception { return this.delegate.read(); } public void open(final ExecutionContext executionContext) throws ItemStreamException { if (this.delegate instanceof ItemStream) { ((ItemStream) this.delegate).open(executionContext); } } public void update(final ExecutionContext executionContext) throws ItemStreamException { if (this.delegate instanceof ItemStream) { ((ItemStream) this.delegate).update(executionContext); } } public void close() throws ItemStreamException { if (this.delegate instanceof ItemStream) { ((ItemStream) this.delegate).close(); } } }