データセットで何らかの処理作業を行ういくつかの JavaEE Bean 内で、テンプレート メソッド パターンの行に沿って何かを実装しようとしています。
各処理 Bean は Job オブジェクトを受け取り、いくつかの作業を行い、次の Bean (合計で約 10) の更新されたジョブを返します。各 Bean には、同じ名前 (doProcessing) と単一の引数 (job) を持つ単一のメソッドがあります。
各 Bean の「doProcessing」メソッドの開始時と終了時にロギングを実行して、処理の最後にジョブに各 Bean からのロギング情報が含まれるようにしたいと思います (ハッシュマップなどに保存されます)。
私の現在の実装は次のようになります...
@Stateless
public class processingTaskOne(){
public void doProcessing(Job job){
//always called at beginning of method
String beanReport = "Info from Task 1: ";
for(int i=0; i<job.getDataArray().size();i++){
beanReport+="\n some more info";
//Do some processing work here
}
//always called at end of method
job.addNewReportSection(beanReport)
}
}
しかし、継承を使用して、次の行に沿ってスーパークラスを作成できるはずです...
public abstract class Reportable{
private String sectionReport;
public void preProcessing(Job job){
//Setup bean report, use reflection to get subclass name
}
public void postProcessing(Job job){
//Finish bean report and append to job
job.addNewReportSection(sectionReport)
}
public abstract doProcessing(){
//not sure how this should work
}
}
また、スーパークラスを拡張するクラスはすべて、前処理/後処理アクションを自動的に実行します...
@Stateless
public class processingTaskOne() extends Reportable{
public void doProcessing(Job job){
for(int i=0; i<job.getDataArray().size();i++){
super.sectionReport += "log some info"
//Do some processing work here
}
}
}
しかし、すべての例が POJO を参照しており、私の Bean は @Stateless であるため、コンストラクターがないため、これを正確に実装する方法を見つけることができませんでした。
誰かがこれに関するガイダンスを提供できますか? 私は間違った木を吠えていますか?