I have a chain of responsibility that consists of 3 stages.
My Implementations for the stages look like this.
public class InitialStage implements RecordHandler {
private RecordHandler next;
@Override
public void setNext(RecordHandler handler) {
if (this.next == null) {
this.next = handler;
} else {
this.next.setNext(handler);
}
}
@Override
public void handleRequest(String record) {
System.out.println("Processing @ Initial Stage.");
if (next != null) {
next.handleRequest(record);
}
}
}
The Process Manager
public class ProcessManager {
private RecordProcessor processor = new RecordProcessor();
public ProcessManager()
{
createPipeLine();
}
private void createPipeLine() {
processor = new RecordProcessor();
processor.addHandler(new InitialStage());
processor.addHandler(new MiddleStage());
processor.addHandler(new FinalStage());
}
public void processRecord(String record){
processor.handleRequest(record);
}
}
The Interface
public interface RecordHandler {
public void setNext(RecordHandler handler);
public void handleRequest(String record);
}
And finally the RecordProcessor,
public class RecordProcessor {
private RecordHandler successor;
private RecordHandler first;
public RecordProcessor(){
}
public void addHandler(RecordHandler recordHandler){
if(this.first == null){
this.first = recordHandler;
}
else{
this.successor.setNext(recordHandler);
}
this.successor = recordHandler;
}
public void handleRequest(String record){
first.handleRequest(record);
}
}
Now I have observed that my Middle Stage takes some time to complete. So now I am interested in using a thread pool so the records are processed in a way represented below.
Here I have assumed 3 worker threads.
Question
How do I correctly modify my existing CoR to cater the new requirement?