AMF連携

id:shot6さんが http://d.hatena.ne.jp/shot6/20080908#1220863852 でも書いていますが、YmirでAMFを扱うためのymir-amfモジュールを作成しました。Ymir-1.0.0用のモジュールであるため、Ymir-1.0.0のリリースに合わせてリリースする予定です。

使い方は簡単です。アプリケーションのpom.xml

    <dependency>
      <groupId>org.seasar.ymir</groupId>
      <artifactId>ymir-amf</artifactId>
      <version>1.0.0-SNAPSHOT</version>
    </dependency>

と追記するだけです。あとは普通にリクエストURLに対応するPageクラスを作ればOK。ただし、呼び出されるアクションメソッドは「_get」や「_post」ではありません。@Amfアノテーションを付与したメソッドが呼び出されます。

public class AmftestPage {
    @Amf
    public Person execute(Person person) {
        System.out.println("str : " + person.getStr());
        System.out.println("num : " + person.getNum());
        Person ret = new Person();
        ret.setStr("returned value from AmfTestPage.");
        ret.setI(123);
        ret.setNum(223);
        return ret;
    }
}

なおこれはT2FrameworkのAmf連携のサンプルをYmirに移植したものです。対応するT2Framework版のPageクラスはこちら:

@RequestScope
@Page("amftest")
public class AmfTestPage {
    @Amf
    public Navigation execute(Person person) {
        System.out.println("str : " + person.getStr());
        System.out.println("num : " + person.getNum());
        Person ret = new Person();
        ret.setStr("returned value from AmfTestPage.");
        ret.setI(123);
        ret.setNum(223);
        return AmfResponse.to(ret);
    }
}

ほぼ同じですが、Ymir版ではURLとPageクラスの対応はmapping.diconに記述するので@Pageアノテーションがついていない点と、アクションメソッドの返り値としてどのような型のオブジェクトも返せるので直接Personオブジェクトを返している点が異なります。

ymir-amfの実装はT2Frameworkの実装を参考にさせていただきました。また、私自身AMFを全く知らないので、id:shot6さんやid:c9katayamaさんに教わりながら実装しました。お二人に感謝します。