Seasar Conference 2006 Spring (4)

前の記事 に続いてSeasar Conferenceをレポートする。

セッション3

  • DB-sideのほうは「DBを256倍活用する方法 S2Dao PHP/.NET/Java
  • Seasar-sideのほうは「企業システム進化論 - Seasarファミリー for SOA
  • ミニセッションのほうは「EJB3Unit」「S2Dao.PHPデモ」

私は「企業システム進化論」を聞いてきた。発表者は 和田卓人さん 。なんか、いろんなSeasarプロダクトのコミッタをやってらっしゃる。

このセッションの主題であるワークフローの管理、その変化への対応、企業システムの統合といった分野は私は経験があまりなくて、S2Buriもあまりピンと来ていなかった。だからこそ聞きに行った。S2Daoは自前で勉強すればなんとかなるもの。

結果として、S2Buriの凄さがちょっとだけ分かった気がする。

  • Seasarは分散システムの領域にどうやって立ち向かうのか
  • ワークフローの世界

これがこのセッションの主題である。

分散について

DI基盤(S2Container), プレゼンテーション層(Teeda, J2JSF), DB系(S2Dao他)をSeasarはサポートしているが、残るは分散である。Seasarはこれにどうやって立ち向かうのか

関連する主なプロダクトは、

S2Axisは上記参照。S2RMIも名前の通りJava RMIのgood wrapper。S2RemotingはS2AxisS2RMIを隠蔽し、クライアントコードをプロトコルから独立にする。

S2JMSはこんな感じ。

  • S2JMS: JMSのAPIは低水準なので、それをラップして使い易くする

  • 基本的にPOJOで実装できる。メッセージを送信するにはメソッドから返り値を返すだけ。

  • 返り値をInterceptorが横取りして送信してくれる。
  • 明示的に送信用コンポーネントを呼び出すこともできる。

  • S2JMS-ActiveMQ

  • JMSを利用した非同期通信をActiveMQ上で実現

  • S2JMS-Container

  • J2EEコンテナに依存せずにJMSを利用できるようにするための、自前のJMSコンテナ。

  • JMSの非同期通信は必ずしもUIを持たない基幹系でも有用だから、そういうところで便利

えっと、私も前にちょっと読んだだけでJMSについてうろ覚えだったので一応復習。

まずMOMっていうのがある。非同期通信用のミドルウェアで、実装にはIBMのWebSphere MQとか、オープンソースActiveMQとかがある。送信側はは非同期メッセージを一度MOMにキューイングして、受信側はMOMからそれを取り出す。構造はProducer-Consumerパターンっぽい?

MOMが間に入って送信側と受信側を互いに抽象化することで、

  • 異種機間接続も容易。ホスト機とUnixワークステーションとか
  • 言語間接続も容易。JavaとLLとか。
  • 送信側は受信側のURLを知らなくて良い。配置が柔軟になる。

で、JMSとはJavaからMOMを扱うためのAPI。DBに対するJDBCのような低水準のAPIである。

業務プロセス、ワークフロー

業務において個々の局面で為すべき個々の作業はあまり変わらない。つまり、個々のビジネスロジックというのはあまり変化しない。変わるのは、そのビジネスロジックをどういう手順で進めていくのかというワークフローである。「業務ロジックよりも業務プロセスのほうが寿命が短い」。

ロジックの中に、プロセスが入り込んでしまうと厄介である。例えば、会計処理において項目を計算するロジック自体は変わらないのに、「こういう場合はどの部署に」というような業務プロセスがif文のような形で会計処理に入り込んでしまうと厄介である。

これはプロセスをロジックの中に、寿命の短い要素を再利用可能な要素の中にハードコードしていることになる。そして、プロセスに関する処理がロジックの中に散在してしまう。プロセスが変化した時の改修が困難となる。

従って、業務プロセスを業務ロジックから外部化しなければならない。SeasarプロダクトにあってはS2Buriがこれを実現する。S2Buri勉強会も沢山の人が集まり、Seasarプロダクトの中でもTuigwaaなどと並んで注目を集めているものの1つである。

S2BuriSeasar発のワークステートエンジンであり、GUIによって簡単にプロセス(業務フロー)を管理できる。

POJOの価値

そして、業務ロジックからも通信プロトコルからも独立で互いに依存しない、純粋なロジックだけが残る。それは、フレームワークにも依存しない、POJOである。

Javaにおいてもっとも寿命が長いのは、どんなフレームワークでもない、POJOであろう。それは「Javaである」ことしか要請しないのだから。POJOは中継層やプロセス層のような「うつろいゆくもの」に依存しない。

POJO(と、POJOのためのJUnit)を蓄積していくことが資産の蓄積である。Seasarファミリーはそれを可能とする。

続く

セッション4