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 :

[Débutant] Applet et chargement de mysql connector


Sujet :

Applets Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut [Débutant] Applet et chargement de mysql connector
    Bonjour,

    Alors voila mon problème. Je suis entrain de développer une applet qui, entre autre chose, se connecte à une base de donnée. Jusque là, pas de problème, j'ai téléchargé mysql-connector-java-5.1.6-bin.jar, je l'ai spécifié dans les libs sous eclipse, et quand je fait "run as applet", ca marche nickel.
    Par contre, si je me fait un .html qui charge l'applet il ne trouve pas le mysql-connector. (Il trouve bien l'applet car elle est executée si j'enleve mes appels de bdd).
    Pour info mon serveur de dev est wamp. Qui est certe initalement fait pour du php, mais dans la mesure ou mon applet doit integrer un site completement réalisé en php, je ne vois pas tellement comme faire autrement.

    Toujours pour info, mon .html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <body bgcolor="#DDDDDD">
    <applet code= "source.Entree.class" name="testApplet" archive="mysql-connector-java-5.1.6-bin.jar" width="600" height="800">
    Votre navigateur n'est pas compatible java.
    </applet>
    </body>
    A noter que quand j'appelle l'applet comme ca : http://localhost/testApplet/test.html ca ne marche pas, mais si je l'appelle comme ca : E:\wamp\www\testApplet\test.html c'est bon...
    Si j'enleve le archive=, ni l'un ni l'autre ne fonctionnent...

    Merci d'avance pour votre aide !

  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
    affiche ta console java dans ton navigateur et affiche tes erreurs. Mais je gage qu'il s'agit d'un securityException. Ton applet n'est pas auorisée à effectuer des connection vers le base de donnée. Dans eclipse ou avec l'url sous forme de "file", les securités n'existent pas (tu n'es pas dans la zone "web"). Pour résoudre ce problème de sécurité, faut signer tous les jars faisant partie de ton applet. (utilisation de jarsigner)

  3. #3
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut
    En fait l'erreur est celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Java Plug-in 1.6.0_05
    Utilisation de la version JRE 1.6.0_05 Java HotSpot(TM) Client VM
    Répertoire d'accueil de l'utilisateur = C:\Users\Onirian
     
     
    GestionBdd : Connexion a la base de donnée.
     
    com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
     
    Last packet sent to the server was 0 ms ago.
    	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 com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
    	at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
    	at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2103)
    	at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:718)
    	at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
    	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 com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
    	at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
    	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
    	at java.sql.DriverManager.getConnection(Unknown Source)
    	at java.sql.DriverManager.getConnection(Unknown Source)
    	at commun.connection.GestionBdd.<init>(GestionBdd.java:21)
    	at commun.connection.GestionBdd.getInstance(GestionBdd.java:39)
    	at commun.connection.GestionBdd.getDb(GestionBdd.java:54)
    	at commun.personnage.Avatar.<init>(Avatar.java:19)
    	at frontal.Entree.init(Entree.java:60)
    	at sun.applet.AppletPanel.run(Unknown Source)
    	at java.lang.Thread.run(Unknown Source)
    Caused by: java.net.SocketException: java.security.AccessControlException: access denied (java.net.SocketPermission [0:0:0:0:0:0:0:1]:3306 connect,resolve)
    	at com.mysql.jdbc.StandardSocketFactory.unwrapExceptionToProperClassAndThrowIt(StandardSocketFactory.java:404)
    	at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:265)
    	at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:280)
    	at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2026)
    	... 18 more
    java.lang.NullPointerException
    	at commun.connection.GestionBdd.getDb(GestionBdd.java:54)
    	at commun.personnage.Avatar.<init>(Avatar.java:19)
    	at frontal.Entree.init(Entree.java:60)
    	at sun.applet.AppletPanel.run(Unknown Source)
    	at java.lang.Thread.run(Unknown Source)
    J'ai tenté en signant numériquement le jar contenant le mysql (c'est a moi de faire ca ??) mais ca n'a rien donné de plus. Simplement maintenant il me demande si j'accepte le certificat avant.

  4. #4
    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
    pour que ton applet aie les droit d'accès, il faut que *toutes* tes classes (autant celle du connecteur que le tiennes) soient signées. Et oui, c'est à toi de faire çà, c'est pas le boulot du compilo ^^

  5. #5
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut
    Arf... soit, j'essairai ca.
    Et le "c'est a moi de faire ca", désignait la classe de connector mysql. J'veux dire, c'est pas moi qui l'ai codée celle là, que ce soit moi qui la signe me semble étrange. A mon sens elle devrait être directement signé par MySQL.
    'fin bref, je tente quand j'ai 5mn et on verra bien ;-)

  6. #6
    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
    non, c'est à toi de le faire. Pour que l'applet fonctionne en sécurisé, il faut que toutes les classes soient signées avec le *même* certificat. Et le problème quand un jar a été signé déjà par une partie tierce, c'est qu'il faut t'amuser à l'ouvrir et virer la signature pour mettre la tienne

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut desesperant...
    Bon, toujours pas de réponse...

    Je crois bien avoir écuré tous les sujets , du moins ceux en français, qui traitent des applets, des archives jar et du driver mysql connector...

    J'ai essayé plusieurs trucs :

    Création d'un jar avec eclipse, mais ça marche pas : à l'étape des options de la création du manifest, il ne me propose aucun classe lors de la sélection de la classe principale... (c'est un applet, donc g pas mis de classe main, mais une méthode init()) j'ai l'ai donc indiquée à la main dans le fichier manifest. J'ai aussi définit le classpath comme indiqué dans la FAQ.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Manifest-Version: 1.0
    Main-Class: Freez
    Class-Path: .\images mysql-connector-java-5.1.6-bin.jar
    Et j'ai recréé le jar.

    J'ai aussi essayé de compiler à la main mes classes en compilant avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javac -cp ".:./mysql-connector-java-5.1.6-bin.jar" *.java
    et faire le jar en récupérant le fichier manifest précédent.

    J'ai fais un certificat et j'ai signé le jar créé avec ma signature comme indiqué dans la FAQ.

    Maintenant il me demande d'accepter le certificat pour charger l'applet, ce dernier se charge, mais la connexion ne se fait pas. A mon avis c'est qu'il faut effectivement enlever la signature du mysql connector de sun pour mettre la mienne à la place... mais j'ai pas trouvé comment faire.

    J'ai eu plusieurs erreurs à chaque fois différentes : une fois la connexion ne marchait pas, l'autre fois c'était le driver que la JVM ne trouvait pas, et puis maintenant c'est le socket qui est fermé = même erreur que ranken... (retour à la case départ)

    J'ai oublié de préciser : j'arrive à me connecter dans eclipse, mais pas sur le serveur... Donc j'ai bien configuré les droits du user mysql pour qu'il puisse se connecter au serveur. Et j'ai aussi configuré mysql (fichier my.cnf) pour qu'on puisse y accéder depuis l'extérieur. J'ai débloqué le port 3306.

    SVP, help me... :/

  8. #8
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut
    Alors en gros, le .jar de mysql, je l'ai mis directement a la racine de mon jar a moi.
    En gros, j'ai mon dossier avec toutes mes sources dedans, et a la racine de ce truc la, j'ai claqué direct le mysql-connector-java-5.1.6-bin.jar
    Ensuite, j'ai fait un .zip du tout que j'ai renommé en jar, j'ai signé le tout, en suivant une faq sur dvp () et hop.
    Pour l'appel a mon applet, c'était comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <body bgcolor="#DDDDDD">
    <applet code="applet.frontal.Entree.class" name="monapplet" archive="s_applet.jar" width="600" height="800">
    Votre navigateur n'est pas compatible java.
    </applet>
    </body>
    Je n'ai pas eu a enlever la signature du mysqlconnector.jar dans la mesure ou celui ci n'est pas signé de base.

    Par contre, une fois que j'ai réussi a faire fonctionner le tout, j'ai été fort étonné de constater que l'applet se connectait a ma base de donnée en local. J'avais mis "localhost", et vu que l'applet est chargée sur le poste client... ben même quand le tout est en ligne, il cherche la bdd sur le poste client.

    Dans la mesure ou ouvrir ma base a des connections externes me genait (d'autant plus que le client a les sources de ton applet, un coup de décompilo, et il chope tes identifiants et fait ce qu'il veut de ta base, sauf subtilité qui m'aurai échapée), finalement, j'ai abandonné cette idée.
    Maintenant mon applet communique en xml avec une servlet. C'est la servlet, hébergé sur le serveur directement (et la, plus de problème de signature ni rien) qui fait le lien avec la base.
    Genre applet -> demande info a la servlet -> interogation de la base et hop, on remonte.

  9. #9
    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
    Pour faire court onigami, tu dois exploser ton jar (le décompresser en fichiers .class et autres) quelque part et inclure ces fichier dans ton jar final (comme tu le ferais pour des ressources)

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut Merci
    Merci à tous, j'ai trouvé la solution, j'ai décompressé l'archive du mysql-connector et j'ai mis les dossiers com et org à la racine de mon archive contenant mes classes et mes ressources. J'ai créé le tout avec la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jar cvfm MANIFEST.MF *.class ./images/* ./com/* ./org/*
    après j'ai créé un certificat et j'ai signé mon jar avec keytool et jarsigner.
    Voilà ca a marché.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/10/2006, 15h20
  2. [Débutant] [Applet] Comment signer une applet
    Par xterminhate dans le forum Applets
    Réponses: 3
    Dernier message: 09/06/2005, 18h27
  3. [VB.NET] [MySQL Connector Net 1.0.4] Pb de MySqlConnection
    Par toxine dans le forum Windows Forms
    Réponses: 9
    Dernier message: 22/03/2005, 13h44
  4. [Débutant]Applet
    Par la7su dans le forum Applets
    Réponses: 16
    Dernier message: 20/07/2004, 14h44
  5. [Débutant][Applet] Communication avec Servlet - IO Exception
    Par gandalf_le_blanc dans le forum Applets
    Réponses: 35
    Dernier message: 16/04/2004, 13h29

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