Comment partager des objects entre différents chargeurs de classes?

J’ai besoin de différents chargeurs de classes pour pouvoir décharger des classes. Mais j’ai besoin de partager des objects entre eux (en fait, je suis en train d’obtenir ClassCastException). Alors, quelles sont les solutions pour y faire face? Merci

Les objects de différents chargeurs de classe peuvent interagir les uns avec les autres via des interfaces et des classes chargées par un chargeur de classes commun.

L’un des principaux objectives de l’utilisation de chargeurs de classes distincts est d’empêcher exactement le genre de chose que vous essayez de faire. Les conflits de sécurité et de nom sont de bonnes raisons pour maintenir cet isolement. Voici quelques façons de contourner cet isolement.

  1. Utilisation du chargeur de classes commun

  2. Partage de bibliothèques sur un cluster

  3. Mise en package du fichier JAR client pour une application dans une autre application

Reportez-vous à ce lien pour plus de détails.

Mentionnez également que si vous utilisez des interfaces, vous pouvez utiliser java.lang.reflect.Proxy pour créer une instance d’une interface locale de votre chargeur de classes qui, sous le capot, effectue des appels avec reflection sur l’object “réel” à partir d’un autre classloader. C’est moche, et si les parameters ou les types de retour ne sont pas primitifs, vous ne ferez que passer la ClassCastException plus loin dans la ligne. Bien que vous puissiez truquer quelque chose pour que cela fonctionne, en général, il est préférable d’avoir un chargeur de classe parent avec certains types partagés que vous voulez pouvoir utiliser entre chargeurs de classe, ou d’utiliser un format plus sérialisé pour la communication ( plus lente), ou ne partagent que des interfaces qui traitent des primitives.