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

Applets Java Discussion :

Accès aux librairies locales à partir d'une applet


Sujet :

Applets Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 32
    Par défaut Accès aux librairies locales à partir d'une applet
    Bonjour à tous,

    Projet:
    Sur le poste client, j'ai des jars qui sont installés dans un répertoire donné
    A partir du navigateur, j'accède à une appli web client léger dans laquelle j'ai un applet.
    J'aimerais que mon applet utilise les jars présents sur le poste client.

    est-possible de faire référence, à partir d'un applet, à des librairies présentes sur le poste d'exécution ?
    Si oui, de quelle façon ? (fichier Manifest, ...)
    Y'a t'il possibilité d'utiliser les variables d'environnement du poste client ? (l'idée serait d'avoir une variable d'environnement faisant référence au répertoire du poste client utile pour mon applet et de faire référence à cette variable d'environnement dans mon applet)

    Précision => mon jar est signé, je peux, donc, à priori, accéder aux ressources locales

    Merci de vos réponses

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Quel est le but de l'opération? Pourquoi vouloir accéder à des librairies locales (dont tu ne peux pas être sur de la version, de l'emplacement ou même de l'existence) plutot que de l'inclure dans l'applet?

    On pourrais résoudre ton problème en instanciant un classloader qui inclue ces jar et en appelant des classes dans ce classloader. Mais ce serait inutilement complexe et sujet à erreurs.

  3. #3
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    D'accord avec Tchize.

    Et je dirai même plus, c'est que tes JAR sont conservés en cache dans le loader local JAVA, donc niveau temps de téléchargement, ça ne pose pas de problème.

  4. #4
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 32
    Par défaut
    En gros, j'ai un périphérique sur le poste client avec lequel je dois communiquer. Pour une cela, une api est fourni avec ce composant (JNI) et est donc installé sur le poste.
    Je précise que ce module (API+périphérique est livré par une équipe externe).

    Maintenant, mon but est de faire communiquer ce périphérique avec mon appli web (interaction sur la cinématique).

    Y'a peut-être mieux qu'un applet pour faire cela mais l'avantage de l'applet, c'est que:
    - je n'ai rien à installer sur les différents postes clients
    - facilité d'impact sur la cinématique via JSObject
    Une autre solution pourrait être une appli Java Web Start à télécharger sur le poste mais là, c'est plus compliqué pour impacter la cinématique

    Autre idée ?

    Sinon, pour le Classloader, j'ai essayé après avoir vu cette page http://stackoverflow.com/questions/9...-signed-applet mais non concluant. Après, est-ce que j'ai bien mis en place la solution ????

    Perso, je pensais plutôt à une solution de type "modification du manifest.mf" afin qu'il attaque, via une variable d'environnement prédéfinie, les jars en local mais je n'ai pas l'impression qu'une telle possibilité existe ...

    Voili

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    j'ai eu exactement la même situation (JNI + applet) à gérer (il s'agissait de lire des données d'une carte beID à partir d'une applet). La solution a été de mettre le jar (contenant les classes natives) avec l'applet et n'était nécessaire sur le poste client que les dll de la partie native. Ces dlls étaient dans le répertoire système ce qui fait que le loadlibrairy dans le jar fonctionnait sans soucis. Donc en pratique, une fois que l'appli marchait en mode desktop, j'ai plus eu qu'à tapper tout les jar, y compris ceux du lecteur, dans l'applet


    Attention cependant. La JVM ne peux charger qu'une seule fois une librairie dll. Or ton applet étant dans une page web, elle va

    -> démarrer plusieur fois
    -> Avoir plusieurs classloader référencant et tentant de charger la librairie native
    -> cette dernière va probablement, à chaque fois, appeler loadlibrary.

    Conséquence: Ca peux cracher lors de la seconde visite de la page avec l'applet.

    Un autre option, si peu de postes sont concernés, serait d'aller tapper les librairies native dans le dossier endorsed/ de la jre pour que toutes les applications y aient accès... avec les conséquences que cela implique.

    Troisième possibilité, si la page web n'est pas indispensable, c'est jnlp, qui permet d'inclure les librairies native dans le déploiement.

  6. #6
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    j'ai eu la même chose à faire avec un lecteur de code barre qui s'appuyait sur une DLL.

    Cette DLL était simplement déclarée dans les ressources de l'Applet lancée au moyen d'un lanceur JNLP (merci JAVA 6) et la DLL était située dans le même répertoire que le .jar de l'applet sur le serveur. Et ça fonctionnait très bien.

    D'ailleurs ici il y a la réponse :
    http://www.developpez.net/forums/d90...va-charge-dll/

    et enfin, une autre façon de faire ici :
    http://www.jguru.com/faq/view.jsp?EID=468498

    Pour faire qu'une applet se lance par JNLP :
    http://docs.oracle.com/javase/tutori...ingApplet.html

  7. #7
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 32
    Par défaut
    Merci pour vos réponses très instructives => je vais plancher maintenant

    Pour répondre aux interrogations de tchize_, je ne vais pas avoir le problème de plusieurs démarrages.

    En fait, je serais dans un contexte type borne avec un lecteur de carte.

    Mon idée est d'intégrer dans une page :
    - mon applet (invisible)
    - un iframe pointant vers mon appli web
    Mon applet interagissant sur l'appli web présente dans l'iframe.
    Cette page ne pourra pas être fermé (et donc pas réouverte => lancement de iexplore -k avec suppression des touches clavier CTRL+ALT) => donc une seule ouverture de l'appli web par poste => donc pas de problématique de plusieurs classloader ....

  8. #8
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    si ton applet discute avec le serveur et met des choses en session, il faudra que ton applet envoie des requêtes HTTP avec le JSESSIONID. Et donc ton applet devra se démarrer avec le JSESSIONID en paramètre.

    En tout cas c'est comme cela que j'avais fait pour mon lecteur de code barre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment accéder aux ressources locales à partir d'une appli web
    Par lginoux dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 01/04/2009, 10h46
  2. Réponses: 1
    Dernier message: 19/02/2008, 09h03
  3. impossible de copier coller à partir d'une applet
    Par sof1980 dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 20/10/2006, 15h58
  4. Réponses: 4
    Dernier message: 22/12/2005, 11h43
  5. [IO][FTP] faire un FTP a partir d'une applet
    Par irkirabie dans le forum Applets
    Réponses: 3
    Dernier message: 19/11/2004, 15h19

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