Comment on charge un driver dans un applet?

Résolu
Signaler
Messages postés
48
Date d'inscription
dimanche 5 mars 2006
Statut
Membre
Dernière intervention
9 mars 2007
-
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
-
Salut à tous...
Heu je sais que j'ai déja fais un topic a ce sujet mais impossible de remettre la main dessu (si quelqu'un pouvait me dire comment on fait d'ailleurs ça m'éviterais de refaire ça ;))
Alors voila problème: J'ai un applet Java qui doit absolument récupérer des données d'une base de données...Je pense avoir compris le truc de base et pour accéder à ma base de donnée, il faut charger un driver (un pont JDBC-ODBC)...
Pour cela j'ai tapé le code suivant:
try {Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}
catch(ClassNotFoundException e)
{JOptionPane.showMessageDialog(null, "Impossible de charger le pilote jdbc:odbc");}

mais lors de l'éxécution de l'applet avec Appletviewer, ça me dit java.security.AccessControlException : access denied(Java.lang.RuntimePermission accessClassInPackage sun.jdbc.odbc)
Ce qui me plait pas trop c'est que dans le livre que j'utilise il est marqué :"Le modèle de sécurité pour l'éxécution des applet interdit l'utilisation de ce type de driver depuis une applet Java du type untrsuted"
Donc ces deux argument voudrait dire qu'en gros je ne peux pas utiliser de pont JDBC-ODBC dans mon applet...
Est-ce Vraie? Si oui, comment puis-je me connecter a ma base de donnée (MySQL5 installé sur mon pc avec Apache2 et PHP5 ainsi que MySQL Driver 3.51) sans avoir des codes incompréhensible?(Apparemment, il suffirait de trafiquer la classe java.security...J'ai vu qu'il y avait des classe AccessControlContext et autre...Mais je sais pas comment m'y prendre)

Merci de vos réponse (Punaise depuis le temps que je cherche réponse à ça, je commence a croire que personne au monde ne s'est connecté a une BDD avec un applet Java :s:s Pitiéééééé aidezzz-moi :'(:'()

32 réponses

Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,



j'ai traité le sujet avec [../auteurdetail.aspx?ID= 256798 alonsyl] cette semaine si tu baisse les yeux dans la liste des dernier post tu trouveras "JDBC => java.security.AccessControlException" et si tu vas plus loins dans la recherche des derniers post tu trouveras "[SUN-JDBC-ODBC-JDBCODBCDRIVER-CLASSNOTFOUNDEXCEPTION-11_681838.aspx Sun.jdbc.odbc.jdbcodbcdriver => classnotfoundexception]

WORA
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,



1)Regarde ici et ici





2) utilisemysql tu auras moin de problèmes de plus c'est optimiser pour le net

WORA
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,



normalement pour ce connecter sur une bd mysql l'url doit avoir la forme

jdbc:mysql://ipServeur:3306/nomBase et non jdbc::mysql://ipServeur:3306/nomBase



WORA
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,





ba le port 3306 c'est le port par defaut de mysql et normalement il te
faut le mettre sinon comment tu veux que le serveur route les bon
paquets destiné à mysql .



telecharge le driver de mysql ici et utilise le driver situé dans com.mysql.jdbc.Driver
ensuite assure toi que le driver soit dans le classpath apres verifie la partie de création du statement


WORA
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Qd tu signe une applet tu signe TES classes tu rend utrusted TES
classes pas celle de mysql qui reste untrusted sinon signe aussi le jar
de mysql (regarde la licence pour voir si tu as le droit)

WORA
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Renseigne bien le codebase

sinon c'es dispo pour les applet de charger njar pour ce faire utilise la balise archive exemple

archive="mysql.jar,monjar1.jar,monjar2.jar"



regarde ce lien il contien des ptites choses utile

http://mindprod.com/jgloss/applet.html


WORA
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Regarde a la fin du dernier lien il y a une reponse choppé sur le site de sun

WORA
Messages postés
48
Date d'inscription
dimanche 5 mars 2006
Statut
Membre
Dernière intervention
9 mars 2007

Bon j'ai compris comment créer le fichier de signature...
Mais comment on fait pour avoir un fichier .jar???
Je n'ai que des .java pour la source et des .class pour le byte code...Mais pas de jar....
Messages postés
48
Date d'inscription
dimanche 5 mars 2006
Statut
Membre
Dernière intervention
9 mars 2007

Bin je viens de trouver comment faire mais je n'arrive pas a appliquer mon certificat a mon fichier jar...:s:s
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

*



c'est expliqué sur le net.

WORA
Messages postés
48
Date d'inscription
dimanche 5 mars 2006
Statut
Membre
Dernière intervention
9 mars 2007

Expliqué sur le net c'est bien gentils en tapant jarsigner et tout un bazard a coté mais ce qu'ils ne précisent pas c'est que ça demande un "passPhrase" et quand je fais entrer pour valider ça me sort qu'il ne peut pas trouver un fichier .keytruc là...Donc leur méthode n'est pas sufisament détaillé pour que tout le monde puisse s'en servir sans faire d'erreur...
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,



pour creer ce fichier utilise KeyTool IUI

WORA
Messages postés
48
Date d'inscription
dimanche 5 mars 2006
Statut
Membre
Dernière intervention
9 mars 2007

GENIAALLLL :D:D
J'ai enfin réussi a coller un certificat a mon applet et j'ai ENFIN réussi a charger un pilote de pont JDBC-ODBC dan mon applet....
Aaaaaaah ça fait plaisir...je progresse depuis le temps...Un petit résultat annonce un bon début :D
Pour ceux que ça pourrait aider:
Pour créer un jar a partir d'un fichier class:
<li>Allez dans la commande MS-DOS, et entrez dans le dossier bin qui se trouve là ou vous avez installé le SDK Java (pour ma part c'est e:\java\bin\</li><li>Tapez "jar cvf <nom_du_fichier_de_sortie>.jar <nom_du_byte_code1>.class <nom_du_byte_code2>.class <etcetc>"</li><li>Appuyez sur "Entrée"...Un descriptif des fichiers compressés apparaît dans la fenetre de commande et un fichier nommé <nom_du_fichier_de_sortie>.jar apparaît dans le dosier bin (si vous n'avez pas changé de racine bien sur)</li>Pour créer un certificat:
<li>Restez dans l'invite de commande MS-DOS dans le meme répertoire $racine du SDK Java$\bin\</li><li>Tapez "keytools -genkey -alias <Nom_du_certificat>"</li><li>Entrez alors les paramètres demandés a savoir le mot de passe, votre prénom suivie avec un espace de votre nom etc etc</li><li>Validez en appuyant sur "entrée"et à la demande de saisi d'un mot de passe (je sais plus ce que c'est), laissez vide et validez en appuyant sur "entrée"</li><li>Un fichier sans extension est alors créé dans le dossier bin</li>Pour signer votre Archive Jar:
<li>Toujours dans l'invite de commande MS-DOS et toujours dans le meme dossier, tapez "jarsigner -signedjar <nom_de_l'archive_signée>.jar <nom_de_l'archive_non-signée>.jar <Nom_du_certificat>". L'archive signée est le nom sous lequel sera créé le fichier archive java après l'application du certificat</li><li>Saisissez le mot de passe précedemment entré lors de la création de votre certificat et validez...</li><li>Je ne sais pas sous les autres versions mais sous le JDK 1.5, cela affiche que le certificat sera expiré dans 6mois...Je pense donc qu'il faudrat renouveler cette opérations tous les 6 mois</li>Et voila vous avez à la sortie de tout ça un beau fichier .jar qui contient vos ou votre byte-code(s) avec un petit certificat qui s'affichera a chaque fois que votre applet sera chargé dans une machine vituelle (Ca demande si l'utilisateur veut faire confiance a l'auteur affiché (votre Prénom et Nom saisie lors de la création du certificat seront affichés ici) en éxécutant le code de l'applet...)
Pour se servir d'une archive jar dans une page html, vous tapez le code de base .class" archive="<nom_de_l'archive_signée>.jar" height="<Largeur en pixel>" width="<Hauteur en pixel>">
Et voila qui vous permettra de charger les drivers nécessaires dans vos applet :D:D
J'espère que ce mini-tutorial en aidera plus d'un :D

Maintenant pour ma part j'ai encore un autre problème...Ca me marque que la source de donnée est introuvable et que le nom de pilote est non spécifié...
J'ai utilisé ce code:
Connection con = DriverManager.getConnection("jdbc:odbc:mybdd","","<mot_de_passe>");
dans un groupe try{}catch(SQLException e){}
Une petite piste please? :D D
Merci :D
Messages postés
48
Date d'inscription
dimanche 5 mars 2006
Statut
Membre
Dernière intervention
9 mars 2007

C pas juste il m'a meme pas mis les puces de texte cet éditeur :'(:'(...
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
tu as bien créé ta base niveau windaube? tu as mis ou ton fichier
.chéplusquoi qui contien la base tu as bien renségné ce fichier dans le
service odbc sur ton win?

WORA
Messages postés
48
Date d'inscription
dimanche 5 mars 2006
Statut
Membre
Dernière intervention
9 mars 2007

Alors j'ai trouvé pourquoi...C'est parsque j'ai utilisé un nom de driver ODBC différent dans la source de donnée ODBC windows et dans mon applet...Forcément ça pouvais pas marcher -_-'
Maintenant je rencontre deux autre problème:
1)J'ai réussi a me connecter a ma BDD et a accéder a une table...Mais lors de l'affichage des résultats je met
JOptionPane.showMessageDialog(null, "Votre nom d'utilisateur: "+resultats.getString(1));
dans un try-catch et ça me sort que l'état du curseur est non-valide...Ca veut dire quoi?

2)Une problème de transport sur le net est apparu...En effet, si j'éxécute l'applet sur mon serveur, pas de problème...Mais dès que je tente de l'éxécuter sur un pc-client, il charge le pilote de pont JDBC-ODBC correctement puis il me met que la source de donnée est introuvable et que le nom de pilote n'est pas spécifié...Ce qui me parait normal en sachant que le pc-client ne possède pas le driver installé dans la source de données ODBC...
Comment puis-je faire alors pour faire en sorte que au lieu de prendre le driver de données du pc-client se redirige tout seul vers mon serveur?
En deux mot, comment me connecter a partir de mon applet, s'éxécutant sur un client, a ma base de donnée stockée sur mon serveur?
Messages postés
48
Date d'inscription
dimanche 5 mars 2006
Statut
Membre
Dernière intervention
9 mars 2007

Alors je précise...
Mon serveur est équipé de Apache 2 avec PHP5 et MySQL5
Dans mon applet, j'utilise finalement le driver JDBC fourni par MySQL (plutot qu'un pon JDBC-ODBC...Ca me parait plus simple et plus rapide)
Je reprend donc les étapes-->Je tente de charger le driver, c'est un succès aussi bien sur le serveur que sur le client :D(Lignes de codes:
try {Class.forName("org.gjt.mm.mysql.Driver").newInstance();
JOptionPane.showMessageDialog(null, "Driver Chargé ");//Chargement du driver de pont JDBC-ODBC
}
catch(Exception e) {JOptionPane.showMessageDialog(null, "Erreur de chargement des drivers: "+e);}

)...Mais lors des opération suivante a savoir ceci:

con = DriverManager.getConnection("jdbc::mysql://localhost/mybdd","user","mot_de_passe");
dans un try-catch

Bin ca me met SQLException: No suitable Driver aussi bien sur le client que sur le serveur...:s
Messages postés
48
Date d'inscription
dimanche 5 mars 2006
Statut
Membre
Dernière intervention
9 mars 2007

Effectivement ça marche mieux...Non pas a cause du double deux-points mais a cause de l'ip qui était imcomplète...j'avais juste entré l'IP 127.0.0.1 sans mettre le port utilisé a coté (enfin je pense que c'est le port non?)
Alors...J'ai deux résultats
Lors de l'éxécution sur le serveur ça me met une erreur d'éxécution (message de moi) et ca fait du SQLException:Before Start of ResultSet ...
Et lors de l'éxécution coté client...Attention les yeux j'ai un message de taré :D que voici :

com.mysql.jdbc.CommunicationException Communication link Failure due to underlying exception:

**BEGIN NESTED EXCEPTION**
java.net.SocketException
MESSAGE:java.net.ConnectException: Connection timed out: connect
et la suite c'est le descriptif des endroits ou a été trouvé l'erreur

Une solution à ça? (comme IP j'ai rentré celle du serveur qui héberge mon site web et par la meme occasion la page contenant l'applet)
Messages postés
48
Date d'inscription
dimanche 5 mars 2006
Statut
Membre
Dernière intervention
9 mars 2007

Nouveau message d'erreur:
Applet éxécuté sur le serveur mais en utilisant l'adresse IP du serveur au lieu de 127.0.0.1 dans l'applet:
SQLException:null, message from server: "Host 'amd3700' is not allowed to connect to this MySQL server"

Je retente dès que possible en passant par le 127.0.0.1 dans l'applet
Messages postés
48
Date d'inscription
dimanche 5 mars 2006
Statut
Membre
Dernière intervention
9 mars 2007

Bon bin si je met l'adresse intranet et que j'éxécute l'applet sur le serveur, ça marche sans broncher ;)
Je comprend pas pourquoi l'applet lorsqu'il s'éxécute sur un client, me dit que "le client <nom_du_pc-client> ne permet pas la connexion a ce serveur MySQL"...:s J'ai tenté de débloquer des ports dans le Firewall de windows XP mais sans succès...Et je n'utilise pas de routeur...
Une soluce?
PS: J'ai mis comme adresse "IP", l'URL de mon site web qui pointe vers l'IP du serveur...Ca marche "très bien"...Mis a part ce problème de permission