タグ

関連タグで絞り込む (2)

タグの絞り込みを解除

HotDeployに関するmamatumoのブックマーク (3)

  • Seaserのホットデプロイとリフレクション

    Seaserのホットデプロイは 実行時に特定箇所でクラスローダを毎回新しくするというシンプルなものです。 結構、割り切った作りになっているなぁというのが感想ですが、そのシンプルさと原理からいろいろと制限事項も生まれてしまう。 今回、私がハマったところはフレームワーク内でリフレクションをする際に、クラスローダの違いからClassCastExceptionを出したり、NoSuchMethodExceptionを出したりしたことでした。 クラスローダの基礎知識 まず、基礎知識としてクラスローダが違う場合、同じClassでも代入互換性がありません。Classの同一性は、Class自身とそのクラスローダによって定められます。 次に、クラスローダは階層構造をなしていて、まず親クラスローダにロード処理が移譲されます。 ClassLoader ClassLoader クラスは、委譲モデルを使ってクラスとリ

  • hotdeployもどき その2

    hotdeployもどき その2を考えてみました。 hotdeployを実現するには、クラスローダーを用意して、hotdeployかけたいクラスを読み込めばいいことがわかりました。 そこでおきる問題は、hotdeployのクラスローダーで読みこんだクラスと、先に読み込んだクラスローダーで読み込まれるクラスはまったく別ものだということです。 つまり、同じクラスでもキャストができません。 ですので、hotdeployの対象となるクラスだけ読み込みなおすということと、実装と定義の分離が重要となります。 hotdeployする対象のクラスとそのインターフェイスを分離することで、実行時にリフレクションを使わないで実行できます。 その際の注意点は、インターフェイスはオリジナルのクラスローダーで読み込ませないようにすることです。 お手軽な実験ソースです。 package hotdeploy; impor

  • JRebelを使った動的クラスリローディング

    「あばばばばばばばば」 はい、この記事は、「じゃば あばばばば かれんだー - 邪 2010」の9日目、12/21日のものですのよ? 昨日は、id:nekopのBytemanによるJava黒魔術 - nekopの日記でした。このBytemanが利用している「Java(TM) java.lang.instrument」を利用したもうひとつの例として、JRebelというプロダクトを利用した動的なクラス再ローディングについて、ちょいと紹介しようと思いますのよ奥さん? そもそもjava.lang.instrument APIってなんぞ? Instrument APIは、監視/観察の対象となるアプリケーションのバイトコードをほかのバイトコードに置き換える(BCIを行う)ための枠組みを提供する。置き換えの方法としては、以下の2とおりが提供されている。 ●クラスがロードされる過程に割り込み、そのバイトコ

    JRebelを使った動的クラスリローディング
  • 1