Struts による五目並べ対戦システム

どうも最近筆者は Java づいているなあ。まあ、それだけ Java がメジャー言語だということなのだが、実は筆者のメインマシンは今までとてつもなく古く遅いもので(Linuxユーザだから...)、Java を使うととてつもなく遅かった(苦笑)。前から Tomcat なぞも関心があって入れていたのだが、「忘れた頃にレスポンスが返る」というくらいにとんでもないパフォーマンスなので、まともにアプリケーションを作る気が起きなかったのである。

しかし、昨年末に新しいマシンを買った(それでも5万円級)ので、Java がサクサク動くのである!(何を今更...)そこで嬉しくなって、「対戦型五目並べ」をリメークして(ついでにデザインパターンを深めて)、ホームページとしても公開したのである。 とすれば、次は Web アプリだ! もう Tomcat でも「ターンアラウンドが大ストレス!」という状況ではない。

まあ、筆者はCGIはずいぶんと書き倒しているわけで、そこらへんはこのサイトに設置されている「魔術的なCGI」で読者はご存知のこと思う。一応「Servlet & JSP」も遊び程度にはしたこともあるので、全然知識がないわけでもなかったのだが、「ターンアラウンドが大ストレス!」のために、本格的なものをあまりする気が無かったわけである(あと、Servelet & JSP は、どうもうまく構造化されてなくって、ソースが汚い...まあ、J2EEデザインパターンをしっかり使うべきなんだけど)。

最近の流行といえば「Struts」である。本もかなり出ているし、それだけ「Webアプリの定番フレームワーク」になってきているわけだ。「Struts」は何やかんや言って、「Servlet&JSP」の「汚いところ」をうまくフレームワークの構造にハメこんでやって、構造的にアプローチできるようにしているもののわけだ。これって、「大変良いこと」である。

なので、筆者もちょっとヤル気になった。題材は、今までの継続で「対戦型五目並べ」である(以前、CGIで対戦システムを書いている)。これを選んだ理由は次の通り。

  1. アプレットをすでに紹介しているので、ホームページのコンテンツとして連続性ができる。

  2. 以前CGIで書いているので、どういう内容か把握できている。

  3. 「対戦型」というのが、若干変則的である。Struts で作るWebアプリというと、フツーは単独のアクセス者が「自分自身のアクションだけ」で状態を遷移して、「面白い結果」を得るだけである。しかし、「対戦型」の場合は違う。「対戦相手のアクション」によって自分の状態が遷移するという、変則的なことをしなければならないのである。要するにブラウザからの定期的な「クライアント・プル」でアクセスし、同一URLのアクセスであっても、サーバの内部状態に応じて、出力が異なってくる....というような処理を実装する必要がある。ここらへん、面白そうだな。

  4. 「特異体質」として、「対戦型五目並べアプレット」の実装との関連がある。「対戦型五目並べ」は独立したサーバ・クライアント方式であり、勝敗結果のデータベースは五目並べサーバが更新する。ということは、「勝負が終わった」段階で、Struts による「対戦システム」は、「多分結果が変っているんだろうけど、どう変っているかはデータベースにアクセスしてみなければ判らない!」という状況に陥る。どうせするんなら、シコシコとSQLを発行するんじゃなくて、今風にデータ・アクセス・オブジェクト(使ったのは Torque)で更新したいところであり、これとこの「特異体質」の相性がやや悪い部類の処理をしなければならなくなる。ここらへんも面白い。

....要するに、「Struts による掲示板」みたいなアッタリ前のものを筆者はしたくないわけだ(歪んでる...)。適度に難しく、ホームページで紹介して面白く読んで貰え(書籍と同じじゃヤダ!)、色々な問題がガンガン出てくるようなものが好きなのである。筆者は「新しい言語などを使う時には、とりあえず理解した!と思ったら、変則的で難しいものをやってみる!」というのをポリシーとしている。これって典型的な「ハッカー根性」かな?

ダウンロード&インストールは次のページ

参考にした本は次の通り。

  1. 「Jakartaプロジェクト徹底攻略」(技術評論社)
  2. 「Struts イン アクション」(Husted 他、ソフトバンク)
  3. 「Jakarta Struts 逆引き大全」(坂田健二、秀和システム)
  4. 「J2EEパターン」(アラー他、ピアソン・エデュケーション)

意外なことに「Struts イン アクション」は大変分かり難い本である....要するに、全体像が掴みづらいのである! 記述が総花的に過ぎて、迷路に迷い込むような印象が強い上に、具体的サンプルも少ない。また、資料的なレベルでの詳細さにも欠けているわけで、ちょっとこれは「開発者自身が書いた本」のアンチパターンになっているように思う(こういう「開発者自身が書いた判りづらい本」の代表的なものだと筆者が思うのは、あと「Apacheハンドブック」!)。

これで大体マトモなソースになったので、解説を書いて行こう。

それから更に、「J2EEするんだから...」という軽いノリで、EJBによる版も作成した。これは本体に対するアドオンキットとして作ったので、本体をダウンロードして遊んでから、試してみていただきたい。ちなみに、JBoss で J2EE 環境を統合してしまったので、本体が Tomcat で動くものなのだが、JBoss 用にしてしまったので、インストール手順をちゃんと読んでほしいな。

EJBアドオンキットのダウンロード&インストールは次のページ

EJB版の参考書は次のもの。

  1. 「プロフェッショナルEJB」(インプレス)
  2. 「JBoss入門」(皆本房幸、技術評論社)

それから更に現在取り組んでいるのは、Middlegen+Hibernate で既存データベースからマッピング用クラスを生成し(いわゆるボトムアップ開発)、それを SOAP で介して分散環境を実現するというもの。まあ、ここらへん Web で見てても「テストスイートで遊んでみました」というものとか、「遊んでみたよ〜」というブログはやたらとあっても、ちゃんと取り組んでいるものってあまりない。英文マニュアルを読み倒してやってるけど、大体完成したので少しづつデビューしよう。筆者は別に「新しがり屋さん」ではなく、どっちか言えば「超面倒なアルゴリズムを考える」のが好きな方だが、この業界は流れが速すぎるので、チョッくらコッチにも手を出してみた..ということに過ぎない。

ダウンロード&インストールはこっち

一応この新プロジェクトも完成が見えたので、ホームページとして書いて行こうか。目次は次の通り(2004.7/30,とりあえず SOAPまで書けた....すぐやるよ残りは)。

まあ、目次で見てわかるように、キーワードは「サボる」だ。要するにこいつら、「早業系」である。何もなくて「早業」ができるんじゃなくて、「早業=コードを書かない」わけで、「すでに似たようなものがあるんなら、出来るだけそれを再利用する!」がポイントになる。こういうノリで解説していくのでよろしく!(真正面から解説するのなんて雑誌なんかにはよくあるから、開発プロセス的にやっていく方が具体的に役に立つんじゃないかなぁ)

あ、参考書は次の通り。

  1. 「オープンソースJavaプロダクツ」(技術評論社)
  2. 「WEB+DB PRESS Vol.13」(技術評論社)
  3. 「Java & XML」(B.McLaughlin著、O'Reilly Japan)



copyright by K.Sugiura, 1996-2006