Précédent   Forum du club des développeurs et IT Pro > Java > Serveurs, conteneurs, et Java EE > Modularisation (OSGi, SCA...)
Modularisation (OSGi, SCA...) Forum d'entraide sur les architectures modulaires à base de composants et services (OSGi, SCA...). Avant de poster -> Les cours OSGi
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 06/09/2010, 14h54   #1
Rataah
Invité de passage
 
Inscription : septembre 2010
Messages : 6
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 6
Points : 0
Points : 0
Par défaut Création de plugins Java

Bonjour à tous,

Dans le cadre d'un projet, je dois créer une application qui accepte des plugins.

Pour cela j'ai suivis le tuto suivant : http://vincentlaine.developpez.com/t.../java/plugins/
Merci à l'auteur !

Pour la création de plugins "simple", cela marche parfaitement.

Mais ( il y a toujours un mais... ) dans le cas de plugins plus complexe : utilisation d'une librairie (ex: javasysmon).

Mon plugins check la charge CPU grâce a JavaSysMon.
Quand mon application charge ce plugin et essaye de l'éxécuter, résultat :

Exception in thread "main" java.lang.NoClassDefFoundError: com/jezhumble/javasysmon/JavaSysMon

L'erreur est tout a fait normal, bien que mon javasysmon.jar se trouve dans mon .JAR du plugin, l'application elle ne sait pas ou chercher.
Comme solution temporaire, j'ajoute "a la main" la librairie dans le classpath de l'application "mère" mais cette solution n'est pas viable.

Connaissez vous une solution ?
Merci
Rataah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2010, 15h00   #2
merill
Membre actif
 
Inscription : mai 2005
Messages : 153
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 153
Points : 176
Points : 176
Il y a la classe ClassLoader.
A voir aussi URLClassLoader.

A noter que je ne les ai jamais utilisés.
merill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2010, 15h15   #3
Deaf
Membre émérite
 
Inscription : mars 2006
Messages : 799
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mars 2006
Messages : 799
Points : 865
Points : 865
C'est à vérifier, mais je pense que lorsqu'un JAR est chargé via l'URLclassloader, le manifest est lu.
Donc si le manifest contient une référence vers les jars de tes dépendances, il doit les charger aussi.

En clair : essaie d'ajouter ton jar javasysmon dans le class-path du jar de ton plugin.
Deaf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2010, 15h20   #4
adiGuba
Expert Confirmé Sénior
 
Avatar de adiGuba
 
Homme
Développeur Java/Web
Inscription : avril 2002
Messages : 12 654
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Corse (Corse)

Informations professionnelles :
Activité : Développeur Java/Web
Secteur : Transports

Informations forums :
Inscription : avril 2002
Messages : 12 654
Points : 22 428
Points : 22 428
Salut,

Citation:
Envoyé par Deaf Voir le message
C'est à vérifier, mais je pense que lorsqu'un JAR est chargé via l'URLclassloader, le manifest est lu.
Donc si le manifest contient une référence vers les jars de tes dépendances, il doit les charger aussi.
Non : c'est fait uniquement pour le jar principal de l'application. Pas si tu charges un jar manuellement avec un URLClassLoader.


Lorsque tu crées l'URLClassLoader, tu dois préciser explicitement les nouvelles dépendances en lui fournissant les URLs vers ces librairies supplémentaires...


a++
__________________
adiGuba [ tutoriels | blog | twitter ] Rédacteur/Modérateur Java Présentation de Java SE 7 (commentaires)
adiGuba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2010, 15h26   #5
Deaf
Membre émérite
 
Inscription : mars 2006
Messages : 799
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mars 2006
Messages : 799
Points : 865
Points : 865
Dans ce cas, je pense qu'une bonne pratique pourrait être de recréer ce chargement manuellement en lisant le manifest.

Par ailleurs, si tu imposes à tes plugins d'avoir un (ou plus) fichier de description, l'information peut aussi se trouver ici plutôt que dans le manifest.
Cela pourrait se révéler pratique si tu as une notion de plugin plus fine que le jar (i.e: un jar peut contenir plusieurs plugins).
Deaf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2010, 15h37   #6
Rataah
Invité de passage
 
Inscription : septembre 2010
Messages : 6
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 6
Points : 0
Points : 0
Je suis en train de chercher du coté de l'URLClassLoader pour lui ajouter les dépendances comme vous le suggérer.

En effet pour le moment, dans un même JAR j'ai plusieurs plugins.
L'ajout d'un fichier de description du plugin est une bonne idée ! (notamment pour différencier les plugins a utiliser suivant l'OS)

Je vous tiens au courant
Rataah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2010, 16h13   #7
Deaf
Membre émérite
 
Inscription : mars 2006
Messages : 799
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mars 2006
Messages : 799
Points : 865
Points : 865
Si tu es assez libre, tu peux peut-être te tourner vers des architectures modulaires existantes plutôt que de réinventer la roue.

La plus populaire est probablement OSGi.

Après, si tu n'as pas la possibilité d'utiliser un framework externe, tu pourras toujours regarder ce qui se fait. Cela pourra te faire gagner du temps car tu vas te reposer toutes les questions liées aux modules.
C'est toujours intéressant d'y réfléchir par soi-même, mais si tu as des impératifs, tu n'auras peut-être pas le luxe de le faire.
Deaf est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h20.


 
 
 
 
Partenaires

Hébergement Web