
The Seasar Projectの全貌を探る(1)
次世代J2EEを目指すSeasar2はどう誕生したか
沖林正紀
2005/6/9
| Seasar(シーサー)は、国内のコミュニティ「The Seasar Project」によって開発が行われているオープンソースプロダクトだ。DI+AOPコンテナとして評価が高いSeasarV2は、J2EE開発の現場にも影響力を持ち始めた。例えば電通国際情報サービスがSeasar Projectを正式に支援することを表明し、2005年6月からは同社による商用サポートサービスが開始されている。本連載では、同プロジェクトの代表的なプロダクトを紹介していく。(編集局) |
Seasarプロジェクトは、「J2EEの解体と再構築」「易しさと優しさ」をテーマに掲げて比嘉康雄氏を中心とするメンバーによりオープンソースでの開発を進めており、現在その中核となるSeasarV2(以下S2)をはじめとして30余りのプロダクトを抱える規模に成長しています。この連載では、いま注目を集めているS2とそれに関連するプロダクトを各回で1つずつ紹介していきます。今回はSeasarプロジェクトの全体像と、そこで開発されているプロダクトについて説明しましょう。
|
|
Seasarプロジェクトの沿革 |
このSeasarがプロジェクトとしてSourceForge.jpで最初に登場したのは2003年8月でした。そしてSeasarをDI+AOPの軽量コンテナとして再構築することが比嘉氏によって表明されたのが2004年1月です。これがSeasarV2として開発され、最初に公開されたのが2004年3月です。その後、これに対応する関連プロダクトとして、この後紹介するS2Struts、S2Hibernate、S2Daoなどが続々と生まれていきます。そして、2005年4月からはOSCJ.net(Open Source Collaboration Joint Network)からの支援を受け、同サイト上でSeasarプロジェクトのホスティングも開始されました。
■最初はアプリケーションサーバだった
冒頭で述べたとおり、Seasarプロジェクトで中核となるプロダクトの名前は現在S2となっています。これはご存じの方もいらっしゃると思いますが、DI(Dependency Injection : 依存性の注入)とAOP(Aspect Oriented Programming : アスペクト指向プログラミング)の技術を取り入れた軽量コンテナです。しかし、もともとこのプロジェクトではSeasarという名前のアプリケーションサーバの開発が進められていました。このプロダクトの開発はすでに終了していますが、現在もseasarsetupV1Final With Nazunaという、JettyとHSQL Database Engine(HSQLDB)が組み込まれたバージョンがダウンロード可能となっています。
■今後はEJB 3.0の仕様も取り込む
2005年4月22日(金)に開催された「Seasar Strategies Day 2005」というイベントで比嘉氏自らが講演し、その中で「Kuina」(クイナ)というプロジェクトについて言及されました。このプロジェクトは、いまのSeasarに、仕様策定中のEJB 3.0(JSR220)のうちEntity Beanの仕様を取り込み、J2SE5で追加されたアノテーション(annotation)を記述することで、よりO/Rマッピング機能を使いやすくしようというものです。
SourceForge.jpで公開されている資料によると、具体的なアノテーションの例として挙げられているのは、EJB 3.0に準拠しているものが@Entity、@Table、@Columnなど13種類、独自のものとして@Criterion、@Criterionsの2種類でした。EJB 3.0の仕様では、Early Draft Review 2の段階で40種類以上のアノテーションが存在しているため、Kuinaが実装される段階では、資料に記述がないアノテーションも順次取り込んでいくことになるのでしょう。
このほか資料では、アスペクトによるEJBQLやDaoの実装コードの自動生成、外部ファイル化したSQLファイルを@NamedQueryのqueryStringパラメータに利用、テストコードの自動作成、といった開発支援機能の実装も予定されていることにも言及しています。
同じDI+AOPツールとして知られているSpring
Frameworkや、O/RマッピングツールHibernateでもアノテーションの実装が進められており、フレームワークを用いたアプリケーション開発ではアノテーションを利用するのが規定路線となっていくのか、今後の発展が楽しみです。
■からさわぎ
「からさわぎ」というのは、Seasarプロジェクトが主催する、S2および関連プロダクトについての講演が行われるイベントで、2004年4月に東京で行われたのをはじめ、これまでに大阪、福岡、沖縄でも開催されています。このとき用いられた資料は、やはりSourceForge.jpで公開されています。
|
|
Seasarプロジェクトで開発されているプロダクト |
現在、このプロジェクトで開発されているプロダクトは、表1に示すように、大きく3つに分類されています。1つはS2コアで、これはそのままS2を表します。次にS2を基盤として動作するS2プロダクトがあります。そして現在開発途上にあるSandboxです。表1に掲げた以外にもメールの送受信を行うライブラリや永続化をサポートするツールもあります。Seasarプロジェクトで開発されているすべてのプロダクトの配布はSeasar Software Licenseに基づいて行われています。
![]() |
| The Seasar ProjectのWebサイト(http://www.seasar.org/) |
プロダクトの種類は、S2StrutsやS2JSFなど、ほかのWebアプリケーション開発フレームワークでS2の利用を可能にするものがまず挙げられます。それからS2Dao、S2Hibernate、S2Cayenneなど、データベースアクセスに関係するものもあります。さらにS2FlexやS2OpenAMFのようにリッチクライアント環境にS2を適用するものもあれば、S2AxisのようにS2と外部との通信を行うものなど多岐にわたります。それから新しい動きとして、S2そのものを.NET
FrameworkやPHPといった別のプラットフォームに移植する活動も始められ、Seasarプロジェクトはその活動の幅を一層広げています。
これらのプロダクトについては、SeasarプロジェクトのWebサイトからドキュメントを閲覧したり、プロダクトをダウンロードしたりすることができるようになっていますので、適宜参照してみてください。
表1 Seasarプロジェクトで開発されているプロダクト(関連プロダクト、旧プロダクトは除く)
|
||||||||||||||||||||||||||||||||||||||||||
|
|
代表的なプロダクト |
では、Seasar2プロジェクトの代表的なプロダクトとして、SeasarV2(S2)、S2Dao、S2Hibernate、S2Struts、S2JSFについて簡単に紹介しましょう。
■SeasarV2(S2)
S2はSeasarプロジェクトの中核となるプロダクトで、DIとAOPという技術を導入した軽量コンテナだということはすでに述べました。また、このほかにもトランザクション制御のS2Tx、コネクションプールのS2DBCP、さらにテスティングフレームワークとしてJUnitを拡張したS2Unitも用意されています。
S2におけるDIは、コンストラクタ・インジェクション(Constructor Injection)とセッター・インジェクション(Setter Injection)のほかに、任意のメソッド名を指定したメソッド・インジェクション(Method Injection)も可能です。
そしてAOPはインターセプタ(Interceptor)を用いています。あらかじめS2で用意されているものとしては、実行経過をトレースするTraceInterceptor、例外処理を行うThrowsInterceptor、テスト用にモックオブジェクトを用いるためのMockInterceptorなどがあります。もちろんインターセプタは独自に実装することもできます。
S2Txは、トランザクション処理を行うインターセプタとして実装されており、J2EEのトランザクション属性のうち、Required、RequiresNew、Mandatory、NotSupportedが実装されています。トランザクションの開始とトランザクション終了時のコミットおよびロールバックはインターセプタで行いますので、開発者はその実装をしなくてもS2の設定のみでトランザクション制御機能を利用することができます。
S2DBCPは、JTA(Java Transaction API)と連動したコネクションプール機能を提供します。XADataSource機能がJDBC Driverで提供されていなくても、S2の実装でエミュレートさせることができます。これにより、開発者はS2の設定のみでコネクションプール機能が利用できるようになります。
S2Unitには、テストメソッドごとに自動的にS2Container(S2でDIによりオブジェクトを取得するためのコンテナ)を生成する機能や、テストメソッド名の最後にTxを付けると自動的にトランザクション制御を行う機能があります。また、検証用のデータをExcelファイルから読み込む機能や実行結果をExcelファイルに出力する機能も持っています。そしてS2DaoによるSELECT文の実行をテストするS2DaoTestCaseクラスも用意されています。
■S2Dao
S2Daoは、JavaBeansオブジェクトに対するデータ(プロパティ)へのアクセスをデータベースへのアクセスに置き換えて処理を行うDAO(Data Access Object)をS2の「注入」機能によって作成できるようにするものです。
その基礎になるのは「アノテーション」(J2SE5のそれとは別物)と呼ばれる定数の設定で、ここで設定される値に基づいてオブジェクトとデータベースのテーブルとの対応などが決められます。また、アノテーションの設定でデータのバージョンやタイムスタンプに基づく排他制御もできるようになっています。
そして、データベースへのアクセスで用いられるSQL文を生成する際に、基となるSQL文にコメントを付けておき、生成するSQL文の内容を開発者が設定することができるSQLコメント機能があります。これにより、パフォーマンスなどを考慮したDAOを作成することが可能になります。
このほかSQL文の生成には、EntityManagerとなるクラスをAbstractDaoクラスをアプリケーション内で継承するという方法もあります。こうすると、SQLファイルを作成せずにアプリケーション内でSQL文を生成させることができます。
■S2Hibernate
S2DaoはDAOをインターフェイスの形で開発しておき、データベースアクセスの部分を後から「注入」するというものでしたが、S2Hibernateは、DAOをインターフェイスの形で開発するのは同じですが、データベースアクセスの部分はHibernateのO/Rマッピング機能を利用するツールです。つまり、SQLを生成する処理をS2側ではなくHibernateに託してしまおうというわけです。
Hibernateでは、通常SessionやTransactionの制御をアプリケーション上で行わなくてはなりませんが、S2Hibernateはそれを内部で行っているため、開発者がこれらを意識する必要がなくなります。またS2Hibernate.daoを用いると、Hibernateにおけるクエリー言語のHQL文と、S2Daoのアノテーションと同じ記述方法を用いてDAOを作成することもできます。
Hibernate3のサポートについては、本稿執筆現在、シーサーサンプルプロジェクトにkoichik氏が作成したS2Hibernate3-1.0.6b4.zipがアップされていますが、今後の正式なサポートが待たれるところです。
■S2Struts
S2Strutsは、Strutsにおいて業務処理を担うActionクラスに対して依存性注入(DI)を行うことができるプロダクトです。セッター・インジェクションかコンストラクタ・インジェクションの場合は、ActionクラスをコンポーネントとしてS2に登録しなくてもよいことになっています。
また、StrutsのActionクラスを継承しないクラスでもstruts-config.xmlにActionクラスとして登録しておくことができます。この場合は、登録するActionクラスの名称のところをインターフェイスの名称にしておきます。
それから、通常Strutsにおいて使用するActionクラスの名称はstruts-config.xmlに記述しますが、これをS2の設定ファイルに記述できるようにする方法もあります。
これらの機能を実現するには、web.xmlやstruts-config.xmlにS2Strutsを使用するための設定を書き加える必要があります。
■S2JSF
JSF(JavaServer Faces)は、JSP(JavaServer Pages)にコンポーネント指向開発の要素を取り入れて、表示画面の構成をコンポーネントを組み合わせることにより実現することができる仕組みであることはあなたもご存じでしょう。S2JSFは、この仕組みを利用したテンプレートエンジンといえます。
画面表示に必要なコンポーネントの名称や、そのコンポーネントに対する属性の値を、HTML文書内に<span>タグなどの属性の値として記述し、これを解釈する段階で、その場所に指定されたコンポーネントを「注入」し、実際の表示画面が出来上がるというわけです。このとき、JSPの式言語に相当する、"#{変数名}"というValueBindingと呼ばれる記述も用いることができます。
次回以降は、それぞれのプロダクトについて詳しくご紹介していきます。最初に取り上げるのはSeasarV2(S2)です。それ以降はS2Dao、S2Hibernate、S2Struts、S2JSFの順で取り上げていく予定です。
■関連URL
Seaser Projectの全貌を探る バックナンバー
- 第1回 次世代J2EEを目指すSeasar2はどう誕生したか
- 第2回 DI+AOPを実現するSeasar V2
- 第3回 SeasarV2によるDBアクセス機能
- 第4回 SeasarV2によるテスト機能
- 第5回 SeasarのO/RマッピングツールS2Dao
- 第6回 SeasarのDBアクセスにHibernateを使う
| Java Solution全記事一覧 |
ホワイトペーパー(TechTargetジャパン)
- Android NDKでJNIを使用してアプリを高速化するには (2010/3/17)
C/C++やOpenGL ESといったネイティブコードを使うためのNDKとJNIを紹介し、その使い方や注意点を徹底解説します - 調査の難しい「OutOfMemoryError」事例、5選 (2010/3/11)
Java開発者が避けて通れないメモリ不足エラーの基本的な問題切り分け方法と発生につながる事例、対処法を解説 - 究極の問題解析ツール、逆コンパイラJD-Eclipseとは (2010/3/8)
ライブラリ内で例外が発生! そのクラスのソースコードを調べたい!! 自動で逆コンパイルしてくれる無料Eclipseプラグインがあります - いまさら聞けない「Webサービス」の常識 (2010/2/26)
昨今では企業システムでも使われる「Webサービス」の概念やJava標準のJAX-WSを紹介しJBoss WSでサンプルを作成
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |







