¿Hotswap y alternativas?

15

Desde los primeros días de mi vida universitaria, he estado usando Java y el mayor problema que tenemos es ser absolutamente menos productivo que otros lenguajes interpretados. Todas las personas están seguras de que Java es uno de los mejores lenguajes compilados.

Sin embargo, ni Sun ni Oracle se han esforzado lo suficiente para resolver este problema. Uno de los problemas es, por supuesto, la recarga de clases.

Los últimos intentos de la comunidad para resolver este problema son el proyecto DaVinci Hotswap , JRebel , PlayFramework . Sin embargo, al momento de escribir esto todavía no eran maduros (imo) y nativos. Algunos de ellos no están preparados para la empresa, algunos no son compatibles con todos los IDE, algunos de ellos son proyectos universitarios inmaduros. El mapa de ruta e incluso el Java listo para el desarrollador están listos, pero la comunidad Java todavía no tiene una solución para la recarga de la clase sobre la marcha.

¿Es tan difícil para Oracle hacer un esfuerzo para resolver este problema? ¿Por qué la recarga de clases aún no se ha implementado de forma nativa?

Ozgur
fuente
2
En realidad, JRebel está completamente listo para la empresa y tiene un soporte IDE bastante bueno, aunque no es gratuito.
CarlosZ
@CarlosZ ¿En serio? He usado IntelliJ IDEA con JRebel desde la primera versión beta hasta la serie 3.x. En lugar de "esto", debe usar "eso". En el foro de cada versión, verá muchos problemas relacionados con el complemento intelliJ. Pero la peor experiencia fue la depuración de problemas. El depurador podría conectarse muy tarde. Y tuvimos tremendos problemas. Como usuario de intellJ tengo experiencia concreta con respecto a JRebel en IDEA. Y, por supuesto, pagar dinero es otro problema también.
@CarlosZ Realmente es una pregunta, tengo curiosidad por saber por qué es difícil implementar la recarga de clases en Java de forma nativa.

Respuestas:

4

¿Qué pasa con JEE / J2EE? Esto se lanzó por primera vez hace 12 años. Esto es compatible directamente con Sun / Oracle y muchos otros proveedores.

¿Qué pasa con OSGi? Su primer lanzamiento fue hace casi 11 años. Eclipse (un IDE) está construido sobre él, Glassfish de Sun / Oracle y Apache Felix lo usan ampliamente. Puede usarlo con Spring-OSGi.

No se ha admitido de forma nativa en Java SE porque las aplicaciones empresariales fueron admitidas deliberadamente por los servidores de aplicaciones como productos separados.

Peter Lawrey
fuente
@ Peter Lawrey 1) Lawrey Con respecto a J2EE, ¿hay una solución concreta? No pude ver tu punto? 2) Para poder recargar la clase, ¿crees que debería usarse OSGI? ¿Qué hay de Jigsaw? Incluso a nivel de JCR, todavía no hay consenso :). OSGI está abordando un área muy diferente a la recarga de clases. 3) No podía entender la parte de JavaSE, ¿podría explicarme un poco más? Y tenga en cuenta que el proyecto DaVinci HotSwap está patrocinado por Oracle. Significa, al menos para mí, que también están ansiosos por esa solución.
Depende de lo que espere que haga el intercambio en caliente. Si desea un intercambio en caliente para la depuración, ha podido hacer esto durante algún tiempo. Sin embargo, para soluciones empresariales robustas, el intercambio en caliente de esta naturaleza no es apropiado y solo lo son las versiones controladas. En este caso, JEE y OSGi le permiten actualizar las aplicaciones en ejecución que tienen el mismo beneficio pero con el control que esperaría de un entorno de producción. Por ejemplo, en mi contenedor OSGi puedo eliminar clases y reemplazarlas con versiones más nuevas sin detener la aplicación. ¿Qué necesitas que OSGi no hace?
Peter Lawrey
1) La implementación de referencia JEE / J2EE puede ser un lugar para comenzar, pero hay muchos más populares, más fáciles de usar JEE. Mi punto es que puede reemplazar el código en un sistema en ejecución. ¿Qué más necesita en un entorno de producción / controlado?
Peter Lawrey
1
2) Recargar clases es lo único para lo que uso OSGi. ¿Cuál es el uso principal de OSGi?
Peter Lawrey
3) El objetivo de JEE es que este es el espacio para el soporte de aplicaciones empresariales. JSE es la plataforma subyacente que se puede utilizar para JEE u otras aplicaciones.
Peter Lawrey
2

Pruebe esto: http://www.zeroturnaround.com/blog/reloading_java_classes_401_hotswap_jrebel/

Hay múltiples problemas complejos involucrados. En realidad, no conozco ninguna solución (para Java o no) que realice cambios estructurales en las entidades con estado. Los lenguajes dinámicos como Ruby o PHP realmente no hacen eso, no estoy seguro acerca de Erlang, pero creo que también perderá estado.

Jevgeni Kabanov
fuente