Play Framework 1.x の起動/停止スクリプト
この記事は Play framework 2.x Java and 1.x Advent Calendar 2013 - Adventar の十日目です。
ぼくが初日から日付をまたいだせいで あうとー 呼ばわりされたり、謎の義務感に駆られた孤高のエンジニア達がひとりで二つも三つも記事を書いたりしていますが、何とか続いているようです。
「この人たち必死過ぎwww可哀想www」と思ったら、12/17 発売予定の Play Framework 2徹底入門 を買って、空き枠に読書感想文を書いてください。
Play Framework 2徹底入門 JavaではじめるアジャイルWeb開発
- 作者: 掌田津耶乃,原一浩
- 出版社/メーカー: 翔泳社
- 発売日: 2013/12/17
- メディア: 大型本
- この商品を含むブログ (6件) を見る
Play1 による開発と納品
本題に入る前の前置きとして、Play1 の起動/停止スクリプトが必要になった背景をお話し致します。
2013 年度上期にあるシステム開発を受注し、システム設計等を任せて頂いたので、少し迷いましたが Play Framework 1 で開発することにしました。
規模は小さめでしたが、ご多分に漏れず予算と納期は厳しく、不慣れなフレームワークを導入したことによって失敗するリスクはもちろんありました。しかし、昨今の業界動向から察するに、このまま ステートフルかつページ指向な Struts 系のフレームワークを使い続けるリスクの方が高いと判断し、提案しました。
このあたりは機会があればどこかでお話ししたいと思いますが、まずは下記リンクなどに目を通して頂ければと思います。
- 「業務系システムは今すぐ脱Strutsを!」業務システムエンジニアのためのHTML5勉強会#04 活動報告:レポート|gihyo.jp … 技術評論社
- ポータブルなWebアプリケーション - naoyaのはてなダイアリー
- 2014年のウェブシステムアーキテクチャ - stanaka's blog
すぐに session.setAttribute/getAttribute
としてしまうステートフル脳から Ruby on Rails 以降のステートレス脳に切り替えるのは、それなりにコストが掛かります。そもそもステートレスアーキテクチャを理解していないプログラマも SI 業界にはごろごろいますので、致命傷にならないうちに対策を打たれることをおすすめします。
Play1 起動/停止スクリプト
いろいろと紆余曲折はありましたが、なんとか納品することができたので、本番システムの起動と同時に Play1 アプリケーションを立ち上げるスクリプトを用意しました。
同じ内容の記事がすでに クラスメソッド株式会社様の開発者ブログ にて公開されているのですが、リンク先が本家サイトのデザイン変更で壊れてしまっていたので、ここで改めて紹介させて頂こうと思います。
今回は init.d script to launch Play framework under CentOS/RedHat をそのまま使いました。
はてなブログは gist 記法が使えるので便利ですね。
Ubuntsu 系は init.d script to launch Play framework under Ubuntu が参考になると思います。
パーミッションの設定等については、上記クラスメソッド株式会社様の開発者ブログを参考にしてください。
注意点
基本的に問題なく使うことができましたが、一点だけ注意が必要です。
Play1 のスクリプトは python で書かれており、ここから java のプロセスを立ち上げる仕組みになっていますが、上記の起動スクリプトは python の実行結果のみで成功/失敗を判断しています。このため、立ち上がった java プロセス内で何らかのエラー(もっとも多いのは、前回立ち上げた Play1 プロセスが正常にシャットダウンされておらず、9000 番ポートの取得に失敗する)が発生しても、起動スクリプトは正常終了を返してしまいます。
ログファイルをポーリングしてアプリケーション正常起動メッセージが出力されることを確認してから正常終了を返すよう、起動スクリプトを改善したほうがよいかもしれません。
まとめ
みんなでストラッツやめましょう。次は @yuba さん(二回目)です!