- PR -

Tomcatでのダイナミックプロキシの使用について

投稿者投稿内容
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2005-03-14 16:47
引用:

かつのりさんの書き込み (2005-03-14 16:41) より:
投稿と閲覧のタイミングがずれてしまいました。

Proxyをセッションに格納したい経緯です。
DBから値を取得する処理を動的に行っているのですが、
Beanではなくインターフェイスに値を格納したい為です。

別にBeanでもいいのですが、カスタマイズとテストの容易性から
インターフェイスを選びました。

#遅いから止めろとか、そういう突っ込みは無しで・・・

[ メッセージ編集済み 編集者: かつのり 編集日時 2005-03-14 16:42 ]



そういう用途でしたら、DIコンテナ(Spring Frameworkとか)を
使用するとすっきり行きそうだと思うのですが、いかがでしょう?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-03-14 16:54
実はちょっとDIコンテナを意識して作っています。
業務ではなく趣味と好奇心と勉強を兼ねてやっているもので、
本来の業務ならちゃんとしたDIコンテナを使うべきですね。
(仕事中にこういう質問もどうかと・・・)

勉強になりました。ありがとうございます。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-03-14 17:35
Proxyを使用せず、Javassistの使用を検討してみようかなと思います。

匿名クラスの実装みたいな事を動的にできればいいので、
Javassistならインターフェイスの実装クラスの生成ができそうですね。
多分ObjectInputStreamもProxyとして解決するのではなく
通常のインターフェイスの実装クラスとして解決してくれるような気がします。

取りあえず、試してみてから報告します。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-03-15 02:06
Javassistを使ってみました。
これなら最初の問題は発生しないのですが、別の問題が発生しました。
Javassistで動的にクラスを生成しているのですが、
WebappClassLoaderでクラスを読み込んでいるとリロード時に
JavassistのClassPoolも初期化されてしまい、
リロード時の復元処理でのクラスの解決が行えなくなります。

解決するとなると、別コンテキストにしてHttp経由で動的クラスを生成するとか
色々方法はあると思いますが、ここまで来るとSpringとかSeaserを使った方が
いいような気がしてきました。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-03-15 08:57
なんか日記みたいになって申し訳ないのですが、
動的に生成したクラスを永続化することによりうまくいきました。
Javassistは強力ですね。応用方法を模索してみたいと思います。
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2005-03-15 11:21
個人的な興味ですが、

Java上で実行時まで処理ロジックの決定を遅らせるような仕組みとしては、
各種スクリプト言語との組み合わせで実現するのが、今のところ主流のよう
ですけれど、

それに比べて、Javaクラスを実行時に作成する事で得られるアドバンテージ
って、なんでしょうね?
Jython,JRuby,はたまたGroovyあたりをJakarta-BSF上で使用する、でもよい
と思うのですが。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-03-15 12:00
ん〜アドバンテージですか・・・

DIコンテナの方がテストが行いやすかったり、
ツールによる生成が行いやすいという気がします。
また、通常クラスと同じ扱いなのでメソッド補完ができるのが大きいです。

スクリプトの場合、規模の小さい業務ロジックだと
さくさくと作成できるメリットを感じます。

正直どっちもどっちという気がします。好みの問題かなと。
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2005-03-15 12:32
了解です。今のところは、ということですね。
私も頭で考えている範囲では、好みの問題レベルのような気がします。

勉強のために実装までやっていらっしゃっているようですので、事前の
思考実験では見つからなかった面白いネタが、今後の作業を通じて何か
見つかるかも、ということですよね。
何か見えたら、フィードバック宜しくです^^;

スキルアップ/キャリアアップ(JOB@IT)