En général, le problème est le modèle de sécurité de Java qui tente d'éviter qu'une classe qui a déjà été chargé d'être à nouveau chargé.
De cours Java depuis le début, a pris en charge dynamique de chargement de classe, ce que c'est difficile, c'est la classe re-chargement.
Il a été d'étudier les nuisibles ( et pour une bonne raison ) que l'exécution d'une application java ai injecté avec une nouvelle classe avec un code malveillant. Par exemple, java.lang.String fendu la mise en œuvre à venir de l'internet , au lieu de créer de la chaîne, supprime certains de fichier aléatoire lors de l'invocation de la méthode length().
Donc, la manière de Java a été conçu ( et je présume .NET CLR en conséquence, parce que c'était très "inspiré" dans la JVM ) était à éviter, déjà chargé de la classe à charger de nouveau la même VM.
Ils ont offert un mécanisme de remplacer cette "fonctionnalité". Les chargeurs de classe, mais encore une fois les règles de la classe chargeurs, ils doivent demander la permission à la "mère" du chargeur de classe avant d'essayer de charger une nouvelle classe, si le parent a déjà chargé la classe, la nouvelle de la classe est ignoré.
Par exemple, j'ai utilisé les chargeurs de classe que de la charge des classes de LDAP ou SGBDR
Le déploiement à chaud devient une nécessité dans le monde Java lorsque le serveur d'applications est devenu "mainstream" pour Java EE ( et aussi créer le besoin pour les micro-conteneurs comme le printemps pour éviter ce genre de problème ) .
Le redémarrage de l'ensemble de l'application serveur après chaque compilation des lecteurs de quelqu'un de fou.
Donc, serveur d'application, fournisseur de cette "coutume" classe chargeurs à l'aide de déploiement à chaud, et à l'aide d'un fichier de configuration, que le comportement, DOIT être désactivé lors de l'ensemble de la production. Mais le compromis est que vous devez en utiliser des tonnes de mémoire dans le développement. Donc, la bonne façon de le faire est de redémarrer tous les 3 - 4 déploiements.
Ce n'est pas le cas avec les autres langues qui ont été conçus dès le départ pour charger leurs classes.
En Ruby par exemple, vous pouvez même ajouter des méthodes à une classe en cours d'exécution, remplacement d'une méthode à l'exécution, ou même d'ajouter une méthode unique à un unique objet spécifique.
L'inconvénient dans ce type d'environnement est bien sûr de la mémoire et de la vitesse.
J'espère que cette aide.
MODIFIER
J'ai découvert ce produit il y a quelques temps que les promesses que recharger, c'est de faire aussi simple que possible. Je ne me souviens pas le lien quand j'ai écrit cette réponse, et je le fais.
Il est JavaRebel de ZeroTurnaround