Applet -> Connexion SQL Server

Applet -> Connexion SQL Server - Java - Programmation

Marsh Posté le 27-06-2002 à 10:31:32    

Je dois me connecter à une Base de Donnée MS SQL server présente sur le réseau local via un applet.
1- Est ce que l'applet doit OBLIGATOIREMENT se trouver sur le même serveur que la Base de donnée,à cause de ses fonctionnalités limitées et restrictions d'accès?
2-Si non, quel est le script de connexion à cette base de donnée?
 
Pour info, voici mon code:
 
import java.net.*;
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
 
 
public class JdbcConn extends Applet
{
    Choice raid;
    Choice customerid;
    Connection connection;
    Statement statement;
     
 public void init()
 {
        raid = new Choice();
        customerid = new Choice();
  try
        {
         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver" );
         DriverManager.registerDriver (new sun.jdbc.odbc.JdbcOdbcDriver());
            connection = DriverManager.getConnection("jdbc:odbc:le_nom_de_ma_dsn","mon_login","mon_password" );
   statement = connection.createStatement();
            String SQL = "select ...";
   ResultSet resultset = statement.executeQuery(SQL);
   while(resultset.next())
   {
    raid.addItem(resultset.getString("toto" ));
    customerid.addItem(resultset.getString("tata" ));
    System.out.println(resultset.getString("toto" ));
    System.out.println(resultset.getString("tata" ));
   }
   add(toto);
      add(tata);
  }
  catch(Exception e)
  {
   System.out.println(e);
  }
 }
 
 
 public void paint(Graphics g)
 {
 }
}


Message édité par BiOxyde le 27-06-2002 à 10:31:58
Reply

Marsh Posté le 27-06-2002 à 10:31:32   

Reply

Marsh Posté le 27-06-2002 à 10:39:57    

réponse 1 - Non  
réponse 2 - Comme n'importe quel applis Java qui se connecte à une BD (si ce n'est que tu dois changer les drivers oracle mais ca c'est un autre problème)
 
Pour 1 tu dois signer ton applet avec JARSigner en lui filant les droits dont elle a besoin (ici visiblement se connecter en TCP sur le host X port 1521).
 
Pour un intranet ce n'est pas très restrectif et je connais plus d'une boite qui procède de la sorte.
 
Mais bon je cherche toujours un BON tuto pour signer une applet pour ce genre de problèmes. Toujours pas trouvé :(


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 27-06-2002 à 10:46:17    

Citation :

dois changer les drivers oracle mais


C'est à dire?
Pour l'applet je dois la faire certifier pour l'utiliser en local, c'est ca que tu veut dire? sinon je n'aurai pas les droits d'accès?

Reply

Marsh Posté le 27-06-2002 à 10:56:47    

Bioxyde a écrit a écrit :

Citation :

dois changer les drivers oracle mais


C'est à dire?
Pour l'applet je dois la faire certifier pour l'utiliser en local, c'est ca que tu veut dire? sinon je n'aurai pas les droits d'accès?




 
je n'ai plus les spec en tête mais il me semble que pour une applet il te faut un driver de type 4. Oracle les fournit. Pour la signature tu dois simplement ajouter une police spéciale qui donne accès à ton applet pour le host machin chose. Ensuite tu signes avec jarsigner
 
lorsque tes clients voient ton applet pour la première fois, il ont un certificat de sécurité (un peu comme les activeX ou autre) et si ils acceptent ton applet récupère le droit que tu as défini dnas ton fichier policy.
 
Une autre solution est d'éditer le ficher java.policy qu'il y a dans la home directory de tes users et donner le droit de connection à ta classe mais bon si tu as 500 machines dans ton intranet ...


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 27-06-2002 à 11:31:37    

Sinon tu peux toujours passer par une servlet se trouvant sur le même serveur que l'applet (si moteur de servlet il y a). Et tu lis ce que renvoie ta servlet (c elle qui s'occupe des requêtes) comme si tu lisais un simple fichier texte, en utilisant new URL(adresse_servlet).openStream(), etc...
Je l'ai déjà fait, ça marche bien... Et ça enlève pas mal de pbs de sécurité.

Reply

Marsh Posté le 27-06-2002 à 11:59:16    

To DarkLord
Je commence a mieux comprendre.
C bien un driver de type IV qu'il faut pour utilise l'applet. Le problème c que ces drivers sont payants:
http://industry.java.sun.com/products/jdbc/drivers
Du moins j'ai pas trouvé de drivers de type IV pour SQL Server gratuit. Ce driver JDBC ne serait t il pas fourni sur le CD de MS SQL Server?
 
To el scorcho
Pour le servlet ca peut être une bonne solution de repli. T'as un exemple, un bon tuto sous la main?
 
Merci

Reply

Marsh Posté le 01-07-2002 à 11:27:22    

Voila ou j'en suis:
j'ai recup les drivers de type 4 de MS SQL Server 2000, j'ai mis mon class et les rep du driver jdbc dans un cab que j'ai signé numériquement (+ certificat).
Le problème c'est que quand je lance ma page web, j ai une erreur du type:
 
######################
 
ava.util.zip.ZipException: ZIP file must have at least one entry
 
 at java.util.zip.ZipOutputStream.finish(ZipOutputStream.java:292)
 
 at java.util.zip.DeflaterOutputStream.close(DeflaterOutputStream.java:134)
 
 at java.util.zip.ZipOutputStream.close(ZipOutputStream.java:310)
 
 at sun.plugin.cache.CachedJarLoader.decompress(CachedJarLoader.java:442)
 
 at sun.plugin.cache.CachedJarLoader.access$500(CachedJarLoader.java:56)
 
 at sun.plugin.cache.CachedJarLoader$5.run(CachedJarLoader.java:344)
 
 at java.security.AccessController.doPrivileged(Native Method)
 
 at sun.plugin.cache.Cache.privileged(Cache.java:230)
 
 at sun.plugin.cache.CachedJarLoader.download(CachedJarLoader.java:329)
 
 at sun.plugin.cache.CachedJarLoader.load(CachedJarLoader.java:131)
 
 at sun.plugin.cache.JarCache.get(JarCache.java:177)
 
 at sun.plugin.net.protocol.jar.CachedJarURLConnection.connect(CachedJarURLConnection.java:71)
 
 at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFile(CachedJarURLConnection.java:56)
 
 at sun.misc.URLClassPath$JarLoader.getJarFile(URLClassPath.java:498)
 
 at sun.misc.URLClassPath$JarLoader.<init>(URLClassPath.java:459)
 
 at sun.misc.URLClassPath$2.run(URLClassPath.java:255)
 
 at java.security.AccessController.doPrivileged(Native Method)
 
 at sun.misc.URLClassPath.getLoader(URLClassPath.java:244)
 
 at sun.misc.URLClassPath.getLoader(URLClassPath.java:221)
 
 at sun.misc.URLClassPath.getResource(URLClassPath.java:134)
 
 at java.net.URLClassLoader$1.run(URLClassLoader.java:190)
 
 at java.security.AccessController.doPrivileged(Native Method)
 
 at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
 
 at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:132)
 
 at sun.plugin.security.PluginClassLoader.findClass(PluginClassLoader.java:189)
 
 at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
 
 at sun.applet.AppletClassLoader.loadClass(AppletClassLoader.java:112)
 
 at java.lang.ClassLoader.loadClass(ClassLoader.java:262)
 
 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:322)
 
 at java.lang.Class.forName0(Native Method)
 
 at java.lang.Class.forName(Class.java:130)
 
 at Jdbc.init(Jdbc.java:22)
 
 at sun.applet.AppletPanel.run(AppletPanel.java:341)
 
 at java.lang.Thread.run(Thread.java:536)
 
java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
 
######################
 
1-Il me dit donc que je dois au moins avoir un point d'entrée dans mon fichier cab. C quoi un point d'entrée? est ce que je dois mettre tous les .class du driver JDBC SQL Server au même niveau que mon fichier principal class ou je dois les laisser dans leur répertoires respectifs?
2-Conséquence du 1: il ne trouve pas le driver JDBC SQL Server.
 
Merci de votre aide
 

Reply

Marsh Posté le 01-07-2002 à 11:28:34    

ton fichier zip est vide ou un des fichiers contenus dans ton jar est un fichier zip et il est vide. Vérifie tes jars avec winzip


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 01-07-2002 à 11:55:07    

Ok j'ai trouvé l'erreur  du 1, c du a des guillemets en trop.
J'avais mis ca:
<APPLET CODE=Jdbc.class ARCHIVE="Jdbc.cab" WIDTH=500 HEIGHT=500></APPLET>
 
au lieu de ca:
<APPLET CODE=Jdbc.class ARCHIVE=Jdbc.cab WIDTH=500 HEIGHT=500></APPLET>
 
Mais il ne trouve tjrs pas le driver SQL Server . Dois je mettre tous les class au meme niveau que Jdbc.class?

Reply

Marsh Posté le 01-07-2002 à 11:55:52    

mais c quoi ce machin cab là ? et ton fichier Jdbc.class n'est pas dans un package ?
 
c'est des drivers officiels ?
 


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 01-07-2002 à 11:55:52   

Reply

Marsh Posté le 01-07-2002 à 12:04:35    

Pour pouvoir utiliser le driver de type 4 de SQL Server dan une archi 3tier, je suis obligé de signée mon applet. Or pour signer une applet pour IE ,il faut utiliser Signcode et une arrchive de type CAB (cabinet Windows) et non JAR.
Concernant les drivers, c les drivers JDBC officiels de MS pour SQL Server 2000. Moi j'aurais besoin de ceux pour SQL Server 7.0 mais je les trouve pas, ou du moins je pense qu'ils existent pas.

Reply

Marsh Posté le 01-07-2002 à 14:14:24    

Jdbc.class c'est le main de ton applet ?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 01-07-2002 à 14:39:34    

oui

Reply

Marsh Posté le 01-07-2002 à 14:46:50    

et il n'est pas un package? Et c'est quoi la trace de l'erreur exactement?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 01-07-2002 à 14:58:33    

Il ne fait pas partie d'u package.
et l'erreur est: java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
Voici mon source:
 
import java.net.*;
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
 
 
public class Jdbc extends Applet
{
 Choice raid;
    Choice customerid;
    Connection conn;
    Statement state;
 
 public void init()
 {
        raid = new Choice();
        customerid = new Choice();
  try
        {
       
         Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver" );  
   Connection conn = DriverManager.getConnection ("jdbc:microsoft:sqlserver://xxxxx:1433;User=xxx;Password=xxx;DatabaseName=xxx" );  
         
               
   state = conn.createStatement();
            String SQL = "select raid,customerid from ra where raid=30128";
            ResultSet rs = state.executeQuery(SQL);
   while(rs.next())
   {
    raid.addItem(rs.getString("raid" ));
    customerid.addItem(rs.getString("customerid" ));
    System.out.println(rs.getString("raid" ));
    System.out.println(rs.getString("customerid" ));
   }
  }
  catch(Exception e)
  {
   System.out.println(e);
  }
  add(raid);
        add(customerid);
 }
 
 public void paint(Graphics g)
 {
 }
}


Message édité par BiOxyde le 01-07-2002 à 14:59:21
Reply

Marsh Posté le 01-07-2002 à 15:01:30    

bin l'erreur est claire non? Il y a un répoertoire com dans ton cab ?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 01-07-2002 à 17:08:57    

oui y a com/microsoft/sqlserver/SQLServerDriver.class
et tous les autres fichiers et rep.
Donc pour résumer la situation:
Voici le code de ma page HTML qui loade Jdbc.class qui est à la racine du Jdbc.cab:
 
<HTML>
 
<HEAD>
</HEAD>
 
<BODY BGCOLOR="000000">
<CENTER>
<APPLET CODE=Jdbc.class ARCHIVE=Jdbc.cab WIDTH=500 HEIGHT=500></APPLET>
</CENTER>
</BODY>
 
</HTML>
 
Voici le contenu de l'alias de IIS:
Jdbc.html
Jdbc.cab
 
et voici le code erreur
 
java.util.zip.ZipException: ZIP file must have at least one entry
 
 at java.util.zip.ZipOutputStream.finish(ZipOutputStream.java:292)
|
|
|
 
 at java.lang.Thread.run(Thread.java:536)
 
charger : classe Jdbc.class introuvable.
 
java.lang.ClassNotFoundException: Jdbc.class
 
 at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:151)
|
|
|
 at java.lang.Thread.run(Thread.java:536)
 
Caused by: java.io.IOException: open HTTP connection failed.
 
 at sun.applet.AppletClassLoader.getBytes(AppletClassLoader.java:224)
 
|
|
|
 at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:138)
 
 ... 10 more


Message édité par BiOxyde le 01-07-2002 à 17:15:08
Reply

Marsh Posté le 03-07-2002 à 10:04:49    

Bon j y suis arrivé.
Mais pour arriver au résultat désespérant que le driver JDBC SQL SERVER 2000 ne tourne pas pour la version 7.0
Je vais essayer d'utiliser le driver jdbc.odbc de type 1 pour voir si ca peut tourner. Mais pour ca faut signer mon applet. Y a t'il un moyen que quand l'user ouvre la page html pour la première fois, ca lui ouvre le certificat pour qu'il puisse valider les droits de l'applet. C pour un intranet, et je veut pas le faire signer par Verisign.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed