Hotswap et alternatives?

15

Depuis les premiers jours de ma vie universitaire, j'utilise Java et le plus gros problème que nous ayons est absolument moins productif que les autres langages interprétés. Tout le monde est sûr que java est l'une des meilleures langues compilées.

Cependant, ni Sun ni Oracle n'ont déployé suffisamment d'efforts pour résoudre ce problème. Un des problèmes est, bien sûr, le rechargement des classes.

Les dernières tentatives de la communauté pour résoudre ce problème sont le projet DaVinci Hotswap , JRebel , PlayFramework . Cependant, au moment d'écrire ces lignes, ils n'étaient pas encore matures (imo) et natifs. Certains d'entre eux ne sont pas prêts pour l'entreprise, certains ne sont pas compatibles avec tous les IDE, certains sont des projets universitaires immatures. La feuille de route et même Java prêt pour les développeurs est prête, mais la communauté Java n'a toujours pas de solution pour le rechargement à la volée des classes.

Est-il si difficile pour Oracle de déployer des efforts pour résoudre ce problème? Pourquoi le rechargement de classe n'a-t-il pas encore été implémenté nativement?

Ozgur
la source
2
En fait, JRebel est complètement prêt pour l'entreprise et dispose d'un assez bon support IDE, bien qu'il ne soit pas gratuit.
CarlosZ
@CarlosZ Vraiment? J'ai utilisé IntelliJ IDEA avec JRebel de la première version bêta à la série 3.x. Au lieu de "ceci", vous devez utiliser "cela". Sur le forum pour chaque version, vous verrez de nombreux problèmes concernant le plugin intelliJ. Mais la pire expérience a été le débogage de problèmes. Le débogueur peut se connecter très tard. Et nous avons eu d'énormes problèmes. En tant qu'utilisateur intellJ, j'ai une expérience concrète concernant JRebel dans IDEA. Et bien sûr, payer de l'argent est aussi un autre problème.
@CarlosZ C'est vraiment une question, je suis curieux de savoir pourquoi il est difficile d'implémenter nativement le rechargement de classe en java.

Réponses:

4

Qu'en est-il de JEE / J2EE? Cela a été publié pour la première fois il y a 12 ans. Ceci est pris en charge directement par Sun / Oracle et de nombreux autres fournisseurs.

Et OSGi? Sa première sortie remonte à près de 11 ans. Eclipse (un IDE) est construit dessus, Glassfish de Sun / Oracle et Apache Felix l'utilisent largement. Vous pouvez l'utiliser avec Spring-OSGi.

Il n'a pas été pris en charge nativement dans Java SE car les applications d'entreprise ont été délibérément prises en charge par les serveurs d'applications en tant que produits distincts.

Peter Lawrey
la source
@Peter Lawrey 1) Lawrey Concernant J2EE, y a-t-il une solution concrète? Je ne pouvais pas voir votre point? 2) Pour classer le rechargement pensez-vous que l'OSGI devrait être utilisé? Et Jigsaw? Même au niveau des JCR, il n'y a pas encore de consensus :). OSGI aborde un domaine très différent du rechargement de classe. 3) Je ne comprenais pas la partie JavaSE, pourriez-vous expliquer un peu plus? Et veuillez noter que le projet DaVinci HotSwap est parrainé par Oracle. Cela signifie, du moins pour moi, qu'ils souhaitent également une telle solution.
Cela dépend de ce que vous attendez d'un échange à chaud. Si vous voulez un échange à chaud pour le débogage, vous pouvez le faire depuis un certain temps. Cependant, pour les solutions d'entreprise robustes, le remplacement à chaud de cette nature n'est pas approprié et seules les versions contrôlées le sont. Dans ce cas, JEE et OSGi vous permettent de mettre à jour des applications en cours d'exécution qui présentent à peu près les mêmes avantages mais avec le contrôle que vous attendez d'un environnement de production. Par exemple, dans mon conteneur OSGi, je peux supprimer des classes et les remplacer par des versions plus récentes sans arrêter l'application. De quoi avez-vous besoin qu'OSGi ne fait pas?
Peter Lawrey
1) L'implémentation de référence JEE / J2EE peut être un point de départ, mais il existe de nombreux JEE plus populaires et plus faciles à utiliser. Mon point étant que vous pouvez remplacer le code dans un système en cours d'exécution. De quoi avez-vous besoin de plus dans un environnement de production / contrôlé.
Peter Lawrey
1
2) Le rechargement des classes est la seule chose pour laquelle j'utilise OSGi. Quelle est selon vous la principale utilisation d'OSGi?
Peter Lawrey
3) L'intérêt de JEE est qu'il s'agit de l'espace de prise en charge des applications d'entreprise. JSE est la plate-forme sous-jacente qui peut être utilisée pour JEE ou d'autres applications.
Peter Lawrey
2

Essaye ça: http://www.zeroturnaround.com/blog/reloading_java_classes_401_hotswap_jrebel/

Il y a plusieurs problèmes complexes impliqués. Je ne suis en fait au courant d'aucune solution (pour Java ou non) qui apporte des modifications structurelles aux entités avec état. Les langages dynamiques comme Ruby ou PHP ne font pas vraiment cela, je ne suis pas sûr d'Erlang, mais je pense qu'il perdra également son état.

Jevgeni Kabanov
la source