Seasarプロジェクト徹底攻略


 NTTデータ先端技術株式会社
 竹添 直樹
Profile
   たけぞう
       Blog:
        http://d.hatena.ne.jp/takezoe/
       Twitter:
        @takezoen
       OSS Activity:
        Project Amateras
        The Apache Software Foundation
        The Seasar Project
Purpose
   Seasarプロジェクトでは様々なプロダクトが開
    発されています
   ただし、開発がアクティブに行われていないも
    のも多く、機能・品質にもバラつきがあります
   これらのプロダクトの中から“仕事で使える”プ
    ロダクトを紹介します
突然ですが…


         Seasar2徹底入門
         SAStruts/S2JDBC対応

         ISBN:978-4798121505
         価格:3,990
         出版社:翔泳社
Seasar本の歴史
Seasar入門 はじめてのDI&AOP
Seasar 2.4登場
Seasar2によるスーパーアジャイルなWeb開発
SAStruts+S2JDBC
      登場
Seasar2入門
JavaによるはじめてのWebアプリケーション開発
SAStruts、S2JDBCの
 機能改善による変化
最新の情報をカバーした
実践的な書籍が必要だ!
そしてSeasar2徹底入門


         Seasar2、SAStruts、S2JDBCは安定期に
         S2Container、周辺プロダクトも解説




          末永く使える一冊に!
Seasar3登場?
本当にありがとう
 ございました。
本題に戻ります
Purpose
   Seasarプロジェクトでは様々なプロダクトが開
    発されています
   ただし、開発がアクティブに行われていないも
    のも多く、機能・品質にもバラつきがあります
   これらのプロダクトの中から“仕事で使える”プ
    ロダクトを紹介します
Web Framework
   (SAStruts)
   Cubby
   Mayaa
   Teeda
   Ymir
   S2JSF
   S2Struts
学習コストの低いWebフレームワークを使いたい!


 Cubby                                                http://cubby.seasar.org/

        Servlet/JSPベースのシンプルなWebフレームワーク
        Seasar2だけでなく、Spring Framework、Google Guiceと連
         携が可能

public class HelloAction extends Action {   ・・・
                                            <t:form action="message" value="${action}">
    @RequestParameter                        あなたの名前:
    public String name;                      <t:input type="text" name="name"/>
                                             <input type="submit" value="送信"/>
    public ActionResult index() {           </t:form>
      return new Forward("input.jsp");      ・・・
    }
                                            input.jsp
    public ActionResult message() {
      return new Forward("result.jsp");     ・・・
    }                                       こんにちは、${action.name}さん。
}                                           ・・・

アクション                                       result.jsp
プログラマとデザイナを分業したい!


   Mayaa                                            http://mayaa.seasar.org/

        Tapestry、S2JSFの系譜を受け継ぐHTMLテンプレートエンジン
        デザインとロジックの完全な分離を実現
        SAStrutsやCubby等と組み合わせて利用可能

   HTMLファイル
<html>
<body>
  <span id="message">dummy message</span>
</body>
</html>
                                                       <html>
                                                         <body>Hello Mayaa!</body>
   Mayaaファイル                                           </html>

<?xml version="1.0" encoding="UTF-8"?>
<m:mayaa xmlns:m="http://mayaa.seasar.org">
  <m:write m:id="message" value="Hello Mayaa!" />
</m:mayaa>
DataBase Access Framework
   (S2JDBC)
   DBFlute
   Doma
   Kuina
   S2Dao
現場でトラブルになりにくいO/Rマッパを使いたい!


DBFlute           http://dbflute.sandbox.seasar.org/

   Apache Torque/S2Daoを参考に開発された「現
    場指向」のO/Rマッピングフレームワーク
   自動生成を活用しておりDB変更に強い
   自由度よりも安全性を重視
   Condition Bean
   外出しSQL(2Way SQL)

詳しくはDBFluteのセッションで!
     S505 15:00-
S2JDBCもいいけどS2Daoもいいよね!


Doma                                               http://doma.seasar.org/

       APT(Annotation Processing Tool)を使用したO/Rマッパ
       S2Daoに似ているが、以下の点を改良
           実行時にAOPで処理を行うのではなく、コンパイル時にDAOのソースを生成
           命名規約ではなくアノテーションによる明示的な指定
           2waySQLの文法を間違いにくいよう改善
           ドメインクラスへの対応
           コンパイル時にAPTによるエラーチェックが可能

    @Dao(config = AppConfig.class)
    public interface EmployeeDao {

        @Select
        Employee selectById(Integer employeeId);   コンパイル時に     DAOの実装を
                                                    APTで処理      自動生成
        @Update
        int update(Employee employee);

    }

                                 DAOのインターフェース
Remoting/Communications
   S2BlazeDS
   S2Axis
   S2JMS
   S2Flex
   S2RMI
Flex/AIRからSeasar2のコンポーネントを呼び出したい!


 S2BlazeDS                                                   http://s2blazeds.seasar.org/

      BlazeDSでFlexからS2Container管理下のコンポーネントを呼
       び出し可能
      HOT deploy対応
<?xml version="1.0" encoding="UTF-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
          backgroundColor="#FFFFFF">
 <mx:RemoteObject id="srv" destination="productService"/>
 <mx:DataGrid dataProvider="{srv.getProducts.lastResult}"
         width="100%" height="100%"/>
 <mx:Button label="Get Data" click="srv.getProducts()"/>                                     サーバ側
</mx:Application>
                                     public class ProductService {
クライアント(Flex)側                             public JdbcManager jdbcManager;

                                          public List<Product> getProducts() {
                                            return jdbcManager.from(Product.class).getResultList();
                                          }
                                          ...
                                      }
Webサービスを簡単に作成したい!


 S2Axis                                                    http://s2axis.seasar.org/ja/

      POJOをWebサービス化
      クライアント側もサポート
      JAX-WS、RESTにも対応
public interface Echo {
  String echo(int id, String message);
}                                                                  diconファイルに登録する際に
                                                                   metaタグでAxisにデプロイする
public class EchoImpl implements Echo {
  public String echo(int id, String message) {                     Webサービスであることを指定
    return "[id = " + id + "] " + message;
  }
}                         <component
                              name="Echo" class="org.seasar.remoting.axis2.examples.ex01.EchoImpl">
                            <meta name="axis-service"/>
                          </component>



          http://localhost:8080/s2axis/services/Echo でアクセス可能
Libraries
   S2Mai
   S2CSV
   S2Chronos
   S2Caching
   Fisshplate
メールを送信したい!


S2Mai                     http://s2mai.sandbox.seasar.org/ja/

   送信先等の設定をdiconファイルで管理可能
   S2Daoのメール版(Maiインターフェースを作成するだけでメール送信可能)
   Velocity or FreeMarkerでメール内容のテンプレートを記述可能


            メールテンプレートに
              渡すパラメータ          Mai
     DTO
                            インターフェース

            SMTPサーバの情報等                    送信するメールの内容




                diconファイル              メールテンプレート
CSVファイルの入出力を行いたい!


S2CSV                                  http://s2csv.sandbox.seasar.org/

   CSVとJavaBeanをアノテーションでマッピング
   アノテーションで読み込んだCSV値のバリデーションも可能
       @CSVEntity(header=false)
       public class DeptCsv {

           @CSVColumn(columnIndex=0)
           public Long id;

           @CSVRequired
           @CSVColumn(columnIndex=1)
           public Integer deptNo;

           @CSVColumn(columnIndex=2)
           public String deptName;

           @CSVColumn(columnIndex=3)
           public String loc;

       }
アプリケーションに定期処理を組み込みたい!


S2Chronos                           http://s2chronos.sandbox.seasar.org/

   タスクスケジューラ
   即時、日時指定、cron形式など様々なトリガーが利用可能
   アノテーションでトリガやタスクメソッドの順序を指定可能
   動的トリガを利用することでトリガ設定の外部化も可能
   Webアプリにも組み込み可能


    @Task
    @CronTrigger(expression = "0 */1 * * * ?")
    public class BasicTask {

        public void doExecute() {
          ...
        }

    }
性能向上のためにキャッシュを活用したい!


 S2Caching                            http://s2caching.sandbox.seasar.org/

     メソッドの戻り値をキャッシュするインターセプターを提供
     メソッドの引数ごとに戻り値をキャッシュする
     アノテーションでの適用も可能
     バックエンドにはEhcacheを使用

diconファイルでの指定

<component class="jp.sf.amateras.samples.service.CalcService">
 <aspect pointcut="calculateSomething">callCache</aspect>
</component>
                              @CallCache(componentName="callCache")
                              public String calculateSomething(String condition) {
                                ....
                              }

                              アノテーションでの指定
Excelを手軽に生成したい!


Fisshplate        http://fisshplate.sandbox.seasar.org/ja/

    Excelテンプレートエンジン
    ExcelにVelocityのような記述が可能
携帯電話向けのWebアプリケーションを開発したい!


Mobylet               http://mobylet.seasar.org/

   携帯Web向けのフレームワーク
   絵文字、文字コードの自動変換
   画像のリサイズ
   デコメール対応メール送信
   セッション管理機能
   他のWebフレームワークと組み合わせて利用


詳しくはMobyletのセッションで!
     S603 15:00-
Eclipseプラグイン
     プラグイン                              説明

Dolteng          Seasar2を使用したプロジェクトの雛形を作成
                 SAStruts、S2JDBCなど様々なフレームワークの組み合わせに対応
Kijimuna         Diconファイルを編集するためのエディタ

SAStrutsPlugin   WTPにSAStruts向けの機能を追加

Matatabi         MayaaのmayaaファイルやHTMLファイルの編集を支援

S2JUnit4Plugin   テストケース、テスト対象クラス、テスト用diconファイルの相互ジャンプ

DbLauncher       H2データベースをEclipse上から起動

WebLauncher      Winstone(軽量サーブレットコンテナ)をEclipse上から起動

Doma Tools       Domaでの開発を支援

EMecha           DBFluteでの開発を支援
Seasarプロジェクトのリソース
   メーリングリスト
       http://ml.seasar.org/
   Subversionリポジトリ
       https://www.seasar.org/svn/
       http://www.seasar.org/source/browse/
   Mavenリポジトリ
       http://maven.seasar.org/
   Eclipseプラグインの更新サイト
       http://www.seasar.org/updates.html
   JIRA(課題管理)
       https://www.seasar.org/issues/secure/Dashboard.jspa
   Hudson(継続的ビルド)
       https://www.seasar.org/hudson/
   Wiki
       http://www.seasar.org/wiki/
Seasar2活用のために


          Seasar2徹底入門
          SAStruts/S2JDBC対応

          ISBN:978-4798121505
          価格:3,990
          出版社:翔泳社

Seasarプロジェクト徹底攻略

  • 1.
  • 2.
    Profile  たけぞう  Blog: http://d.hatena.ne.jp/takezoe/  Twitter: @takezoen  OSS Activity: Project Amateras The Apache Software Foundation The Seasar Project
  • 3.
    Purpose  Seasarプロジェクトでは様々なプロダクトが開 発されています  ただし、開発がアクティブに行われていないも のも多く、機能・品質にもバラつきがあります  これらのプロダクトの中から“仕事で使える”プ ロダクトを紹介します
  • 4.
    突然ですが… Seasar2徹底入門 SAStruts/S2JDBC対応 ISBN:978-4798121505 価格:3,990 出版社:翔泳社
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
    そしてSeasar2徹底入門 Seasar2、SAStruts、S2JDBCは安定期に S2Container、周辺プロダクトも解説 末永く使える一冊に!
  • 14.
  • 15.
  • 16.
  • 17.
    Purpose  Seasarプロジェクトでは様々なプロダクトが開 発されています  ただし、開発がアクティブに行われていないも のも多く、機能・品質にもバラつきがあります  これらのプロダクトの中から“仕事で使える”プ ロダクトを紹介します
  • 18.
    Web Framework  (SAStruts)  Cubby  Mayaa  Teeda  Ymir  S2JSF  S2Struts
  • 19.
    学習コストの低いWebフレームワークを使いたい! Cubby http://cubby.seasar.org/  Servlet/JSPベースのシンプルなWebフレームワーク  Seasar2だけでなく、Spring Framework、Google Guiceと連 携が可能 public class HelloAction extends Action { ・・・ <t:form action="message" value="${action}"> @RequestParameter あなたの名前: public String name; <t:input type="text" name="name"/> <input type="submit" value="送信"/> public ActionResult index() { </t:form> return new Forward("input.jsp"); ・・・ } input.jsp public ActionResult message() { return new Forward("result.jsp"); ・・・ } こんにちは、${action.name}さん。 } ・・・ アクション result.jsp
  • 20.
    プログラマとデザイナを分業したい! Mayaa http://mayaa.seasar.org/  Tapestry、S2JSFの系譜を受け継ぐHTMLテンプレートエンジン  デザインとロジックの完全な分離を実現  SAStrutsやCubby等と組み合わせて利用可能 HTMLファイル <html> <body> <span id="message">dummy message</span> </body> </html> <html> <body>Hello Mayaa!</body> Mayaaファイル </html> <?xml version="1.0" encoding="UTF-8"?> <m:mayaa xmlns:m="http://mayaa.seasar.org"> <m:write m:id="message" value="Hello Mayaa!" /> </m:mayaa>
  • 21.
    DataBase Access Framework  (S2JDBC)  DBFlute  Doma  Kuina  S2Dao
  • 22.
    現場でトラブルになりにくいO/Rマッパを使いたい! DBFlute http://dbflute.sandbox.seasar.org/  Apache Torque/S2Daoを参考に開発された「現 場指向」のO/Rマッピングフレームワーク  自動生成を活用しておりDB変更に強い  自由度よりも安全性を重視  Condition Bean  外出しSQL(2Way SQL) 詳しくはDBFluteのセッションで! S505 15:00-
  • 23.
    S2JDBCもいいけどS2Daoもいいよね! Doma http://doma.seasar.org/  APT(Annotation Processing Tool)を使用したO/Rマッパ  S2Daoに似ているが、以下の点を改良  実行時にAOPで処理を行うのではなく、コンパイル時にDAOのソースを生成  命名規約ではなくアノテーションによる明示的な指定  2waySQLの文法を間違いにくいよう改善  ドメインクラスへの対応  コンパイル時にAPTによるエラーチェックが可能 @Dao(config = AppConfig.class) public interface EmployeeDao { @Select Employee selectById(Integer employeeId); コンパイル時に DAOの実装を APTで処理 自動生成 @Update int update(Employee employee); } DAOのインターフェース
  • 24.
    Remoting/Communications  S2BlazeDS  S2Axis  S2JMS  S2Flex  S2RMI
  • 25.
    Flex/AIRからSeasar2のコンポーネントを呼び出したい! S2BlazeDS http://s2blazeds.seasar.org/  BlazeDSでFlexからS2Container管理下のコンポーネントを呼 び出し可能  HOT deploy対応 <?xml version="1.0" encoding="UTF-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" backgroundColor="#FFFFFF"> <mx:RemoteObject id="srv" destination="productService"/> <mx:DataGrid dataProvider="{srv.getProducts.lastResult}" width="100%" height="100%"/> <mx:Button label="Get Data" click="srv.getProducts()"/> サーバ側 </mx:Application> public class ProductService { クライアント(Flex)側 public JdbcManager jdbcManager; public List<Product> getProducts() { return jdbcManager.from(Product.class).getResultList(); } ... }
  • 26.
    Webサービスを簡単に作成したい! S2Axis http://s2axis.seasar.org/ja/  POJOをWebサービス化  クライアント側もサポート  JAX-WS、RESTにも対応 public interface Echo { String echo(int id, String message); } diconファイルに登録する際に metaタグでAxisにデプロイする public class EchoImpl implements Echo { public String echo(int id, String message) { Webサービスであることを指定 return "[id = " + id + "] " + message; } } <component name="Echo" class="org.seasar.remoting.axis2.examples.ex01.EchoImpl"> <meta name="axis-service"/> </component> http://localhost:8080/s2axis/services/Echo でアクセス可能
  • 27.
    Libraries  S2Mai  S2CSV  S2Chronos  S2Caching  Fisshplate
  • 28.
    メールを送信したい! S2Mai http://s2mai.sandbox.seasar.org/ja/  送信先等の設定をdiconファイルで管理可能  S2Daoのメール版(Maiインターフェースを作成するだけでメール送信可能)  Velocity or FreeMarkerでメール内容のテンプレートを記述可能 メールテンプレートに 渡すパラメータ Mai DTO インターフェース SMTPサーバの情報等 送信するメールの内容 diconファイル メールテンプレート
  • 29.
    CSVファイルの入出力を行いたい! S2CSV http://s2csv.sandbox.seasar.org/  CSVとJavaBeanをアノテーションでマッピング  アノテーションで読み込んだCSV値のバリデーションも可能 @CSVEntity(header=false) public class DeptCsv { @CSVColumn(columnIndex=0) public Long id; @CSVRequired @CSVColumn(columnIndex=1) public Integer deptNo; @CSVColumn(columnIndex=2) public String deptName; @CSVColumn(columnIndex=3) public String loc; }
  • 30.
    アプリケーションに定期処理を組み込みたい! S2Chronos http://s2chronos.sandbox.seasar.org/  タスクスケジューラ  即時、日時指定、cron形式など様々なトリガーが利用可能  アノテーションでトリガやタスクメソッドの順序を指定可能  動的トリガを利用することでトリガ設定の外部化も可能  Webアプリにも組み込み可能 @Task @CronTrigger(expression = "0 */1 * * * ?") public class BasicTask { public void doExecute() { ... } }
  • 31.
    性能向上のためにキャッシュを活用したい! S2Caching http://s2caching.sandbox.seasar.org/  メソッドの戻り値をキャッシュするインターセプターを提供  メソッドの引数ごとに戻り値をキャッシュする  アノテーションでの適用も可能  バックエンドにはEhcacheを使用 diconファイルでの指定 <component class="jp.sf.amateras.samples.service.CalcService"> <aspect pointcut="calculateSomething">callCache</aspect> </component> @CallCache(componentName="callCache") public String calculateSomething(String condition) { .... } アノテーションでの指定
  • 32.
    Excelを手軽に生成したい! Fisshplate http://fisshplate.sandbox.seasar.org/ja/  Excelテンプレートエンジン  ExcelにVelocityのような記述が可能
  • 33.
    携帯電話向けのWebアプリケーションを開発したい! Mobylet http://mobylet.seasar.org/  携帯Web向けのフレームワーク  絵文字、文字コードの自動変換  画像のリサイズ  デコメール対応メール送信  セッション管理機能  他のWebフレームワークと組み合わせて利用 詳しくはMobyletのセッションで! S603 15:00-
  • 34.
    Eclipseプラグイン プラグイン 説明 Dolteng Seasar2を使用したプロジェクトの雛形を作成 SAStruts、S2JDBCなど様々なフレームワークの組み合わせに対応 Kijimuna Diconファイルを編集するためのエディタ SAStrutsPlugin WTPにSAStruts向けの機能を追加 Matatabi MayaaのmayaaファイルやHTMLファイルの編集を支援 S2JUnit4Plugin テストケース、テスト対象クラス、テスト用diconファイルの相互ジャンプ DbLauncher H2データベースをEclipse上から起動 WebLauncher Winstone(軽量サーブレットコンテナ)をEclipse上から起動 Doma Tools Domaでの開発を支援 EMecha DBFluteでの開発を支援
  • 35.
    Seasarプロジェクトのリソース  メーリングリスト  http://ml.seasar.org/  Subversionリポジトリ  https://www.seasar.org/svn/  http://www.seasar.org/source/browse/  Mavenリポジトリ  http://maven.seasar.org/  Eclipseプラグインの更新サイト  http://www.seasar.org/updates.html  JIRA(課題管理)  https://www.seasar.org/issues/secure/Dashboard.jspa  Hudson(継続的ビルド)  https://www.seasar.org/hudson/  Wiki  http://www.seasar.org/wiki/
  • 36.
    Seasar2活用のために Seasar2徹底入門 SAStruts/S2JDBC対応 ISBN:978-4798121505 価格:3,990 出版社:翔泳社