AWS Elastic Beanstalkとちょっと試してみた

http://aws.typepad.com/aws_japan/2011/01/introducing-amazon-beanstalk.html

WARをアップロードして動かすことができるというので、Servletが1つだけのWebアプリを動かしてみた。ヘルスチェックでちょっとハマったので、覚え書き。

Servletのコードはこんな感じ。

public class TestServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.getWriter().println("Hello, world!!");
		response.getWriter().println("ServerInfo: " + getServletInfo());
		ServletContext sc = getServletContext();
		response.getWriter().println("API version: " + sc.getMajorVersion() + "." + sc.getMinorVersion());
		response.getWriter().println("Servlet name: " + getServletConfig().getServletName());
	}
}

このServletを含んだwarファイルを作成して、AWS Management Consoleからアップロードして動かしてみる。しばらく待ったあと、なんだかうまく動いてないようだ。ログを見ると「Environment health has been set to RED」と表示されている。
http://gyazo.com/3b8dc6c617db9b6e026962357c825f1f.png


色々確認してみたが、どうやらヘルスチェックで失敗しているらしい。
Basic Health Reporting - AWS Elastic Beanstalk
デフォルトでは、アプリケーションルート(http://<任意>.elasticbeanstalk.com/)へのHTTP HEADに反応しないと、アプリケーションが動いていないと判断されるらしい。

web.xmlservlet-mappingが下記のようになっていたので、アプリケーションルートへのHEADに反応できなかったのが原因らしい。

  <servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/TestServlet</url-pattern>
  </servlet-mapping>

対策としては、下記のいずれか。

  1. ヘルスチェックのURLを変える
    • Edit Configuration -> Load Balancer -> EC2 Instance Health Check -> Application Health Check URL を /TestServlet に変える
  2. アプリケーションルートへのHTTP HEADに反応するようにアプリケーションを直す
    • 例えば、web.xmlservlet-mappingのurl-patternを /* に変える

1つめの対策を取ったら、無事Environment healthがGREENに変わった。
http://gyazo.com/027afe8aabcdfc81cb52008d88fb0d7b.png

http://<任意>.elasticbeanstalk.com/TestServlet でブラウザを開いて、動いていることを確認できた。
http://gyazo.com/86bfbad694523f7292c55127e92c4633.png

JRuby on RailsでSQLite3を使うための覚え書き

JRubyRuby on Rails を使うこと自体はそんなに難しくない。でも、Mac OS Xに付いてるSQLite3をデータベースに使う設定が色々面倒で、Web上の情報も少なかったので、覚え書き。

動作環境

  1. Mac OS X 10.6.5
  2. JRuby 1.5.5 (ruby 1.8.7相当)
  3. Ruby on Rails 3.0.3

SQLite3を使う手順

1. JRubyをインストール

ここを参考にインストール。
http://kenai.com/projects/jruby/pages/GettingStarted

2. Railsと必要なモジュールをインストール

下記のコマンドを実行。

sudo jruby -S gem install rails activerecord-jdbcsqlite3-adapter

SQLite3を使うのに activerecord-jdbcsqlite3-adapter が必要。関連モジュールは gem が自動でインストールしてくれる。

3. Rails を動かす
3.1 アプリケーション作成

ここの簡易ブログアプリを途中まで作ってみる。
Getting Started with Rails — Ruby on Rails Guides

jruby -S rails new blog
cd blog
3.2 設定ファイル変更

SQLite3を使うために、設定ファイルを変更。
下記を参考に、試行錯誤した。
http://jruby-extras.rubyforge.org/activerecord-jdbc-adapter/

Gemfile の変更
gem 'sqlite3-ruby', :require => 'sqlite3'

上記の記述を、下記に変更。

if defined?(JRUBY_VERSION)
  gem 'activerecord-jdbcsqlite3-adapter'
else
  gem 'sqlite3-ruby', :require => 'sqlite3'
end
config/database.yml の変更
development:
  adapter: sqlite3

アダプターの指定を、下記に変更。

development:
  adapter: jdbcsqlite3
3.3 Scaffold

あとは、普通にRailsで開発。

jruby -S rails generate scaffold Post name:string title:string content:text
jruby -S rake db:migrate
3.4 アプリケーション実行
jruby -S rails server

http://localhost:3000/posts を開いて、動作確認。

(おまけ)便利なAlias

いちいち "jruby -s" と入力するのが面倒なので、以下の設定を .bash_profile あたりに入れると便利。

alias jrails="jruby -S rails"

"ruby -S rails"と入れる代わりに、"jrails"で済むようになる。

Twitterのクジラの絵を変えるGreasemonkeyスクリプトを作ってみた

Twitter のクジラを萌えにしてみた - smellman's Broken Diary
これを見て思いついた。あまり見たくないover capacityのクジラの絵も、自分の好きな絵に変えられたら、ちょっと楽しくなるかも。
というわけで、あのクジラの絵を変えられるようになるGreasemonkeyスクリプトを作ってみた。これを使うと、こんな感じになる。

続きを読む

Echofon for Macで、はてなブックマークするのが便利なブックマークレット

ブックマークレットサービス・Hatena::Let を作りました - 2nd life
ブックマークレットをかんたんに作成・公開できるサービスが出来たそうなので、私がよく使っている自作ブックマークレットを公開してみることにした。

説明が長くて枠内に収まってない・・・。仕方ないので、ここで使い方を説明しておきます。
このブックマークレットを使うと、今開いているページのURLとタイトルを使って、「B! <タイトル>」というツイートをEchofon for Macの入力欄に出力します。必要に応じて「B!」の前にコメントやタグを入力すれば、あとはそのままツイートすればブックマークできる、という寸法です。


このHatena::Letというサービス、デバッグもやりやすいので、ブックマークレットを作るのに便利そうです。

JSR 299:Contexts and Dependency Injection for Java EEの機能を簡単に調べてみた

Jungle Java - JSR 299 の参照実装 Weld が GAE で動作
この記事を見て、Contexts and Dependency Injection for Java EE(以下、CDIと略)がどんなものか気になった。
JSRということは、Javaの標準のDI仕様になるということで、Java EE 6に入る事も決まっている。
http://journal.mycom.co.jp/news/2009/12/08/010/index.html

というわけで、以下のURLを参考に、その機能を簡単に調べてみた。

CDI(旧名WebBeans)入門 その6 - しんさんの出張所 はてなブログ編
Weld - JSR-299 Reference Implementation

CDIの機能一覧

DIを知っている人前提機能一覧。機能名は、Weldのドキュメントへのリンクになってます。

Injection
DIの基本機能。@Injectionアノテーションで、コンストラクタやフィールドへのインジェクションが可能。
Qualifier
インジェクションする実装を、複数の実装からアノテーションで指定。
Alternatives
インジェクションする実装を、クライアントコードの変更なしに変更。テスト時のモック設定などに使える。
Scope
インジェクションするインスタンスのスコープを指定。組み込みのスコープとして、@RequestScoped, @SessionScoped, @ApplicationScoped, @ConversationScopedが用意されている。
Producer methods
DIコンテナがインスタンス生成できないクラスをインジェクションできるようにする。
Interceptors
AOPの機能。メソッド呼び出しの前後や、インスタンスのライフサイクルに割り込み処理を入れられる。
Decorators
あるJavaインターフェイスのメソッド呼び出し前後に割り込み処理を入れられる。Ineterceptor(AOP)の使い勝手を良くする。
Events
Obeserver/Consumerパターンによるイベント処理を実装しやすくする。
Stereotypes
ScopeやInterceptorなどのアノテーション設定を1つのアノテーション設定にまとめる。
Java EE component environment resources
Java EEコンポーネントのインジェクション。@Resource, @EJB, @PersistenceContext, @PersistenceUnit, @WebServiceRefが用意されている。

所感

Springあたりの一般的なDIコンテナと比べて、特に目新しい機能はないけど、Java EEの標準でサポートするということに意味があるのだろう。逆に開発者から見ると、これからDIを学ぶ人にとっての入り口としてCDIを学ぶのは良いのかも。既存のDIコンテナの特徴を取り込んだ仕様のようだし、Java標準ということで、CDIが普及する可能性もあるだろうし。

モデリングの目的

UMTP認定試験の勉強その2。
UMLなどの記法を用いて、システムを描写する作業をモデリングと呼ぶ。モデリングは、その目的から以下の4種類に分類できる。

要求モデリング
ユーザがシステムに要求する内容を理解するためのモデリング。システム化の対象範囲を明確にする。
分析モデリング
システムが何をするかを明確にするためのモデリング。システム化の対象範囲の構造を明確にする。
設計モデリング
システムをどのように実現するかを明確にするためのモデリング。システムの実現方法を明確にする。
実装モデリング
実際に動作するシステムの構成要素を明確にするためのモデリング。ハードウェア構成、ソフトウェア部品の構成、プログラムコードの構成を明確にする。

問題を解く事に置き換えると、こんな感じだろうか。

UMTP認定試験を受けることになった

会社の指示で、UMTP認定試験を受ける事になった。UMTPのL3認定を取得しろとのこと。個人的にはこういう資格にあまり興味はないのだが、資格を取るために勉強する事に意味はあるだろうし、受験料は会社が出してくれるので、受験することにした。
まずはUMTP認定試験はどんな試験なのか、ということで、公式サイトで確認してみた。
UMTP認定試験について - UMTP 特定非営利活動法人UMLモデリング推進協議会
L1からL4までのレベルがあって、大雑把にはこんな所らしい。括弧内は私の理解。

レベル モデリングスキル
L4 実践に基づいてモデリングを指導できる(実務経験が豊富)
L3 実務でモデリングが実践できる(良い設計ができる)
L2 UMLモデルの読み書きが普通にできる(読み書きできる)
L1 簡単なUMLモデルの意味が分かる(知ってる)

上位のレベルの認定を受けるには、下位のレベルを合格してないといけない。私はL3認定を目指しているので、L1、L2、L3と順番に3回合格しないといけない。

まずはL1認定を目指すのだが、ややこしいことに、L1には科目T1と科目T2があり、L1認定にはT2の合格が必要。なぜT1があるのかよく分からないが、とりあえず無視して、L1の科目T2の試験概要とサンプル問題を確認。
http://www.umtp-japan.org/modules/examination3/index.php?id=3&tmid1=4
http://www.umtp-japan.org/modules/examination3/index.php?id=13&tmid1=11

モデリングスキルレベル UMLなどを使ってモデリングを行う最低限の知識を持っている。
合格条件 30問選択式で24問以上正解
試験時間 80分
出題範囲(関連するUML知識) UML2.0ベース:ユースケース図、クラス図、シーケンス図、コミュニケーション図、ステートマシン図、アクティビティ図、コンポーネント図、複数の図

L1は、単純にUMLの知識を問うだけの試験みたいです。UMLは本で読んで勉強したことがあるし、多少我流が入っているけど業務でも使った事があるので、忘れているような細かい知識を勉強し直せば、合格は難しくなさそうな感じだ。

とりあえず、この本で勉強する。

UMLモデリング教科書 UMLモデリングL1 第2版

UMLモデリング教科書 UMLモデリングL1 第2版