0

データセットで何らかの処理作業を行ういくつかの 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 であるため、コンストラクターがないため、これを正確に実装する方法を見つけることができませんでした。

誰かがこれに関するガイダンスを提供できますか? 私は間違った木を吠えていますか?

4

1 に答える 1