[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 メーリングリストの案内