[Java] Dynamic Cargando

Programa muy a menudo sienten la necesidad de incluir datos adicionales de código en un sistema durante su uso (pensemos, por ejemplo, la posibilidad de incluir conectar cualquier aplicación, deben utilizarse inmediatamente después de su instalación ") vemos cómo y con qué límites, esto se puede lograr con el idioma del Sol
Compilación en tiempo de ejecución:
En primer lugar, es útil saber que desde cualquier aplicación Java puede invocar el compilador (javac) con los parámetros habituales (ruta de clase y todo lo demás) con un simple
new String [ ] { Principal. Compilar (new String [] ( , "-d", "bin /", filename + ".java" } ) ; "src / generatedCode /" + filename +. "java")); |
NB: Para los distintos parámetros (me he dejado muchos, incluidas las opciones de compilación) salgo de la documentación de la API.
Cargando:
Porque usted tiene el archivo. De la clase para cargar nuestra aplicación tenemos 2 caminos, partiendo de la suposición de que conocemos el nombre de la clase:
- Si no tenemos información específica acerca de deducir la clase a través de los mecanismos de reflexión y de los métodos de instancias;
- Si hemos estructurado el "plugin" para implementar una interfaz conocida para una instancia de un objeto (como veremos en breve) y llamar a los métodos de la interfaz.
2 voy a examinar el caso porque de lo contrario divagar demasiado en un tema que es bastante complicada e interesante reflexión.
Considere el caso siguiente:
Clase A (el que queremos cargar) implementa la interfaz B.
new ClassLoader ( ) ; Cargador de clases cargador de nuevo cargador de clases = (); gt ; cls = loader. loadClass ( "A" ) ; Class & lt;? & Gt; Cls = cargador. LoadClass ( "A"); B ) cls. newInstance ( ) ; Istanza_di_A B = (B) CLS. NewInstance (); ... ) ; istanza_di_A. metodoDiA (...); |
Como se puede ver el proceso es muy sencillo de aplicar, veamos ahora lo que es la principal limitación.
UnloadingReloading:
Desafortunadamente, la JVM no permite la descarga de las clases cargadas en bytecode.
Considere la idea de modificar el código de la clase una vez después de crear instancias de un objeto de ese tipo en nuestro programa. Nos gustaría, como parece natural que, una vez cargado el bytecode de la clase cambiado y recompilado, los nuevos objetos de tipo "A" se crean de acuerdo a la última versión disponible.
Desafortunadamente, esto no ocurre, vemos por qué.
El cargador de clases, que anteriormente se utilizó para "cargar" en memoria de nuestro código de bytes de clase en tiempo de ejecución, como hemos dicho no puede ser (manual o automáticamente) para manejar la descarga de las clases instancia por la aplicación. En el momento de la creación de un objeto no es más que seguir el siguiente algoritmo (que llevan una muy simplificada):
- Verifica en una estructura de datos (una tabla hash) si hay una entrada para la clase que se le pidió que la carga de ir con el nombre de clase ( "class_name" -> "bytecode");
- Si usted no puede encontrar entradas coincidentes en el nombre y crea uno, después de leer el archivo. Clase, excepto el bytecode en esa estructura a continuación, devuelve una instancia del programa.
- Alternativamente, si usted encuentra una entrada para el nombre de la clase, no se refiere en modo alguno de determinar si el código de bytes que se actualiza o no, crea instancias de un objeto de código de bytes guardados y regresó al programa.
Como se puede imaginar entonces los cambios tendrán efecto sólo cuando reinicie el programa.
La única solución existente es la aplicación de un cargador de clases personalizadas que se ocupan de caso, con las clases caricareistanziare que desea utilizar como un complemento y que, una vez que se produzca un cambio, podemos "tirar" (mediante la colocación de todas sus referencias a null) reinstanziarene para una nueva aplicación que se encarga de gestionar el nuevo código en su estructura de datos privados.
Solución real complicados? Bueno, si lo hace bien para actualizar el NMIENDAS Tomcat JSP diría que es preciso ajustar ![]()
Popularidad: 19% [?]
Palabras clave: bytecode, cargador de clases, de compilación, dinámica de carga, HotSwap, Java, JSP, JVM, de carga, recarga, tiempo de ejecución, Tomcat, descarga de
leave a response , or trackback from your own site. Puedes seguir cualquier respuesta a esta entrada a través de la alimentación de la RSS 2.0. Puedes dejar una respuesta, o trackback desde tu propio sitio.



![Add '[Java] Dynamic Cargando' a Del.icio.us Aggiungi '[Java] Dynamic Loading' a Del.icio.us](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/delicious.png)
![Add '[Java] Dynamic Cargando' to digg Aggiungi '[Java] Dynamic Loading' a digg](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/digg.png)
![Add '[Java] Dynamic Cargando' to FURL Aggiungi '[Java] Dynamic Loading' a FURL](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/furl.png)
![Add '[Java] Dynamic Cargando' to blinklist Aggiungi '[Java] Dynamic Loading' a blinklist](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/blinklist.png)
![Add '[Java] Dynamic Cargando' to reddit Aggiungi '[Java] Dynamic Loading' a reddit](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/reddit.png)
![Add '[Java] Dynamic Cargando' to Feed Me Links Aggiungi '[Java] Dynamic Loading' a Feed Me Links](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/feedmelinks.png)
![Add '[Java] Dynamic Cargando' to Technorati Aggiungi '[Java] Dynamic Loading' a Technorati](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/technorati.png)
![Add '[Java] Web dinámico Cargando' a Yahoo My Aggiungi '[Java] Dynamic Loading' a Yahoo My Web](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/yahoo_myweb.png)
![Add '[Java] Dynamic Cargando' to Socializer Aggiungi '[Java] Dynamic Loading' a Socializer](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/socializer.png)
![Add '[Java] Dynamic Cargando' to Ma.gnolia Aggiungi '[Java] Dynamic Loading' a Ma.gnolia](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/magnolia.png)
![Add '[Java] Dynamic Cargando' to Google Bookmarks Aggiungi '[Java] Dynamic Loading' a Google Bookmarks](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/google.png)
![Add '[Java] Dynamic Cargando' to Bloglines Aggiungi '[Java] Dynamic Loading' a Bloglines](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/bloglines.png)
![Add '[Java] Dynamic Cargando' to Squidoo Aggiungi '[Java] Dynamic Loading' a OKnotizie](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/oknotizie.gif)
![Add '[Java] Dynamic Cargando a Bookmark.it Aggiungi '[Java] Dynamic Loading' a Bookmark.it](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/bookmark.png)
![Add '[Java] Dynamic Loading para preguntar Aggiungi '[Java] Dynamic Loading' a Ask](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/ask.png)
![Add '[Java] Dynamic Cargando a Delirious Aggiungi '[Java] Dynamic Loading' a Delirious](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/delirious.png)
![Add '[Java] Dynamic Cargando' a Live-MSN Aggiungi '[Java] Dynamic Loading' a Live-MSN](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/live.png)
![Add '[Java] Dynamic Cargando a SlashDot Aggiungi '[Java] Dynamic Loading' a SlashDot](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/slashdot.png)
![Add '[Java] Dynamic Cargando a Diggita Aggiungi '[Java] Dynamic Loading' a Diggita](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/diggita.png)
![Add '[Java] Dynamic Cargando' a FaceBook Aggiungi '[Java] Dynamic Loading' a FaceBook](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/facebook.png)
![Add '[Java] Dynamic Cargando a Wikio Aggiungi '[Java] Dynamic Loading' a Wikio](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/wikio.png)
![Add '[Java] Dynamic Cargando' a MySpace Aggiungi '[Java] Dynamic Loading' a MySpace](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/myspace.png)
![Add '[Java] Dynamic Cargando a Twitter Aggiungi '[Java] Dynamic Loading' a Twitter](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/twitter.png)
![Add '[Java] Dynamic Cargando' to Tailrank Aggiungi '[Java] Dynamic Loading' a Technotizie](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/technotizie.png)
Deje una contestación