IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

URLClassLoader et fichiers verouillés sous Windows


Sujet :

Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 94
    Par défaut URLClassLoader et fichiers verouillés sous Windows
    Bonjour, j'utilise une API qui permet l'utilisation de "composants", ces composants sont des archives JARs que l'on décompresse sur le disque.
    Par exemple comp.jar pourrait être décompressé de la façon suivante:

    comp/
    - bin/comp.class
    - lib/dependance.jar

    Le chargement du composant "comp.class" se fait de façon dynamique via un URLClassloader. Le répertoire lib contient tous les JARs dont a besoin "comp.class".

    Le URLClassLoader essai de charger toutes les classes utilisées par "comp.class", normale, mais ce qui me pose problème c'est que sous Windows, un verrou est posé sur le fichier "dependance.jar" (que j'aurai besoin de supprimer une fois le chargement des classes effectué).

    Apparement un rapport de bug a été posté ici : http://bugs.sun.com/bugdatabase/view...bug_id=5041014, un message a ce sujet est présent ici http://forum.java.sun.com/thread.jsp...sageID=1507426.

    Aucun de ces deux posts ne me permet de résoudre mon problème, auriez vous des indices pour m'aider à avancer ? Y'a t'il des solutions permettant d'unlocker des fichiers sous Windows à partir d'un code Java ?
    Après un peu de lecture j'ai cru comprendre que le ClassLoader créait un "lien" entre une classe chargée en mémoire et le fichier ".class" sur le disque, comment supprimer ce "lien" ?

    Merci.

    Bouba.

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 187
    Par défaut
    salut.

    pourquoi souhaite tu supprimer ton jar?

    j'ai rencontré se problème avec Tomcat lors du redéploiement de de webapp... le déploiement plentait car un des jar utilisé était locké par le classLoader.
    la solution à consisté a setter une option dans le descripteur de l'application qui demendais a tomcat de ne pas locker les jar... pour se faire, tomcat copie le jar dans un fichier temp et charge les classes depuis ce jar, laissant le jar original libre.

    voila... si ca peux aider... bonne chance.

    A première vu, l'autre solution consisterais a implémenter ton propre ClassLoader.

    Patrice.

  3. #3
    Membre confirmé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 94
    Par défaut
    Salut, merci pour ta réponse, effectivement l'idée de créer un répertoire temporaire contenant les jars n'est pas mauvaise du tout.
    Le problème est que je peux avoir de nombreux composants et j'ai un peu peur que celà finisse par prendre pas mal de place (surtout que l'application sur laquelle je bosse est une appli JEE, elle doit donc tourner constamment).
    L'installation des composants charge les classes et créer une hiérarchie du composant décompréssé (comme expliqué précedemment), la désinstallation doit décharger les classes et supprimer cette hiérarchie. Le fait de laisser les jars de mon répertoire "lib" sur le disque à la désinstallation d'un composant indiquerait donc que ce composant ne s'est pas bien désinstallé, bref, je ne trouve pas ça très propre.

    Donc j'ai vraiment besoin de pouvoir soit charger une classe d'un JAR sans que celui-ci soit locké, soit pouvoir forcer la suppression d'un JAR locké.

    Je vais essayer de faire un ClassLoader qui fasse ça, pas super évident, si vous avez des conseils, liens ou quoi que ce soit d'autre qui puisse m'aider....

    Merci.

    Bouba

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 187
    Par défaut
    creer un ClassLoader n'est pas fondamentalement compliqué... il faut surtout bien comprendre l'ordre de chargement des classes...
    inspire toi du code de l'URLClassLoader.
    par contre tu devras spécifier le classloader à utiliser lors du chargement de tes classes... mais j'ai l'impression que tu dois déja jouer avec ca.

    pas de conseil pratique... j'ai fait ca ya pas mal de temps, il faudrais que je m'y replonge...

    bon courage.

    P.

Discussions similaires

  1. Importer un gros fichier SQL sous windows
    Par bigsister dans le forum Outils
    Réponses: 2
    Dernier message: 24/08/2007, 15h17
  2. fichier log sous windows server2003
    Par 3wicha dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 08/06/2007, 15h46
  3. Réponses: 4
    Dernier message: 18/05/2006, 15h00
  4. Afficher un fichier binaire sous Windows
    Par Atomikx dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 14/12/2004, 00h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo