ひがやすを技術ブログ

電通国際情報サービスのプログラマ

オンデマンドデプロイのすすめ

JavaでAnnotationがついたクラスがあったら、それに対して処理したい場合は、Seasar2のコンポーネント自動登録で使っているように、ファイルシステムまたは Jar ファイルを全走査してクラスロードする方法もあります。

ファイルシステムまたは Jar ファイルを全走査してクラスロードしてください。が結論です。
Seasar だったら、
org.seasar.framework.util.ClassTraversal
を読むべし。


でも、これは、Seasar2.3時代(3年前)の話で、技術としてはちょっと古い。
HOT deployなどと組み合わせると、リクエストのたびに全コンポーネントをデプロイする必要があるので、コンポーネントの数が増えると実用的には使えないのです。


そこで、考え出したのが、Seasar2のONDEMAND deploy。コンポーネントの定義を見に行って、あればそれを使う、なければ、その場でデプロイする方法。
ONDEMAND deployだと、リクエストで必要なコンポーネントしかデプロイされないので、コンポーネントの数がいくら増えても平気です。


ONDEMAND deployを理解するには、いまならSlim3 Containerを見るのが一番簡単です。

をみれば、きっと理解できるでしょう。4つのクラスを見るだけなので簡単。


PrototypeBeanFactoryでDisposableを実装していますが、Disposableは、HOT deployを実現するためのキークラスです。Disposable#disponse()は、HOT deployのときには、リクエストの最後、COOL deploy(HOT deployじゃないもの)のときには、アプリケーションが終了するタイミングで呼び出されます。
このdisposeメソッドで、キャッシュしているメタデータを開放するようにしてあげれば、HOT deployに対応できるだけでなく、COOL deployのときは、キャッシュが利くので、パフォーマンスが劣化しません。
HOT deployとCOOL deployをうまく両立させるためには、それなりのノウハウが必要です。Seasar2の2年間のノウハウの蓄積を学ばない手はないですよね。


時代は、ONDEMAND deployですよ。


普通にJavaで開発するときに出てくる技術的な課題は、Seasar2で、ほとんど解決できていると思うので、わかんないことがあれば、きいてください。いくらでも教えますよ。