Pregunta

Si estoy ejecutando un subprograma de Java firmado, ¿puedo cargar clases adicionales desde fuentes remotas (en el mismo dominio, tal vez incluso el mismo host) y ejecutarlas?

Me gustaría hacer esto sin cambiar las páginas o incluso detener el subprograma actual.Por supuesto, el tamaño total de todas las clases es demasiado grande para cargarlas todas a la vez.

¿Hay alguna forma de hacer esto?¿Y hay alguna manera de hacer esto con subprogramas firmados y preservar su estado de "confianza"?

¿Fue útil?

Solución

Creo que las clases se cargan de forma diferida en subprogramas.siendo cargado bajo demanda.

De todos modos, si las clases están fuera de un jar, simplemente puede usar el cargador de clases del subprograma y cargarlas por nombre.Ex:

ClassLoader loader = this.getClass().getClassLoader();
Class clazz = loader.loadClass("acme.AppletAddon");

Si desea cargar clases desde un jar, creo que necesitará crear una nueva instancia de URLClassLoader con las URL de los jar.

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");

De forma predeterminada, los subprogramas tienen prohibido crear nuevos cargadores de clases.Pero si firma su subprograma e incluye permiso para crear nuevos cargadores de clases, puede hacerlo.

Otros consejos

Sí, puede abrir conexiones URL al host desde el que ejecutó su subprograma.Puede crear un cargador de clases con URL HTTP o descargar las clases (como archivos jar) a la máquina del usuario y crear un cargador de clases con esos archivos jar en el classpath.El subprograma no se detendrá y no es necesario cargar otra página.

Con respecto a la segunda parte de su pregunta sobre la confianza, una vez que el usuario ha otorgado acceso a su subprograma, puede descargar cualquier cosa, sí, cualquier cosa, que quiera en la máquina local.Probablemente pueda informar al usuario lo que está haciendo, si el diseño de su interfaz de usuario lo permite.

Espero que esto ayude.

Parece que debería ser posible (pero nunca lo he hecho).¿Ya has echado un vistazo a Invocación de método remoto (RMI)?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top