私は単に頭を動かすことができないという問題を抱えています。
私は(管理者として)jarファイルをアップロードできるjsfアプリケーションを作成しており、その方法でアプリケーションを更新しています。
このチュートリアルを通じて: http://docs.oracle.com/javase/tutorial/deployment/jar/jarclassloader.html jar ファイルをクラスロードすることができました。最初の問題は、「オブジェクト」としてのみクラスをロードでき、他のクラス型にキャストできないことです。ClassCastException が発生します。
JarClassLoader jcl=new JarClassLoader(url);
Class cl= jcl.retreiveClass(jcl.getMainClassName());
Object ob=cl.newInstance(); //I would like to make this a RouteBuilder object instead of Object
具体的には、既存の「コア」(CamelContext) にルートを追加できる Apache Camel を使用しています。何が起こっているかというと、Web アプリで apache camel のコアが実行されているため、ルート ランタイムを追加できます。これは、jar としてパッケージ化し、アプリのランタイムにロードしたいルートです (ローカル環境でルートを開発してテストし、後でそれを本番アプリケーションにアップロードしたい)。具体的なルートは、RouteBuilder を拡張する単純な Java クラスです。jar、classLoad (URLClassLoader) をメイン クラス (おそらく jar 全体? - それは意味がありますか?) をアップロードし、それを RouteBuilder に変換します。これは不可能のようです。jar ファイルを戦争外のフォルダーにアップロードすることを選択しました。Webアプリを再起動したときにルートが消去されないようにします(これはスマートですか、それとも別の方法で行う必要がありますか?)。それは名前空間に関する問題ですか?さらに、jarファイル全体をトラバースして、内部の単一のクラスをクラスロードする必要があるかどうかを判断できませんでした。それについて何かコメントはありますか?
私には、Java アプリケーションの拡張/更新がどのように行われるかについて、いくつかの根本的な誤解があるようです。私の問題を解決する方法についての良い例/説明が見つからないため、概念レベルでこれを理解していないと結論付けています。
誰かが実行中の jsf アプリケーションを拡張する方法 (同じ問題がネイティブの Java アプリに関連していると思います) について詳しく説明してくれませんか?
ありがとう
ラッセ