Menu

機能リファレンス

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() {
        ...
    } 
    ...
}