WEBアプリケーション研究室 開発ノート TOP

WEBアプリケーション研究室 開発ノート [GAE]Servletとsigleton

スポンサーサイト

-------- --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

    このエントリーをはてなブックマークに追加

[GAE]Servletとsigleton

2010-06-27 22:23

GAEの話題というよりServletの話題です。Servletはリクエストの度に毎回起動されるのではなく、使いまわされませす。例えばjavax.servlet.Filterのinit()に


public void init(FilterConfig config) throws ServletException
{
System.out.println("init");
}
とやってもブラウザで読み込み直すたびに表示されたりしません。どういうタイミングでクラスが読み込みなおされるのか、詳しく調べきれてないのですが、クラスローダーとかが関係してるのでしょうか。
とにかく、毎回リクエストの度にすべてのクラス群が新しく起動されるのではないということです。
だとするとSingletonでクラスを設計するときにも注意が必要です。Singletonは多人数のリクエストで共有されるということです。

public class Singleton
{
private static Singleton instance = new Singleton();

private Singleton(){
System.out.println("create singleton");
}

public static Singleton getInstance()
{
return instance;
}
}
こんなクラスを作ってgetInstanceを呼び出してみましたが、さっきのinitの例と同様デプロイした直後しかprintlnは表示されません。

Singletonはまさにその名の通り、「インスタンスの存在数を限定する」というデザインパターンですが、「いつでも、どこでも、対象のインスタンスが手に入る」という利点もあったりして重宝してたのですが、Servletでの使用に注意が必要です。

というか、「複数のリクエストで共通のインスタンス」というのが使いどころをあまり思い浮かばないので、ServletでSingletonはむずかしい、というのが正直な感想です。
スポンサーサイト

    このエントリーをはてなブックマークに追加
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。