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 :

Chargement dynamique de classe et version de java


Sujet :

Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut Chargement dynamique de classe et version de java
    Bonjour,
    Je sais qu'il est possible de charger dynamiquement des classes en Java (même si je ne l'ai pas personnellement experimenté). Est ce que ce type de technique, associé à un test sur la version de la jvm employée permettrait d'interpreter du bytecode relatif au "niveau" de la jvm ? (Autrement dit tester son niveau, puis en fonction de celui-ci, lancer tel ou tel code contenant telle ou telle fonctionnalitée?)
    Et est ce une pratique courant ? Ou il y a t il une raison de ne pas le faire ?

    D'avance merci

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par TabrisLeFol
    Est ce que ce type de technique, associé à un test sur la version de la jvm employée permettrait d'interpreter du bytecode relatif au "niveau" de la jvm ? (Autrement dit tester son niveau, puis en fonction de celui-ci, lancer tel ou tel code contenant telle ou telle fonctionnalitée?)
    Je ne comprend pas ce que tu veux dire exactement ? Tu pourrais être plus précis ou donner un exemple concret ?

    a++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut je m'explique mal....
    Salut,
    (voici une reformulation)
    Par exemple, a partir de la 1.4, on peut, selon la platforme, faire du pleine écran. Si on a des clients ne disposant que d'une version anterieure (la 1.3 à priori), on ne peut donc pas inclure cette fonctionnalitée dans notre logiciel. Pourtant cette fonctionnalitée pourrait etre exploitée par certains clients.
    Il devrait etre possible alors de faire une classe qui utilisera cette fonctionnalitée. Cette classe ne pourra etre utilisée par les 1.3. Par contre si on peut tester la version de la jvm alors on pourrait charger certaines classes avec certaines fonctionnalitées (eg full screen) en fonction de la version du client.
    Cela c'est mon raisonnement théorique. Après cela est il technologiquement possible ? Et si c'est le cas, est ce que cela se fait ? Si non, pourquoi ?

    D'avance merci.

    PS : J'espere avoir été plus clair.

    PPS: Full screen est un exemple, je sais que la 1.6 a apporter d'autres fonctionnalitées, malheureusement, je ne connais pas suffisement cette version pour faire l'exemple dessus.

  4. #4
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par TabrisLeFol
    Salut,
    (voici une reformulation)
    Par exemple, a partir de la 1.4, on peut, selon la platforme, faire du pleine écran. Si on a des clients ne disposant que d'une version anterieure (la 1.3 à priori), on ne peut donc pas inclure cette fonctionnalitée dans notre logiciel. Pourtant cette fonctionnalitée pourrait etre exploitée par certains clients.
    Il devrait etre possible alors de faire une classe qui utilisera cette fonctionnalitée. Cette classe ne pourra etre utilisée par les 1.3. Par contre si on peut tester la version de la jvm alors on pourrait charger certaines classes avec certaines fonctionnalitées (eg full screen) en fonction de la version du client.
    Cela c'est mon raisonnement théorique. Après cela est il technologiquement possible ? Et si c'est le cas, est ce que cela se fait ? Si non, pourquoi ?

    D'avance merci.

    PS : J'espere avoir été plus clair.

    PPS: Full screen est un exemple, je sais que la 1.6 a apporter d'autres fonctionnalitées, malheureusement, je ne connais pas suffisement cette version pour faire l'exemple dessus.
    Donc, si j'ai bien compris, tu voudrais faire un test sur la verison de la JVM et en fonction de ce test appeller des méthodes par réfléxion sur des choses qui sont pas disponibles pour toutes les versions pour permettre de rester compatible. C'est bien ça ?

    Je pense que ça doit être possible. Mais est-tu sûr d'avoir besoin de cela ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    Presque mais aucun raport avec la reflexion.
    Je definie une interface et une instance d'une classe implementant cette interface sera utilisée tout le long du programme.
    Cette instance provient de l'instanciation d'une classe chargée dynamiquement et ce en fonction de la version de la jvm. Ainsi vu du programme rien ne change réellement, cependant les fonctions de cette instance permettront d'utiliser les fonctionnalitées supportée par la jvm.

  6. #6
    Membre éclairé
    Avatar de N_I_C_S
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 450
    Points : 681
    Points
    681
    Par défaut
    Salut,
    Je ne crois pas qu'il soit nécessaire de charger dynamiquement des classes, etc... On peut très bien s'en tirer en implémentant plusieurs classes héritées d'un type IHM (pour reprendre l'exemple) et, selon la JVM, retourner l'IHM adaptée (pattern Builder).

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    Je ne connaissais pas le nom de ce pattern, mais cela correspond effectivement à ce que je veux faire.
    Le chargement dynamique est obligatoire puisque il n'est pas possible (par exemple) d'utiliser des fonctionnalitées 1.4+ avec une 1.3 (genre full screen).
    Le code produit est seulement compatible avec les jvm 1.4+ et donc necessite d'être chargé que si la jvm le permet....

  8. #8
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Euh j'dis pas mais, ça serait pas un poil plus simple avec un bête script de lancement analysant la commande java -version et lançant la bonne appli en fonction de son retour...
    De toute façon avec ta méthode tu es obligé d'avoir le bytecode pour plusieurs versions alors pouquoi ne pas se tourner les pouces au lieu de faire tourner sa tête pour pas grand chose...

  9. #9
    Membre habitué
    Inscrit en
    Décembre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 201
    Points : 179
    Points
    179
    Par défaut
    Autres possibilités bien plus simple :

    - Tu déploies une jvm en même temps que ton application. Il y a des softs qui permettent de packager tout cela.
    - Tu oblige tes clients à installer telle ou telle jvm au lancement.

    Pour ce qui est du chargement dynamique, cela existe avec le Class Loader, mais pour l'avoir utilisé ca fonctionne bien, mais niveau mise en place c'est très galère. Il te faut réécrire une bonne partie de ton code. (moins si tu utilise des interfaces mais tu dois en réécrire quand même.)

    Sinon l'idée du pattern builder parait assez approprié. Tu déploie un jar pour chaque version, et suivant ta jvm t'appelle la classe appropriée.

    Voici un petit example :

    2 jar :
    - jvm14.jar
    - maClasse14

    - jvm15.jar
    - maClasse15

    Et ca passera très bien à la compilation

    Enfin dernière solution que j'utilise :

    J'ai tous mes jars nommés identiquement et contenant les mêmes classes (Mais chacun des jars pour une version specifique de l'appli ou de la jvm). Au lancement, je récupère la version de la jvm et je déclare mon classpath suivant mes besoins).

Discussions similaires

  1. Chargement Dynamique de Class en Java
    Par castor21 dans le forum Général Java
    Réponses: 7
    Dernier message: 08/02/2010, 15h42
  2. "Chargement dynamique" de classe
    Par moutanakid dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/02/2008, 16h37
  3. Erreur chargement dynamique de class
    Par rastakouair dans le forum Langage
    Réponses: 1
    Dernier message: 16/12/2007, 16h42
  4. [Classpath][Classloader]Chargement dynamique de classes
    Par vberetti dans le forum Général Java
    Réponses: 9
    Dernier message: 08/07/2005, 12h11
  5. [tomcat]chargement dynamique de classes depuis une webapp
    Par alphamax dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 12/03/2004, 09h59

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