2016-07-29 9 views
1

私は自分のビジネスメソッドとスケジュールされたメソッドを分離しています。@ Startup @ Singletonが@Statelessを超えて@Scheduleサービスのメリットはありますか?

コードを次のコードの上に

@Singleton 
@Startup 
public class MySchedule { 

    @Schedule(...) 
    public void doSome() { 
    } 
} 

次の可能性のメリットは何ですか?

@Stateless 
public class MySchedule { 

    @Schedule(...) 
    public void doSome() { 
    } 
} 

私は@Singleton@Startupの定義をお読みください。しかし、私は、@Statelessとだけ注釈を付けられたクラスのメソッドも予定どおりに動作することを確認します。

違いや好みはありますか?

答えて

0

これは、コンテナの実装(およびEJB仕様)によって異なります。

@Statelessはそのまま動作し、あなたは状態を持ってはいけません! このメソッドは各スケジュールに対して呼び出され、Wildflyは同時に呼び出されないようにします。タイマーがまだ実行されていれば、スケジュールはスキップされます(つまり、1分スケジュールと実行にはさらに時間がかかる)

@Singletonは状態(すなわち、開始の初期化)およびスケジュールされたイベント中に実行される。 仕様では、Lock.READを追加するまで、このインスタンスを同時に呼び出すことはできません。これは、スケジューラを実行する限り、他のメソッドを呼び出せないことを意味します。 同じスケジュールの同時スケジュールについては、とにかくできません(上記参照)。 つまり、同時に2つの@Scheduleメソッドを実行することもできません。

他のコンテナがタイマーの同時実行を許可するかどうかはわかりません。

1つのスケジュール(実装に他のものはありません)がある場合は、違いはありません。 そして、@Startupはそれほど意味をなさないでしょう;)

関連する問題