|
||
![]() |
|
![]() |
|
Table of Contents
Eclipse Buddy Class LoadingPrincipesChaque plugin a son propre Class Loader. Celui-ci peut accéder aux classes du plugin et à celles des packages exportés explicitement dans les plugins dont il dépend. ProblèmeSi un plugin doit charger une classe quelconque, d’un plugin dont il ne dépend pas, ça ne fonctionne pas. Ce cas survient pourtant de temps en temps. Exemple : un plugin encapsulant Log4j veut accéder à une classe d’un plugin P1 qui utilise Log4j, mais la dépendance est déclarée de P1 vers Log4j et pas dans l’autre sens. Déclarer la dépendance dans l’autre sens n’aurait pas de sens justement, car il n’est pas raisonnable d’ajouter au plugin Log4j tous les plugins susceptibles de l’utiliser... Celui-ci doit rester indépendant et ne doit pas être modifié sous prétexte qu’un nouveau plugin l’utilise. La solutionLa solution s’appelle “Buddy class loading”. Il suffit de déclarer ce mécanisme dans les fichiers MANIFEST.MF :
Eclipse-BuddyPolicy: registered
Eclipse-RegisterBuddy: <nom du plugin partagé> C’est une manière implicite de déclarer la relation dans l’autre sens. PrinciplesEach plugin has its own Class Loader. This one can reach all the plugin classes and those from the packages explicitly exported in the plugins on which it depends. ProblemIf a plugin must load som class from a plugin on which it does not depend, you will get an exception. However it could be useful in some cases. Example: a plugin encapsulating Log4j wants to access a class from a P1 plugin which uses Log4j, but dependence is declared from P1 towards Log4j and not in the other way. Declaring the dependence in the other way would not have sense, because adding to Log4j a dependance towards every plugin would not be satisfying... Indeed, this one must remain independent and does not have to be modified just because a new plugin needs to use it. SolutionThe solution is called “Buddy class loading”. You have to declare it in Manifest.MF files :
Eclipse-BuddyPolicy: registered
Eclipse-RegisterBuddy: <name of shared plugin> Thus you implicitly declare a sort of “dependency” in the other way round. |
||