機能リファレンス
S2BlazeDSで使われている機能の説明をします。
プロジェクト構成
S2BlazeDSでは、ルートパッケージの配下にserviceなどのパッケージを作って、 そこに必要なファイルを格納します。 ルートパッケージ名は、任意の名前を指定することができます。 例えば、s2blazeds-server-exampleプロジェクトでは、ルートパッケージ名は、flex.samplesになっています。
ルートパッケージ名は、convention.diconで指定します。 s2blazeds-server-exampleプロジェクトでは、src/main/resourcesで次のように指定されています。
convention.dicon
<components> <component class="org.seasar.framework.convention.impl.NamingConventionImpl"> <initMethod name="addRootPackageName"> <arg>"flex.samples"</arg> </initMethod> </component> <component class="org.seasar.framework.convention.impl.PersistenceConventionImpl"/> </components>
Flexから呼び出されるクラスは、ルートパッケージ.serviceに格納します。 クラス名は、XxxServiceのようにServiceで終わるようにします。 Xxxの部分は任意につけることができます。
FlexのRemoteObjectタグのdestination属性で指定する名前は、 Serviceクラスのクラス名の先頭を小文字にしたものにします。 例えば、XxxServiceの場合、xxxServiceになります。
ただし、XXxのように先頭の二文字が大文字の場合、 destinationで指定する名前は、XXxServiceのままで、 先頭は小文字になりません。 これは、JavaBeansの命名規約です。 間違えやすいので、2番目の文字は、小文字にしておくほうが良いでしょう。
SAStrutsを使う場合、アクションは、ルートパッケージ.actionに格納します。 例えば、http://ホスト名/プロジェクト名/xxx/のURLに対応するアクションクラスは、 ルートパッケージ.action.XxxActionという名前にします。
エンティティは、 ルートパッケージ.entityに格納します。 エンティティとは、データベースに永続化されるデータです。 エンティティの名前は任意の名前にすることができますが、 通常は、テーブルの名前にあわせます。
ロジックは、ルートパッケージ.logicに格納し、クラス名の最後は、Logicで終わるようにします。 複数のサービスから共通に使われるような機能は、ロジッククラスで実装すると良いでしょう。
ユーティリティは、ルートパッケージ.utilに格納します。 クラス名は自由につけてかまいません。 ユーティリティクラスは、通常staticメソッドで構成されています。
データアクセス
データアクセス用のフレームワークは、任意のものを使うことができますが、 S2JDBCを 使うことをお勧めします。
S2JDBCを 使う場合、データベースへ接続するための設定は、jdbc.diconに記述します。 jdbc.diconの設定は、こちらを参照してください。 s2blazeds-server-exampleプロジェクトの場合、jdbc.diconは、src/main/resourcesにおかれています。
S2JDBC自体の設定は、 s2jdbc.diconに記述します。 s2jdbc.diconの設定は、こちらを参照してください。 s2blazeds-server-exampleプロジェクトの場合、jdbc.diconは、src/main/resourcesにおかれています。
S2JDBCは、 JdbcManager経由で利用します。 JdbcManagerをサービスで利用するには、 次のようにプロパティを定義しておけば、Seasar2が自動的に設定します。
public JdbcManager jdbcManager;
トランザクション
S2BlazeDSでは、トランザクション処理は、JTAの実装に任せていて、 S2BlazeDS自体がトランザクション処理に関与することはありません。 JTAの設定は、s2container.diconで行ないます。 詳細は、こちらを参照してください。 s2blazeds-server-exampleプロジェクトの場合、s2container.diconは、src/main/resourcesにおかれています。
アクション、サービス、ロジックのメソッドが呼び出されたときに、 自動的にトランザクションを開始するには、customizer.diconにトランザクション用の設定を記述します。 s2blazeds-server-exampleプロジェクトの場合、customizer.diconは、src/main/resourcesにおかれています。
cutomizer.dicon
<component name="actionCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain"> <initMethod name="addCustomizer"> <arg> <component class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/> </arg> </initMethod> ... </component> <component name="serviceCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain"> <initMethod name="addCustomizer"> <arg> <component class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/> </arg> </initMethod> ... </component> <component name="logicCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain"> <initMethod name="addCustomizer"> <arg> <component class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/> </arg> </initMethod> ... </component>
TxAttributeCustomizerを使うと、Objectクラス以外のpublicなメソッドが呼び出されると、 自動的にトランザクション処理が行なわれます。 デフォルトのトランザクション属性は、Requiredです。
Requiredは、トランザクションが開始されていなければ、 自動的にトランザクションを開始し、 既にトランザクションが開始されていれば、 そのトランザクションを引き継ぎます。 例外が起こった場合は、自動的にロールバックします。
特定のクラスのトランザクション属性を変えたい場合は、 クラスに@TransactionAttributeを指定します。
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public class XxxService { ... }特定のメソッドのトランザクション属性を変えたい場合は、 メソッドに@TransactionAttributeを指定します。 次の例では、someMethod()はTransactionAttributeType.NEVERで、 someMethod2()はTransactionAttributeType.REQUIRES_NEWになります。
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public class XxxService { @TransactionAttribute(TransactionAttributeType.NEVER) public void someMethod() { ... } public void someMethod2() { ... } ... }