腰が痛い(><)
日曜日, 6 月 14th, 2009急に昨日から腰が痛くなった。
凄く重く痛い。
椅子に座ってるだけでも痛くなる。
まいった(><)
よりによって今日は日曜で病院はお休みだ。。。。。
急に昨日から腰が痛くなった。
凄く重く痛い。
椅子に座ってるだけでも痛くなる。
まいった(><)
よりによって今日は日曜で病院はお休みだ。。。。。
javax.ejb.ConcurrencyManagementType.CONTAINER あるいは javax.ejb.ConcurrencyManagementType.BEAN を使用すればいいようだ。
@ConcurrencyManagement(CONTAINER)
@Singleton
public class ExampleSingletonBean {
private String state;
@Lock(READ)
public String getState() {
return state;
}
@Lock(WRITE)
public void setState(String newState) {
state = newState;
}
}
@ConcurrencyManagement(CONTAINER) アノテーションによってコンテナによって並行処理を管理する。
ちなみにデフォルトで @ConcurrencyManagement(CONTAINER) が設定されるようなのです。
これを利用することによって、@Lock(READ) と @Lock(WRITE) アノテーションによって排他制御を可能とする。
タイムアウトの設定方法
@AccessTimeout アノテーションによって可能となります。
下記コードでは Singleton Session Bean のデフォルトタイムアウトの設定時間は 120000 ミリ秒となってます。
doTediousOperation メソッドのタイムアウト設定時間は Singleton Session Bean のデフォルトタイムアウト時間より優先され 360000 ミリ秒となります。
@Singleton
@AccessTimeout(value=120000)
public class StatusSingletonBean {
private String status;
@Lock(WRITE)
public void setStatus(String new Status) {
status = newStatus;
}
@Lock(WRITE)
@AccessTimeout(value=360000)
public void doTediousOperation() {
...
}
}
ちなみに TimeUnit.SECONDS 定数を使えばこのように解りやすくなります。
@Singleton
@AccessTimeout(value=60, timeUnit=SECONDS)
public class StatusSingletonBean { ... }
@ConcurrencyManagement(BEAN) による並行処理は全てのビジネスメソッド及びタイムアウトメソッドの並行処理を可能とします。
ただし、それらは開発者によりすべてのクライアントへの同期化を保証する責任があります。
Java の並行処理技術を駆使して高レベルなプログラミング技術が必要とされるようです。
@ConcurrencyManagement(BEAN)
@Singleton
public class AnotherSingletonBean { ... }
Java EE 6 Tutorial の Singleton Session Bean の並行処理をざっと目を通してる最中ですがなかなか凝ってますね。
最後にこの内容は英語が駄目な素人が勝手に解釈したメモ書き程度のものですから詳しく知りたい方は本家のチュートリアルをご参照くださいませ。
The Java EE 6 Tutorial より Singleton Session Bean の初期化にはこんなのもありだ。
@Singleton
public class PrimaryBean { ... }
SecondaryBean depends on PrimaryBean:
@Singleton
@DependsOn("PrimaryBean")
public class SecondaryBean { ... }
これで EJB コンテナが SecondaryBean の前に PrimaryBean を初期化することを保証するらしい。
φ(..)メモメモ