[Seasar-user:11616] Re: AOPを適用したクラスをなんとかシリアライズしたい

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 11月 12日 (月) 16:00:40 JST


小林 (koichik) です.

Date:    Mon, 12 Nov 2007 12:03:46 +0900
From:    Junichi Kato <[E-MAIL ADDRESS DELETED]>
To:       [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:11613] AOPを適用したクラスをなんとかシリアライズしたい

> S2.4.17にて、SerializeUtilを使ってS2に登録してあるコンポーネントをシリアライズしようと思っているのですが、、
> (アプリはウェブアプリではありません)
> 
> コンポーネントにAOPがかかっていると、サブクラス化されるので 当然
> Caused by: java.lang.ClassNotFoundException: org.seasar.chronos.core.task.TestTask$$EnhancedByS2AOP$$bafdff
> となりますが、
> これをなんとかうまい方法でシリアライズできないものかなぁと、いろいろ考えておりますが、解がでてきておりません。

S2AOP はシリアライズには対応していません.

> たとえば、シリアライズ前にAOPをはずして、デシリアライズ後にAOPを適用しなおすことは難しいでしょうか?

あまり変なことを考えない方がよいかと.
基本的に,AOP は振る舞いを変えるもので,
シリアライズは状態を保存するものなので,
振る舞いと状態を別のクラスにすればいいのでは?
振る舞いを外に出すなら Strategy パターン,
状態を外に出すなら State パターンなんかが
参考になると思います.

あるいは,AOP またはシリアライズあるいは
その両方を使わない方法を考えてみるのも
いいのではないでしょうか.
例えば Teeda では,Page クラスそのものではなく,
プロパティを保存するようにしています.
そのため,Page は Serializable である必要はなく,
AOP も (利用者が必要なら) 適用できます.


--
<signature>
   <name>Koichi Kobayashi</name>
   <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>




Seasar-user メーリングリストの案内