コミットオプションの設定
JBossでサポートされているコミットオプションには、A,B,C,Dの4種類があります。(うちA,B,CはEJB2.0の仕様、DはJBoss独自)
簡単に説明すると、以下のような感じです。
- A:データベースをJBoss CMP だけが独占しているという仮定のもと、データベースとEntityの同期をとらない。
- B:トランザクション開始時にEntityとデータベースの同期をとる。トランザクションを開始せずに(トランザクション属性がNever、NotSupported、Supportsで)Entityにアクセスすると、データベースと一致していないかもしれないキャッシュを利用できる。
- C:トランザクション終了時にすべてのキャッシュを廃棄する。
- D:基本的にはAと同じだが、一定時間(デフォルトは30分)ごとにキャッシュが廃棄される。
今回は、更新結果をデータベースにクエリを投げて確認しようと思いますので、HolloCountはBかCならOKです。とりあえずCにしておきます。一方HelloToは参照しかしませんので、Aで十分ですね。
コミットオプションの設定は、META-INF\jboss.xmlを編集することで行います。
以下は、jboss.xmlの抜粋です。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_3_0.dtd"> <jboss> ... <enterprise-beans> <entity> <ejb-name>HelloTo</ejb-name> <jndi-name>HelloToBean</jndi-name> <local-jndi-name>HelloToLocal</local-jndi-name> <configuration-name>HelloWorld Read-Only EntityBean</configuration-name> </entity> <entity> <ejb-name>HelloCount</ejb-name> <jndi-name>HelloCountBean</jndi-name> <local-jndi-name>HelloCountLocal</local-jndi-name> <configuration-name>HelloWorld Read-Write EntityBean</configuration-name> </entity> ... </enterprise-beans> <container-configurations> <container-configuration extends="Standard CMP 2.x EntityBean"> <container-name>HelloWorld Read-Only EntityBean</container-name> <commit-option>A</commit-option> </<container-configuration> <container-configuration extends="Standard CMP 2.x EntityBean"> <container-name>HelloWorld Read-Write EntityBean</container-name> <commit-option>C</commit-option> </<container-configuration> <container-configurations> ... </jboss>
container-configurationでコミットオプションを指定した設定を定義しておき、entity要素の子要素configuration-nameで紐付けています。