コミットオプションの設定

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で紐付けています。