octobre
2008
Comme je le disais hier dans le billet sur le chargement des modules, il n’est théoriquement pas possible d’ajouter des ressources à un ClassLoader après sa création.
Néanmoins, il est possible de le faire au moyen de l’API de Reflection et l’utilisation d’une méthode non-publique.
En effet, l’URLClassLoader a une méthode addUrl qui permet de lui rajouter une URL. On peut donc invoquer cette méthode pour rajouter une URL dans la liste des endroits ou le ClassLoader va chercher pour charger une classe.
Voici une méthode permettant d’ajouter une URL au ClassLoader système :
URLClassLoader systemClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Class<URLClassLoader> classLoaderClass = URLClassLoader.class;
try {
Method method = classLoaderClass.getDeclaredMethod("addURL", new Class[]{URL.class});
method.setAccessible(true);
method.invoke(systemClassLoader, new Object[]{u});
} catch (Throwable t) {
t.printStackTrace();
throw new IOException("Impossible d'ajouter l'URL au ClassLoader. ");
}
}
Comme vous le voyez, on ne fait qu’utiliser la Reflection pour ajouter une URL au ClassLoader. Cette méthode est valable pour tout URLClassLoader.
Néanmoins, je vous déconseille d’utiliser cette méthode à moins d’en avoir vraiment besoin. Il est plus propre d’utiliser son propre ClassLoader.
3 Commentaires + Ajouter un commentaire
Archives
- novembre 2011
- avril 2010
- mars 2010
- février 2010
- janvier 2010
- décembre 2009
- novembre 2009
- octobre 2009
- septembre 2009
- juillet 2009
- juin 2009
- avril 2009
- mars 2009
- février 2009
- octobre 2008
- septembre 2008
- mars 2008
- février 2008
- janvier 2008
- décembre 2007
- novembre 2007
- octobre 2007
- septembre 2007
- août 2007
- juillet 2007
- juin 2007
- mai 2007
- avril 2007
Catégories
- AMD
- Apple
- Cartes graphiques
- Chrome
- Conception
- Divers
- Eclipse
- English
- Hardware
- Informatique générale
- Intégration continue
- IntelliJ Idea
- Java
- JTheque
- Linux
- Logiciels
- Mes articles
- Mes critiques de livres
- Mes projets
- Microsoft
- Mon serveur perso
- Office 2007
- Open Source
- Outils
- Perso
- PHP
- Processeurs
- Programmation
- Sécurité
- Spring
- Windows Vista
- Windows XP
« Je ne sais pas si c’est la meilleure façon de faire, mais pour le moment ça me convient bien. »
Je ne sais pas non plus si c’est la meilleure façon mais je n’en vois pas d’autres.
Merci et bonne continuation
Bonjour,
Pour le moment, les modules que j’ai sont justement par fonctionnalités. On retrouve par exemple le module statistiques :
org.jtheque.stats.view
org.jtheque.stats.services
Module Films :
org.jtheque.films.view
org.jtheque.films.services
org.jtheque.films.persistence.dao
org.jtheque.films.persistence.od
J’ai plutôt procédé à un découpage par couches. Ensuite, dans la couche View, j’ai un découpage à peu près MVC.
Je ne sais pas si c’est la meilleure façon de faire, mais pour le moment ça me convient bien.
Bonjour,
Cette série d’articles est très intéressante mais il y à une question qui me trotte dans la tête :
« Comment organiser les packages ? » Dans le cas d’une application MVC on devrais briser un peu le modèle pour ne plus avoir un package monapp.model, monapp.views, monapp.controllers mais plutôt se tourner vers une organisation par fonctionnalités,
monapp.statistiques.model,views,controller, monapp.achat.model,views,controller.
Sinon comment compte tu « packager » tes modules ?