サービスクラスの利用方法

はじめに

サービスクラスについての説明は、こちらを参照ください。

サービスクラス(HttpSession)

サービスクラス(HttpSession)はステートフルなアプリケーションを構築するためのクラスで、サーブレット上のHttpSession上に生成されます。生成されたコードのコンストラクタをnewした時点でHttpSession上に作成されます。また、メソッドをコールすることで、その生成されたオブジェクトのメソッドを実行します。

HttpSession上からクリアするには、生成されたクラスのdestroy-instanceメソッドを実行します。これを実行しないとタイムアウトになるまで、HttpSession上に残ってしまうので注意してください。またdestroy-instanceを実行する際にHttpSession自体をクリアすることができます。これには、destroy-instanceのkill-session? = trueを指定してください。(kill-session?はバージョン0.6からの機能です。)(以下のコードを参考)

def foo1 = {Foo} || これはサービスクラス(HttpSession)とします。
{foo1.say-hello}
{foo1.destroy-instance}

def foo2 = {Foo} || これはサービスクラス(HttpSession)とします。
{foo2.say-hello}
{foo2.destroy-instance kill-session? = true} || Sessionもクリアします。

また、サービスクラス(HttpSession)のコンストラクタやメソッドの引数に、サーバ上で既に生成されたサービスクラス(HttpSession)を指定することができます。(以下のコードを参考)

|| Fooはサービスクラス(HttpSession)とします。
def foo = {Foo}
|| Hogeはサービスクラス(HttpSession)とします。引数にサービスクラス(HttpSession)Fooを指定。
def Hoge = {Hoge foo}
{hoge.say-good-bye}

{hoge.destroy-instance}
{foo.destroy-instance}

注意)現段階では引数のサービスクラス(HttpSession)は、配列やクラスのフィールドとして扱うことはできません。

サービスクラス(DI)

サービスクラス(DI)は、DIコンテナ上(Spring frameworkやSeasar2など)で管理されているオブジェクトのメソッドをコールするために利用されます。そのため、スコープもDIのほうで管理されているため、クライアントでコンストラクタをnewしても、サーバ側に何もアクションは行いません。また、サービスクラス(HttpSession)のようにdestroy-instanceも用意されておりません。