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 :

Chargement DLL depuis lanceur JNLP


Sujet :

Applets Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Chargement DLL depuis lanceur JNLP
    Bonjour,
    Je suis actuellement en train de faire un applet pour s’authentifier en ligne via une carte magnétique.
    Pour cela, je dispose d’une archive iaikPKCSWrapper.jar dont je n’ai pas le code source qui s’interface avec une librairie PKCSWrapper.dll
    Du coté de mon applet j’appelle les méthodes de l’archive iaik pour gérer la carte, je ne charge pas de librairie moi-même en somme.

    Hors si je lance mon applet depuis un serveur, ça ne marche que si ma librairie est placée dans le répertoire system32 (et encore il ne faut pas que je recharge la page sous peine d’un classLoader Exception)

    Mais pour déployer mon applet, je veux charger la librairie avec mon lanceur Jnlp, du coup je fais ça :
    <native-lib href="PKCSWrapper.jar"/>

    J’ai également rajouté l’option :
    <property key="java.library.path" value="." />

    Mais j’ai toujours la meme erreur : unsatisfied link error no pkcs11wrapper in java.library.path

    Y a t’-il qqchose que je fais mal ou bien que je n’ai pas compris ? Je ne sais plus quoi faire !
    Je me disais que si le dll était lancé depuis un jnlp ça resoudrait egalement mo probleme de chargement de la librairie lorsque la page web est rafraichie, mais si je ne peux pas faire autrement que de laisser la librairie dans le répertoire system 32 dans mon cas, comment résoudre au moins ce problème la ?



    Désolé pour le pavé, et merci pour votre aide !

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <native-lib href="PKCSWrapper.jar"/>
    Ce n'est pas le jar, mais la DLL que tu dois pointer avec le tag native-lib.
    Pour le reste, le fait que ça marche dépendra au final de comment le PKCSWrapper charge les DLL.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Oui pardon je n'ai pas précisé mais :
    PKCSWrapper.jar est bien la dll PKCSWrapper.dll que j'ai "archivé" dans un jar
    l'archive qui appelle le dll s'appelle iaikPkcsWrapper.jar

    Pourtant si je mets le dll dans le path du projet il est chargé donc je suppose que le iaikPKCSWrapper doit pouvoir le trouver avec un lanceur jnlp mais je ne vois pas comment définir le path en mettant le dll dans un jar :S

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    avec ce native librairy définie dans le JNLP, tu peux nous donner l'output complet de la console java quand tu lance le jnlp?

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonjour,
    Désolé pour le temps de réponse ! Donc voila ce que me donne la console java :

    Je précise : CApplet est mon programme principal, je n'ai pas touché au jar iaikPKCSWrapper ni à PKCSWrapper.jar (à part pour les signer)

    Si j'ouvre la page html qui lance l'applet

    Missing Application-Name manifest attribute for: file:/C:/Users/MOI/Documents/Applet/CApplet.jar
    Missing Permissions manifest attribute in main jar: file:/C:/Users/MOI/Documents/Applet/CApplet.jar



    Si je lance directement le fichier jnlp

    Missing Application-Name manifest attribute for: file:/C:/Users/MOI/Documents/Applet/CApplet.jar
    Missing Permissions manifest attribute in main jar: file:/C:/Users/MOI/Documents/Applet/CApplet.jar
    Ignored exception: java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: no pkcs11wrapper in java.library.path
    Plugin2Manager calling stopFailed() because of exception during AppContext.dispose()
    Plugin2Manager calling stopFailed() because of displayable window javax.swing.JFrame[frame0,62,0,316x339,hidden,layout=java.awt.BorderLayout,title=Hello Applet,normal,defaultCloseOperation=HIDE_ON_CLOSE,rootPane=javax.swing.JRootPane[,3,26,310x310,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=16777673,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]
    Exception in thread "Thread-13" java.lang.NullPointerException
    at sun.plugin2.applet.Plugin2Manager.destroyAppContext(Unknown Source)
    at sun.plugin2.applet.JNLP2Manager.destroyAppContext(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager.cleanupAppContext(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager.stop(Unknown Source)
    at sun.plugin2.applet.viewer.JNLP2Viewer$2$1.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

    D'ailleurs je suis étonné parce que j'ai bien ajouté un fichier manifeste en créant le CApplet.jar, peut être que je le fais pas correctement, est ce que ça peut jouer ?

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bon du coup j'ai "déjarré" l'archive iaikPKCSWrapper.jar pour voir ce qu'il y avait dedans, je trouve une multitude de classes mais pas de code source, donc je ne peux pas savoir comment la lib est chargée.

    Sinon il y a une commande pour spécifier le chemin d'accès de la dll à ce que j'ai compris java -Djava.library.path mais je ne vois pas comment l'utiliser dans le JNLP. Peut être que je m'égare la :s. Je suis dans le flou

    Au pire est-ce possible de : déployer la dll dans le dossier system 32 de l'utilisateur, et trouver un moyen d'empêcher l'erreur classLoader (librairie chargée plusieurs fois au rafraîchissement de la page) ? Ce serait une deuxieme option cool

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    on va reprendre dans l'ordre. Peux tu nous poster ton fichier .jnlp, le jar contenant la dll et l'output complet de la console?

  8. #8
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    EDIT : Bon en fait pour le manifest j'ai pas de problème, c'est corrigé

    Alors :
    Le jar contenant la dll est PKCSWrapper.jar
    le jar qui fait appel à la dll est iaikPKCSWrapper.jar
    et mon programme principal est Capplet.jar

    Code du jar :

    <?xml version="1.0" encoding="UTF-8"?>
    <jnlp spec="1.0+" codebase="" href="Hello.jnlp">
    <information>
    <title>Hello Applet</title>
    <vendor>Self</vendor>
    </information>
    <security>
    <all-permissions/>
    </security>
    <resources>
    <!-- Application Resources -->
    <j2se version="1.7+"
    href="http://java.sun.com/products/autodl/j2se" />
    <jar href="CApplet.jar" main="true" />
    <jar href="iaikPkcs11Wrapper.jar" />
    <native-lib href="PKCSWrapper.jar"/>
    </resources>
    <property key="java.library.path" value="." />

    <applet-desc
    name="Applet"
    main-class="applet.AppControl"
    width="300"
    height="300">
    </applet-desc>
    <update check="background"/>

    </jnlp>

    résultat de la console :

    Ignored exception: java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: no pkcs11wrapper in java.library.path

    EDIT : détail de l'erreur
    java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: no pkcs11wrapper in java.library.path
    at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.instantiateApplet(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager.initAppletAdapter(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    Caused by: java.lang.UnsatisfiedLinkError: no pkcs11wrapper in java.library.path
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.loadLibrary0(Unknown Source)
    at java.lang.System.loadLibrary(Unknown Source)
    at iaik.pkcs.pkcs11.wrapper.PKCS11Implementation.ensureLinkedAndInitialized(PKCS11Implementation.java:111)
    at iaik.pkcs.pkcs11.wrapper.PKCS11Implementation.<init>(PKCS11Implementation.java:164)
    at iaik.pkcs.pkcs11.wrapper.PKCS11Connector.connectToPKCS11Module(PKCS11Connector.java:77)
    at iaik.pkcs.pkcs11.Module.getInstance(Module.java:199)
    at applet.CPSCard.openModule(CPSCard.java:214)
    at applet.AppControl.<init>(AppControl.java:37)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter$1.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$400(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)


    Merci pour ton aide !

  9. #9
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Je crois avoir résolu le problème et c'était simplement du à une enorme erreur : je faisais appel à la méthode native-lib au lieu de nativelib dans le jnlp
    Et j'ai bloqué dessus quelques jours -__-'
    Bon je vais quand même vérifier si ça marche depuis le serveur et si j'ai pas de probleme de classLoader quand je refresh la page

  10. #10
    Membre actif
    Homme Profil pro
    Développeur Java/JavaEE
    Inscrit en
    Août 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java/JavaEE

    Informations forums :
    Inscription : Août 2014
    Messages : 194
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    EDIT : Bon en fait pour le manifest j'ai pas de problème, c'est corrigé
    comment tu as pu résoudre ce problème ??

  11. #11
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Salut, en fait tu crées un fichier manifeste.txt dans lequel tu dois écrire la nom de ton appli et ses permissions :

    Application-Name: NomDeTonApp
    Permissions: sandbox (si ton applet n'a pas besoin d'acceder à ton ordi, all-permissions sinon)

    Ensuite tu ajoute le manifeste au moment de créer le jar en faisant

    jar cvmf manifeste.txt tonApp.jar classesDeTonApp

    et le tour est joué

Discussions similaires

  1. [C#] Chargement de DLLs depuis un fichier
    Par BillyKane59 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/03/2011, 17h03
  2. Communiquer avec une DLL depuis un driver .SYS
    Par barthelv dans le forum Windows
    Réponses: 17
    Dernier message: 03/04/2006, 10h43
  3. problème de chargement dll
    Par tophque dans le forum MFC
    Réponses: 8
    Dernier message: 18/11/2005, 15h14
  4. Accès dll depuis java avec JNI
    Par romano21 dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 25/10/2005, 14h53
  5. chargement DLL mode debug/release
    Par bihorece dans le forum C++Builder
    Réponses: 3
    Dernier message: 21/06/2004, 14h05

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