web-dev-qa-db-ja.com

JRebelの代替を再デプロイする

JRebelでは、アプリケーションを再起動せずに、新しくコンパイルされたコードを再デプロイできます。代替手段があるかどうか疑問に思っています(無料?)。 FAQ ページはこの質問に答えますが、JRebelに偏っていると確信しています。この質問は1年前にこのサイトで尋ねられたものですが、私はそれを元に戻して、誰かが新しい情報を持っているかどうかを確認しています。

余談ですが、私はJRebelが本当に好きですが、無料の代替案があれば、それを試してみます。

もう1つの注意点として、私はオープンソースプロジェクトに取り組んでおり、オープンソースプロジェクトに参加していることを証明できる人に1年間の無料ライセンスを提供しています。私にとってはうまくいきますが(www.kuali.org)、私はそのプロジェクトに永遠に参加することはありません。

182
Jay

DCEVM を見てください。HotSpotVMの修正であり、実行時に無制限のクラス再定義を許可します。フィールドとメソッドを追加/削除し、実行時にクラスのスーパータイプを変更できます。 DCEVMの機能は、 JEP 159 の一部としてJavaの将来のアップデートに統合される可能性があります。

元のサイトで利用可能なバイナリは、Java 6u25および初期バージョンのJava 7に制限されています。プロジェクトは Github で分岐され、Java 7および8。メンテナーは、Windows/Linux上の32/64ビットVMのバイナリを提供します。 Java 11以降、プロジェクトは新しい GitHub リポジトリに移動し、OS Xのバイナリも提供するようになりました。

DCEVMはDebianとUbuntu向けにパッケージ化されており、OpenJDKと便利に統合されており、Java -dcevmで呼び出すことができます。パッケージの名前は、デフォルトのJDKのバージョンによって異なります。

93
Emmanuel Bourg

Hotswap Agent は、多くのJavaフレームワーク(Spring Bean定義のリロード、Hibernateエンティティマッピング、ロガーレベルのセットアップなど)をサポートするDCEVMの拡張機能です。

Java 1.7のDCEVMとコンパイル済みバイナリのセットアップ方法に関するドキュメントも多数あります。

40
edudant

Grailsのリロードに使用されているが、Javaでも機能するSpringの連中によって:

https://github.com/SpringSource/spring-loaded

20
Ramon

DCEVMは拡張クラス再定義をサポートし、現在のJDK7およびJDK8で利用可能です。

https://github.com/dcevm/dcevm/releases

HotswapAgentは無料のJRebelの代替であり、さまざまなフレームワークでDCEVMをサポートします。

http://hotswapagent.org/

19
tak3shi

DCEVM に関する記事を書きました: Spring-mvc + Velocity + DCEVM

私の環境は問題なく動作しているので、価値があると思います。

11
Rafael Sanches

私は、ホットスワップが許可する以上のクラスをホットリプレースできるオープンソースプロジェクトに取り組んできました。 https://github.com/fakereplace/fakereplace

動作する場合と動作しない場合がありますが、フィードバックを歓迎します

9
Stuart Douglas

あなたはこれを見てみたいかもしれません:

HotSwapサポート:Java HotSpot VMのオブジェクト指向アーキテクチャにより、オンザフライクラス再定義、または「HotSwap」などの高度な機能が有効になります。この機能は、デバッガAPIを介して、実行中のアプリケーションで変更されたコードを置換する機能を提供します。 HotSwapはJava Platform Debugger Architectureに機能を追加し、デバッガーの制御下で実行中にクラスを更新できるようにします。また、プロファイリングコードが挿入されたメソッドのバージョンでホットスワップすることにより、プロファイリング操作を実行できます。

現時点では、これにより、アプリケーションを再起動せずに、新しくコンパイルされたメソッド本体のみを再デプロイできます。あなたがしなければならないのは、デバッガでそれを実行することです。 Eclipseで試したところ、見事に機能します。

また、エマニュエル・ブールが彼の答え( JEP 159 )で言及したように、スーパータイプの追加と、メソッドとフィールドの追加と削除をサポートすることが期待されています。

リファレンス: Javaホワイトペーパー135217:信頼性、可用性、保守性

4
Alex