Débutante JAVA : Erreur
Gaëlle
-
soregh -
soregh -
Bonjour à tous,
Je viens de faire un petit pgm "hello world" en java (C'est ma 1ere expérience en matière de prog).
Quand je lance le serveur j'ai l'erreur suivante :
java.security.AccessControlException: access denied
(java.net.SocketPermission 127.0.0.1:1099 connect,resolve)
J'ai trouvé sur le Net la solution, mais je n'arrive pas à comprendre ce qu'il faut faire (créer des fichiers? où ça? juste les modifier?..etc) Est ce quelqu'un pourrait me traduire de façon simple le etxte ci dessous pour savoir ce que je dois faire? merci d'avance...c'est un projet que je dois avoir terminé mercredi :(
Lorsque l'on essaie d'utiliser un SecurityManager, on obtient le message d'erreur suivant :
java.security.AccessControlException: access denied
(java.net.SocketPermission 127.0.0.1:1099 connect,resolve)
Modification par programme
System.setSecurityManager (new RMISecurityManager() {
public void checkConnect (String host, int port) {}
public void checkConnect (String host, int port, Object context) {}
});
Le fichier .java.policy
Les permissions du SecurityManager sont spécifiées dans l'ordre :
dans le fichier java.policy de ${java.home}/lib/security/java.policy
puis dans
${user.home}/.java.policy (attention au point !)
Les instructions du fichier policy
Le serveur doit pouvoir accepter des connexions d'un hôte particulier :
permission java.net.SocketPermission "sace.essi;fr", "accept";
ou de tous les hôtes et pouvoir faire resolve également :
permission java.net.SocketPermission "*", "accept, resolve";
Pour définir cela, lancer la commande (sous jdk/bin) (voir aussi "A quick look at policytool"):
policytool
et éditer le fichier .java.policy (sous Linux sous ~, sur PC sur c:\winnt\profiles\votreNomuser)
Merci encore pour votre aide
Gaëlle
Je viens de faire un petit pgm "hello world" en java (C'est ma 1ere expérience en matière de prog).
Quand je lance le serveur j'ai l'erreur suivante :
java.security.AccessControlException: access denied
(java.net.SocketPermission 127.0.0.1:1099 connect,resolve)
J'ai trouvé sur le Net la solution, mais je n'arrive pas à comprendre ce qu'il faut faire (créer des fichiers? où ça? juste les modifier?..etc) Est ce quelqu'un pourrait me traduire de façon simple le etxte ci dessous pour savoir ce que je dois faire? merci d'avance...c'est un projet que je dois avoir terminé mercredi :(
Lorsque l'on essaie d'utiliser un SecurityManager, on obtient le message d'erreur suivant :
java.security.AccessControlException: access denied
(java.net.SocketPermission 127.0.0.1:1099 connect,resolve)
Modification par programme
System.setSecurityManager (new RMISecurityManager() {
public void checkConnect (String host, int port) {}
public void checkConnect (String host, int port, Object context) {}
});
Le fichier .java.policy
Les permissions du SecurityManager sont spécifiées dans l'ordre :
dans le fichier java.policy de ${java.home}/lib/security/java.policy
puis dans
${user.home}/.java.policy (attention au point !)
Les instructions du fichier policy
Le serveur doit pouvoir accepter des connexions d'un hôte particulier :
permission java.net.SocketPermission "sace.essi;fr", "accept";
ou de tous les hôtes et pouvoir faire resolve également :
permission java.net.SocketPermission "*", "accept, resolve";
Pour définir cela, lancer la commande (sous jdk/bin) (voir aussi "A quick look at policytool"):
policytool
et éditer le fichier .java.policy (sous Linux sous ~, sur PC sur c:\winnt\profiles\votreNomuser)
Merci encore pour votre aide
Gaëlle
A voir également:
- Java.security.accesscontrolexception: access denied ("java.net.socketpermission" "127.0.0.1:1099" "connect,resolve")
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
45 réponses
youpi!! ça marche!!!
C:\TEST>java rmidemo.HelloMain 192.168.0.5:1099
Le message est: Hello World!
mais que à partir de mon pc...
J'ai tapé la ligne de commande sur mon autre pc et j'ai une erreur .
Sur l'autre pc, faut que je me mette à un endroit particulier pour lancer le client? Il faut faire quoi en fait?
Gaëlle (benzounette@hotmail.com)
C:\TEST>java rmidemo.HelloMain 192.168.0.5:1099
Le message est: Hello World!
mais que à partir de mon pc...
J'ai tapé la ligne de commande sur mon autre pc et j'ai une erreur .
Sur l'autre pc, faut que je me mette à un endroit particulier pour lancer le client? Il faut faire quoi en fait?
Gaëlle (benzounette@hotmail.com)
Exception in thread "main" java.lang.NoClassDefFoundError: rmidemo/HelloMain
voilà l'erreur...
mais je viens de voir dans un bouquin ceci :
Pour appeler une méthode distante, le client doit en 1er lieu extraire une référence distante à l'objet visé. Il lui faut appeler la méthode lookup() du "registry". La procédure de dénomination est propre à chaque "registry": pour sa part la classe java.rmi.Naming localise les objets grâce à des URL similaires aux URL HTTP
object 01 = Naming.lookup("rmi://metalab.unc.edu:2048.fibonnaci");
Avant de manipuler un objet, il faut impérativement le convertir pour l'interface distante qu'il implémente (et non la véritable classe à laquelle le clientn'a pas accès):
Fibonacci calculateur = (Fibonacci) Naming.lookup("fibonacci");
Alors j'ai modifié le client :
public static void main(String[] args) {
try {
Hello obj = (Hello)Naming.lookup("rmi//"+args[0]+"/HelloServer");
String message = obj.sayHello();
System.out.println("Le message est: "+message);
} catch (Exception e) {
System.out.println("HelloMain exception: "+e.getMessage());
e.printStackTrace();
}
}
}
sur le pc où j'ai tout, sous D:/ j'ai créé le rep rmitest où j'ai copié : Hello.class, HelloImpl_Stub.class et HelloMain.class
Ensuite je lance la cmd dd'exécution du client à partir de D:/rmitest et voilà ce que j'obtiens :
D:\RMITEST>java HelloMain rmi://192.168.0.5:1099/HelloServeur
Exception in thread "main" java.lang.NoClassDefFoundError: HelloMain (wrong name
: rmidemo/HelloMain)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Décidément on y arrivera jamais! ;(
Gaëlle
voilà l'erreur...
mais je viens de voir dans un bouquin ceci :
Pour appeler une méthode distante, le client doit en 1er lieu extraire une référence distante à l'objet visé. Il lui faut appeler la méthode lookup() du "registry". La procédure de dénomination est propre à chaque "registry": pour sa part la classe java.rmi.Naming localise les objets grâce à des URL similaires aux URL HTTP
object 01 = Naming.lookup("rmi://metalab.unc.edu:2048.fibonnaci");
Avant de manipuler un objet, il faut impérativement le convertir pour l'interface distante qu'il implémente (et non la véritable classe à laquelle le clientn'a pas accès):
Fibonacci calculateur = (Fibonacci) Naming.lookup("fibonacci");
Alors j'ai modifié le client :
public static void main(String[] args) {
try {
Hello obj = (Hello)Naming.lookup("rmi//"+args[0]+"/HelloServer");
String message = obj.sayHello();
System.out.println("Le message est: "+message);
} catch (Exception e) {
System.out.println("HelloMain exception: "+e.getMessage());
e.printStackTrace();
}
}
}
sur le pc où j'ai tout, sous D:/ j'ai créé le rep rmitest où j'ai copié : Hello.class, HelloImpl_Stub.class et HelloMain.class
Ensuite je lance la cmd dd'exécution du client à partir de D:/rmitest et voilà ce que j'obtiens :
D:\RMITEST>java HelloMain rmi://192.168.0.5:1099/HelloServeur
Exception in thread "main" java.lang.NoClassDefFoundError: HelloMain (wrong name
: rmidemo/HelloMain)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Décidément on y arrivera jamais! ;(
Gaëlle
HelloMain appartient-elle à un package particulier ? Parce que l'erreur indique qu'il ne trouve pas la classe ....
Si oui, tu dois l'appeler avec son nom complet (package(s).nomClasse :
java <package>.HelloMain <paramètres>
sfx
Si oui, tu dois l'appeler avec son nom complet (package(s).nomClasse :
java <package>.HelloMain <paramètres>
sfx
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
au package rmidemo
mais meme en faisant :
D:\RMITEST>java rmidemo.HelloMain 192.168.0.5:1099
Exception in thread "main" java.lang.NoClassDefFoundError: rmidemo/HelloMain
Le truc c'est que j'ai recopié le fichier HelloMain.class dans d:\rmitest.. Parc que toutes mes sources sont dans C:\test dans le package rmidemo..9a marche quand je le fais à partir de C:\test
Mais bon dans ce cas là c'est pas distribué. Moi j'ai beosin d'y accder à distance
Gaëlle
mais meme en faisant :
D:\RMITEST>java rmidemo.HelloMain 192.168.0.5:1099
Exception in thread "main" java.lang.NoClassDefFoundError: rmidemo/HelloMain
Le truc c'est que j'ai recopié le fichier HelloMain.class dans d:\rmitest.. Parc que toutes mes sources sont dans C:\test dans le package rmidemo..9a marche quand je le fais à partir de C:\test
Mais bon dans ce cas là c'est pas distribué. Moi j'ai beosin d'y accder à distance
Gaëlle
Que je comprennes bien ton problème ...
Avant tu avais tout (serveur+client) sur la même machine et maintenant tu as un serveur (IP : 192.168.0.5) sur lequel tu fais tourner le serveur RMI
et tu veux qu'une autre machine (distincte du serveur) contacte ce serveur ... c'est ça ?
Tu as copié tes sources du client sur la nouvelle machine cliente, recompilé le tout et executer java rmidemo.HelloMain 192.168.0.5:1099 et tu as l'erreur que tu as décrite dans ton dernier message ...
Une solution est de rendre accessible sur la machine client via le CLASSPATH le bytecode (fichier .class) des fichiers stub du serveur ( solution la + simple mais pas très élégante vu que tu dois avoir accès au serveur ... )
La bonne solution est d'utiliser le mécanisme de chargement dynamique des classes proposé par RMI ... c'est (un peu !!) plus compliqué
Jete un coup d'oeil sur la classe Activatable ...
Si tu n'as pas d'idée, on essaiera de voir ça demain ...
PS: il est important d'executer rmiregistry depuis un répertoire qui ne contient aucune des classes devant être chargée à distance ..
@+
sfx
Avant tu avais tout (serveur+client) sur la même machine et maintenant tu as un serveur (IP : 192.168.0.5) sur lequel tu fais tourner le serveur RMI
et tu veux qu'une autre machine (distincte du serveur) contacte ce serveur ... c'est ça ?
Tu as copié tes sources du client sur la nouvelle machine cliente, recompilé le tout et executer java rmidemo.HelloMain 192.168.0.5:1099 et tu as l'erreur que tu as décrite dans ton dernier message ...
Une solution est de rendre accessible sur la machine client via le CLASSPATH le bytecode (fichier .class) des fichiers stub du serveur ( solution la + simple mais pas très élégante vu que tu dois avoir accès au serveur ... )
La bonne solution est d'utiliser le mécanisme de chargement dynamique des classes proposé par RMI ... c'est (un peu !!) plus compliqué
Jete un coup d'oeil sur la classe Activatable ...
Si tu n'as pas d'idée, on essaiera de voir ça demain ...
PS: il est important d'executer rmiregistry depuis un répertoire qui ne contient aucune des classes devant être chargée à distance ..
@+
sfx
re,
"Avant tu avais tout (serveur+client) sur la même machine et maintenant tu as un serveur (IP : 192.168.0.5) sur lequel tu fais tourner le serveur RMI
et tu veux qu'une autre machine (distincte du serveur) contacte ce serveur ... c'est ça ? " --> oui
"Tu as copié tes sources du client sur la nouvelle machine cliente, recompilé le tout et executer java rmidemo.HelloMain 192.168.0.5:1099 et tu as l'erreur que tu as décrite dans ton dernier message ... " --> j'ai juste copié HelloMain.java et HelloMain.class que j'ai mis dans un rep crée C:\hello...mais j'ai bien ce msg comme quoi il trouve pas la classe de HelloMain
"Une solution est de rendre accessible sur la machine client via le CLASSPATH le bytecode (fichier .class) des fichiers stub du serveur ( solution la + simple mais pas très élégante vu que tu dois avoir accès au serveur ... ) " --> j'ai fait "C:\hello>java -cp . rmidemo.HelloMain 192.168.0.5 " mais ça change rien... J'ai meme fait "set CLASSPATH=c:\hello/" pour lui dire que c'est dedans qu'il y a HelloMain.java et helloMain.class mais toujours la même erreur.
"PS: il est important d'executer rmiregistry depuis un répertoire qui ne contient aucune des classes devant être chargée à distance .. " --> je l'ai fait
Je bloque complet là !!! ;(
Gaëlle
"Avant tu avais tout (serveur+client) sur la même machine et maintenant tu as un serveur (IP : 192.168.0.5) sur lequel tu fais tourner le serveur RMI
et tu veux qu'une autre machine (distincte du serveur) contacte ce serveur ... c'est ça ? " --> oui
"Tu as copié tes sources du client sur la nouvelle machine cliente, recompilé le tout et executer java rmidemo.HelloMain 192.168.0.5:1099 et tu as l'erreur que tu as décrite dans ton dernier message ... " --> j'ai juste copié HelloMain.java et HelloMain.class que j'ai mis dans un rep crée C:\hello...mais j'ai bien ce msg comme quoi il trouve pas la classe de HelloMain
"Une solution est de rendre accessible sur la machine client via le CLASSPATH le bytecode (fichier .class) des fichiers stub du serveur ( solution la + simple mais pas très élégante vu que tu dois avoir accès au serveur ... ) " --> j'ai fait "C:\hello>java -cp . rmidemo.HelloMain 192.168.0.5 " mais ça change rien... J'ai meme fait "set CLASSPATH=c:\hello/" pour lui dire que c'est dedans qu'il y a HelloMain.java et helloMain.class mais toujours la même erreur.
"PS: il est important d'executer rmiregistry depuis un répertoire qui ne contient aucune des classes devant être chargée à distance .. " --> je l'ai fait
Je bloque complet là !!! ;(
Gaëlle
Voilà ce que je viens de trouver sur le net:
If the CLASSPATH environment variable on the server host includes the path of the remote object's stub classes, it will cause rmiregistry to ignore the java.rmi.server.codebase property setting for the server.
rmiregistry must contain the location of the stub files for the remote server object in an HTTP URL-encoded format, so that when this information is sent to the client, the classes can then be downloaded via an HTTP server.
If rmiregistry does not send the location of the stub classes in HTTP-encoded format, the client having no way to download them, will simply throw a ClassNotFoundException.
je pense que ça correspondrait à mon cas.
Est ce que quelqu'un pourrait me dire par étapes simples, ce qu'il faut faire alors?
Gaëlle
If the CLASSPATH environment variable on the server host includes the path of the remote object's stub classes, it will cause rmiregistry to ignore the java.rmi.server.codebase property setting for the server.
rmiregistry must contain the location of the stub files for the remote server object in an HTTP URL-encoded format, so that when this information is sent to the client, the classes can then be downloaded via an HTTP server.
If rmiregistry does not send the location of the stub classes in HTTP-encoded format, the client having no way to download them, will simply throw a ClassNotFoundException.
je pense que ça correspondrait à mon cas.
Est ce que quelqu'un pourrait me dire par étapes simples, ce qu'il faut faire alors?
Gaëlle
Salut Gaelle,
As-tu bien respecté la même arborescence, identique à celle que tu avais pour le cas ou le client et le serveur sont une même machine, i.e. repertoire rmidemo dans lequel il y a des classes compilées et tes stubs, pour la nouvelle machine distante ... parce que l'erreur que tu as est une erreur de chemin (class rmidemo/HelloMain not found) ...
soit le CLASSPATH est mal positionné, soit l'arborescence ne correspond pas à tes classes compilées ...
sfx (silfaxu@hotmail.com)
As-tu bien respecté la même arborescence, identique à celle que tu avais pour le cas ou le client et le serveur sont une même machine, i.e. repertoire rmidemo dans lequel il y a des classes compilées et tes stubs, pour la nouvelle machine distante ... parce que l'erreur que tu as est une erreur de chemin (class rmidemo/HelloMain not found) ...
soit le CLASSPATH est mal positionné, soit l'arborescence ne correspond pas à tes classes compilées ...
sfx (silfaxu@hotmail.com)
Salut sfx,
bin oui, sur l'autre pc j'ai créé un rep rmidemo mais j'ai mis que le client dedans (HelloMain)...
pour le classpath je n'en sais rien.. :(
bin oui, sur l'autre pc j'ai créé un rep rmidemo mais j'ai mis que le client dedans (HelloMain)...
pour le classpath je n'en sais rien.. :(
Pour connaitre ton CLASSPATH, tapes sur la ligne de commande :
(sous Windows) set CLASSPATH
(sous Unix) echo $CLASSPATH$
ça va te donner les différents répertoires que Java va parcourir pour trouver les classes qui lui manquent lors de l'exécution (ou la compilation) d'une appli.
(première solution)Tu dois recopier les classes (compilées) stub du serveur sur le client et ça devrait marcher ...
(seconde solution)Je dois voir tes classes Java parce que c'est un peu plus compliqué et il y a pas mal de modifs à faire :-((
sfx
(sous Windows) set CLASSPATH
(sous Unix) echo $CLASSPATH$
ça va te donner les différents répertoires que Java va parcourir pour trouver les classes qui lui manquent lors de l'exécution (ou la compilation) d'une appli.
(première solution)Tu dois recopier les classes (compilées) stub du serveur sur le client et ça devrait marcher ...
(seconde solution)Je dois voir tes classes Java parce que c'est un peu plus compliqué et il y a pas mal de modifs à faire :-((
sfx
re,
bon pour situer les choses sur mon pc "serveur", toutes les sources sont dans C:\test\rmidemo
Sur l'autre, le "client", HelloMain (.java et .class) est dans C:\hello\rmidemo
J'ai lancé le serveur avec la commande:
java -Djava.security.policy=java.policy -Djava.rmi.server.codebase=file:/192.168.0.5/test/ rmidemo.HelloImpl
(j'ai vu sur le net que
java -Djava.rmi.server.codebase=http://IP/PATH servait donc à indiquer à quelle endroit la machine virtuelle cliente va pouvoir chercher le code du stub et que c'est nécessaire si le client et le serveur ne sont pas sur la même machine... mais bon ils disent que c'est le chargement dynamique du stub mais avec un server web et http...
Ah je viens de recevoir un nouveau message de toi sfx, je fais ce que tu me dis et je te dis ce que ça fait!
(t'es pas connecté sur MSN?)
gaëlle
bon pour situer les choses sur mon pc "serveur", toutes les sources sont dans C:\test\rmidemo
Sur l'autre, le "client", HelloMain (.java et .class) est dans C:\hello\rmidemo
J'ai lancé le serveur avec la commande:
java -Djava.security.policy=java.policy -Djava.rmi.server.codebase=file:/192.168.0.5/test/ rmidemo.HelloImpl
(j'ai vu sur le net que
java -Djava.rmi.server.codebase=http://IP/PATH servait donc à indiquer à quelle endroit la machine virtuelle cliente va pouvoir chercher le code du stub et que c'est nécessaire si le client et le serveur ne sont pas sur la même machine... mais bon ils disent que c'est le chargement dynamique du stub mais avec un server web et http...
Ah je viens de recevoir un nouveau message de toi sfx, je fais ce que tu me dis et je te dis ce que ça fait!
(t'es pas connecté sur MSN?)
gaëlle
Alors,
quand je fais la cmd SET j'ai une erreur de synthaxe, que je le fasse avec CLASSPATH ou PATH.
Comme quand je fais echo %PATH% ça m'affiche le contenu de la variable PATH, j'ai fait pareil avec CLASSPATH mais ça me retourne "ECHO est actif"...donc bon..
Sinon j'ai recopié HelloImpl_Skel.class et HelloImpl_Stub.class dans C:\hello\rmidemo sur le client mais j'ai toujours la même erreur comme quoi il trouve pas la classe rmidemo/Hello (cette classe est sur le serveur...je peux pas out recopier après ça sera plus distribué!!! quoi que Hello.class c'est l'interface...il la faut peut etre...
Et bé je viens de recopier Hello.class dans C:\hello\rmidemo et ça marche!!! :)
Mais c'est distribué ça?? Ca utilise bien rmi??? Parce que c'est chiant de devoir recopier les classes...Imaginons pour un déploiement sur un parc de 100 machines!! C'est la galère!!!
En tout cas merci beaucoup de ton aode précieuse sfx, franchement je commencais à me décourager!
Gaëlle
quand je fais la cmd SET j'ai une erreur de synthaxe, que je le fasse avec CLASSPATH ou PATH.
Comme quand je fais echo %PATH% ça m'affiche le contenu de la variable PATH, j'ai fait pareil avec CLASSPATH mais ça me retourne "ECHO est actif"...donc bon..
Sinon j'ai recopié HelloImpl_Skel.class et HelloImpl_Stub.class dans C:\hello\rmidemo sur le client mais j'ai toujours la même erreur comme quoi il trouve pas la classe rmidemo/Hello (cette classe est sur le serveur...je peux pas out recopier après ça sera plus distribué!!! quoi que Hello.class c'est l'interface...il la faut peut etre...
Et bé je viens de recopier Hello.class dans C:\hello\rmidemo et ça marche!!! :)
Mais c'est distribué ça?? Ca utilise bien rmi??? Parce que c'est chiant de devoir recopier les classes...Imaginons pour un déploiement sur un parc de 100 machines!! C'est la galère!!!
En tout cas merci beaucoup de ton aode précieuse sfx, franchement je commencais à me décourager!
Gaëlle
Effectivement la solution de recopier les classes sur la machine cliente n'est pas très élégante ..
La méthode à mettre en oeuvre est le chargement dynamique des classes du côté client (pour qu'il récupère automatiquement les classes provenant du serveur) mais c'est plus compliqué et il faut le prévoir dès le début ...
Si tu veux regarder, jetes un coup d'oeil sur la classe Activatable du package java.rmi.activable, les groupes d'activation et
avec comme tu disais préalablement l'histoire du codeserver, etc ...
Par contre, il n'est pas nécessaire d'avoir un serveur web pour que ça marche :-)) (heureusement d'ailleurs)
Enfin, comme exercice pour démarrer Java, il y a quand même plus simple que RMI ... l'essentiel est que ton projet fonctionne pour la date prévue (demain je crois)
Bonnes Fêtes de Fin d'Année
@+
sfx
PS: je n'ai pas de compte sur MSN ... travaillant sous Unix/Linux ... ;-))
La méthode à mettre en oeuvre est le chargement dynamique des classes du côté client (pour qu'il récupère automatiquement les classes provenant du serveur) mais c'est plus compliqué et il faut le prévoir dès le début ...
Si tu veux regarder, jetes un coup d'oeil sur la classe Activatable du package java.rmi.activable, les groupes d'activation et
avec comme tu disais préalablement l'histoire du codeserver, etc ...
Par contre, il n'est pas nécessaire d'avoir un serveur web pour que ça marche :-)) (heureusement d'ailleurs)
Enfin, comme exercice pour démarrer Java, il y a quand même plus simple que RMI ... l'essentiel est que ton projet fonctionne pour la date prévue (demain je crois)
Bonnes Fêtes de Fin d'Année
@+
sfx
PS: je n'ai pas de compte sur MSN ... travaillant sous Unix/Linux ... ;-))
Bon maintenant faut que je rédige un truc là-dessus à mettre en annexe de mon rapport...
Comment je peux tourner ça le fait que j'ai recopié des classes sur le client alors qu'avant je dis quil existe le chargement dynamique des stubs?
Gaëlle
Comment je peux tourner ça le fait que j'ai recopié des classes sur le client alors qu'avant je dis quil existe le chargement dynamique des stubs?
Gaëlle
C'est un simple avis ..
Tu peux déja commencer par dire à quoi sert RMI, donner les protocoles impliqués, le principe et enfin le fonctionnement.
Ensuite donner les 6 étapes de création d'une application utilisant RMI en donnant en support ton exemple.
Enfin, tu dis, en approfondissement, qu'il y a d'autres possibilités comme RMI-IIOP, l'activation dynamique des objets avec juste le principe (mais pas de code ou uniquement des bouts de code ... pour donner un exemple)
Et voilà, ça devrait suffir pour ton prof, non ? (ça me rappelle de bons souvenirs ... :-))
sfx
Tu peux déja commencer par dire à quoi sert RMI, donner les protocoles impliqués, le principe et enfin le fonctionnement.
Ensuite donner les 6 étapes de création d'une application utilisant RMI en donnant en support ton exemple.
Enfin, tu dis, en approfondissement, qu'il y a d'autres possibilités comme RMI-IIOP, l'activation dynamique des objets avec juste le principe (mais pas de code ou uniquement des bouts de code ... pour donner un exemple)
Et voilà, ça devrait suffir pour ton prof, non ? (ça me rappelle de bons souvenirs ... :-))
sfx
Merci,
je vais faire ça...enfin j'ai déjà une partie RMI qui explique tout mais sans aucun code, ça je vais le mettre en annexe avec à la fin un pti truc à propos du chargement dynamique (mise en place plus poussée).
Mais le problème c'est pendant ma démo...je vais leur dire quoi? "Comme vous voyez j'appelle HelloMain du client dont la classe est bein sur lui et je me connecte sur HelloImpl qui est sur l'autre pc dit serveur" C'est bien du RMI ça???? parce que là j'appelle quoi à distance?? rien du tout, non??
(ça me tracasse ..perfectionnsite! ;) )
Gaëlle
je vais faire ça...enfin j'ai déjà une partie RMI qui explique tout mais sans aucun code, ça je vais le mettre en annexe avec à la fin un pti truc à propos du chargement dynamique (mise en place plus poussée).
Mais le problème c'est pendant ma démo...je vais leur dire quoi? "Comme vous voyez j'appelle HelloMain du client dont la classe est bein sur lui et je me connecte sur HelloImpl qui est sur l'autre pc dit serveur" C'est bien du RMI ça???? parce que là j'appelle quoi à distance?? rien du tout, non??
(ça me tracasse ..perfectionnsite! ;) )
Gaëlle
ben si quand même .... tu appelles à partir de ton client une méthode de l'objet distant qui est sur le serveur (dans le serveur de noms rmiregistry ... ) ... c'est quand même du distribué, non ?
Pour bien le montrer, tu peux le faire en deux étapes :
* exécuter le client sans que le serveur soit démarré : tu auras alors une exception te disant que l'objet n'est pas accessible
* puis démarrer le serveur et relancer le client et oh miracle ça marche .. ;-))
C'est pas beau l'informatique ??
sfx
PS: si c'est pas indiscret,c'est pour quoi le rapport (fac, iut, ...) ?
Pour bien le montrer, tu peux le faire en deux étapes :
* exécuter le client sans que le serveur soit démarré : tu auras alors une exception te disant que l'objet n'est pas accessible
* puis démarrer le serveur et relancer le client et oh miracle ça marche .. ;-))
C'est pas beau l'informatique ??
sfx
PS: si c'est pas indiscret,c'est pour quoi le rapport (fac, iut, ...) ?
re,
ce n'est pas indiscret du tout, ce rapport (enfin ils appelent cela un mémoire technique) c'est pour une école de Chargé de Projet en Info (bac +4) je viens d'avoir mon BTS mais moi j'étais "branchée" Admin Syst et Réseau donc j'ai eu droit à un maginique sujet Dev ; Comparaison entre les objets distribués : Corba, RMI, .NET
Justement je me demandais pour la démo (excellente idée pour les 2 étapes, je vais le faire ça ;) ) quand est ce que je vais la faire...j'ai une heure (30 min français / 30 min anglais) donc déjà je vais la faire pendant le français!! mais je me demandais quand...
voilà mon plan :
Les objets Distribués
Les systemes distribués
Le marché des Obj Distribués
CORBA
RMI
.NET
Comparaison (fonctionnalités générales et coût de déploiement)
Conclusion : Web services, avenir des Obj Dist ?
Donc je sais pas trop où la situer cette démo...tu aurais une idée?
Gaëlle
PS : Mais sous Linux, je crois qu'il y a des prog du genre MSN où tu peux utiliser ton compte passeport ;)
ce n'est pas indiscret du tout, ce rapport (enfin ils appelent cela un mémoire technique) c'est pour une école de Chargé de Projet en Info (bac +4) je viens d'avoir mon BTS mais moi j'étais "branchée" Admin Syst et Réseau donc j'ai eu droit à un maginique sujet Dev ; Comparaison entre les objets distribués : Corba, RMI, .NET
Justement je me demandais pour la démo (excellente idée pour les 2 étapes, je vais le faire ça ;) ) quand est ce que je vais la faire...j'ai une heure (30 min français / 30 min anglais) donc déjà je vais la faire pendant le français!! mais je me demandais quand...
voilà mon plan :
Les objets Distribués
Les systemes distribués
Le marché des Obj Distribués
CORBA
RMI
.NET
Comparaison (fonctionnalités générales et coût de déploiement)
Conclusion : Web services, avenir des Obj Dist ?
Donc je sais pas trop où la situer cette démo...tu aurais une idée?
Gaëlle
PS : Mais sous Linux, je crois qu'il y a des prog du genre MSN où tu peux utiliser ton compte passeport ;)
très bon plan ...
Comme c'est du RMI, je la verrais bien après ta présentation RMI et juste avant celle sur .NET pour illustrer ... ça fait une petite pause 'pratique' entre des exposés assez théoriques et généraux je suppose ..
c'est un simple avis :-))
Les Web Services, c'est une bonne conclusion ...bien que ce soit pas encore super (pbs de sécurité, pas de standard pour l'implémentation SOAP, etc ...)
Un petit conseil : il serait judicieux que tout soit prêt avant ta soutenance pour ne pas perdre de temps lors de celle-ci ... parce que je suppose qu'ils seront + interessés par les aspects théoriques (synthèse + compréhension du sujet) que par l'aspect pratique (surtout pour une formation de Chef de Projet où normalement tu ne développes plus beaucoup ...)
Bonne chance pour ta soutenance ... et dis moi si ça s'est bien passé (ce que je ne doute pas)
Bonne soirée
@+
sfx
PS: je vais voir si je peux trouver quelque chose sous Linux pour MSN .. ;-))
Comme c'est du RMI, je la verrais bien après ta présentation RMI et juste avant celle sur .NET pour illustrer ... ça fait une petite pause 'pratique' entre des exposés assez théoriques et généraux je suppose ..
c'est un simple avis :-))
Les Web Services, c'est une bonne conclusion ...bien que ce soit pas encore super (pbs de sécurité, pas de standard pour l'implémentation SOAP, etc ...)
Un petit conseil : il serait judicieux que tout soit prêt avant ta soutenance pour ne pas perdre de temps lors de celle-ci ... parce que je suppose qu'ils seront + interessés par les aspects théoriques (synthèse + compréhension du sujet) que par l'aspect pratique (surtout pour une formation de Chef de Projet où normalement tu ne développes plus beaucoup ...)
Bonne chance pour ta soutenance ... et dis moi si ça s'est bien passé (ce que je ne doute pas)
Bonne soirée
@+
sfx
PS: je vais voir si je peux trouver quelque chose sous Linux pour MSN .. ;-))