署名付きの Java アプレットを実行している場合。同じドメインまたは同じホストのリモート ソースから追加のクラスをロードして実行できますか?
ページを変更したり、現在のアプレットを停止したりすることなく、これを実行したいと考えています。もちろん、すべてのクラスの合計サイズは大きすぎて一度にロードできません。
これを行う方法はありますか?そして、署名されたアプレットでこれを行い、その「信頼」ステータスを維持する方法はありますか?
クラスはアプレットで遅延ロードされると思います。オンデマンドでロードされます。
とにかく、クラスが jar の外にある場合は、アプレットのクラスローダーを使用して名前でロードするだけです。元:
ClassLoader loader = this.getClass().getClassLoader();
Class clazz = loader.loadClass("acme.AppletAddon");
jar からクラスをロードする場合は、jar の URL を使用して URLClassLoader の新しいインスタンスを作成する必要があると思います。
URL[] urls = new URL[]{new URL("http://localhost:8080/addon.jar")};
URLClassLoader loader = URLClassLoader.newInstance(urls,this.getClass().getClassLoader());
Class clazz = loader.loadClass("acme.AppletAddon");
デフォルトでは、アプレットが新しいクラスローダーを作成することは禁止されています。しかし、アプレットに署名し、新しいクラスローダーを作成する許可を含めれば、それを行うことができます。
はい、アプレットを実行したホストへの URL 接続を開くことができます。HTTP URL を使用してクラスローダーを作成するか、クラスを (jar として) ユーザーのマシンにダウンロードして、クラスパスにそれらの jar を使用してクラスローダーを作成することができます。アプレットは停止しないので、別のページをロードする必要はありません。
信頼性に関する質問の 2 番目の部分については、ユーザーがアプレットへのアクセスを許可すると、ローカル マシンに何でもダウンロードできます。UI 設計で許可されている場合は、ユーザーに何をしているのかを知らせることができます。
お役に立てれば。
それは可能であるように思えます(しかし、私はそれをやったことがありません)。Remote Method Invocation ( RMI ) はもうご覧になりましたか?