Bonjour
J'aimerais savoir comment générer la souche et le squelette à l'aide de la commande "rmic",et comment démarrer le registre rmi à l'aide de "start",le tout en étant sous ECLIPSE.
Merci
Bonjour
J'aimerais savoir comment générer la souche et le squelette à l'aide de la commande "rmic",et comment démarrer le registre rmi à l'aide de "start",le tout en étant sous ECLIPSE.
Merci
Bonsoir,
je crois que si tu codes bien les classes et l'interface de ton applications RMI eclipse appelle automatiquement le compilateur rmic....
et pour lancer le registry de RMI il faut juste ajouter dans la fonction main() de ton serveur un appel de java.rmi.registry.LocateRegistry.createRegistry(1099).
1099:représente le port par défaut de serveur RMI
la méthode createRegistry est une méthode statique donc il faut pas penser à créer un objet il faut juste copier coller la ligne que je viens d'écrire.
à bientôt
Merci d'avoir répondu.
Donc j'ai fait ce que tu m'as dit,j'ai copié la ligne dans le main,mais quand j'exécute le serveur rmi j'ai un message d'erreur:
On dirait qu'il s'agit de la stratégie de sécurité.SI c'est le cas,j'ai bien créé le fichier en faisant ceci:Exception in thread "main" java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkConnect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
at sun.rmi.server.UnicastRef.newCall(Unknown Source)
at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
at java.rmi.Naming.rebind(Unknown Source)
at craysystems.ServeurRmi.main(ServeurRmi.java:83)
.ouvrir le policy tool
.Cliquer sur add Policy Entry
.Sélectionner AllPermission
.Terminer
Et j'ai sauvegardé le fichier dans "C:\Users\Administrateur" sous le nom ".java.policy".
Donc voila.
Sinon voici l'interface et la classe qui implemente l'interface:
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 import java.rmi.Remote; import java.rmi.RemoteException; public interface InterfaceRmi extends Remote { String insertDetails (String nom,String prenom,String sexe,String date_naiss, String pays,String adresse,String mail,String num_tel) throws RemoteException; }
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97 import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.RMISecurityManager; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.server.UnicastRemoteObject; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.swing.JOptionPane; public class ServeurRmi extends UnicastRemoteObject implements InterfaceRmi { static ResultSet result; static Connection con; static PreparedStatement stat; private Database db=null; public ServeurRmi() throws RemoteException { super(); } public String insertDetails(String nom, String prenom, String sexe, String dateNaiss, String pays, String adresse, String mail, String numTel) throws RemoteException { int res = 0; String sReturn ="fail"; db=new Database(); db.setPilote("com.microsoft.sqlserver.jdbc.SQLServerDriver"); db.setConnection("jdbc:sqlserver://localhost:1433;databaseName=CraySystems", "sa", "passer"); String requete="insert into client (nom,prenom,sexe,date_naiss,pays,adresse,mail,num_tel) values(?,?,?,?,?,?,?,?)"; //etablir une connexion à la base de données db.setPStatement(requete); try { //db.getPStmt().setInt(1,Integer.parseInt(num)); db.getPStmt().setString(1,nom); db.getPStmt().setString(2,prenom); db.getPStmt().setString(3,sexe); db.getPStmt().setString(4,dateNaiss); db.getPStmt().setString(5,pays); db.getPStmt().setString(6,adresse); db.getPStmt().setString(7,mail); db.getPStmt().setString(8,numTel); res=db.sendRequeteLMD(); //enregistrer les informations System.out.print(res); if(res>0){ sReturn = "SUCCESS"; } else { JOptionPane.showMessageDialog(null,"Erreur!"); } } catch (SQLException e1) { JOptionPane.showMessageDialog(null,"Echec de préparation de l'objet Prepared statement"); } return sReturn; } public static void main(String[] args) { System.setSecurityManager(new RMISecurityManager()); try { ServeurRmi serveur = new ServeurRmi(); try { Naming.rebind("InterfaceRmi", serveur); LocateRegistry.createRegistry(1099); } catch (MalformedURLException e) { // TODO Auto-generated catch block JOptionPane.showMessageDialog(null,"Server registered"); } } catch (RemoteException e) { // TODO Auto-generated catch block JOptionPane.showMessageDialog(null,"Echec"); } } }
Bonjour,
c'est une exception très connu le fichier policy n'est pas facile à paramétré si tu élimine la ligne de création de sécurité manager ça va marcher mais si tu vois vraiment que tu dois sécuriser les communication réseaux je te montrerai comment ça faire un bon fichier policy je l'ai dans un doc il faut seulement que je cherche ça sur mes archives mais dans un premier temps n'utilises pas le sécrurité manager juste pour faire fonctionner ton truc
Cool ça marche,ce problème est réglé.Maintenant il est reste celui du compilateur rmic car quand je compile j'ai le message "Echec",si tu regardes dans le main de mon code,c'est le JOptionPane de mon try-catch.
Bonsoir,
je crois que ton erreur vient de faite que tu instancies l'objet de ta classe de serveur avant de lancer le registry je crois qu'il faut faire le contraire lancer le registry et puis créer une instance de la classe de Serveur et puis la stocker dans le Namingj'espère que ça va marcher....................
a+
Bonjour
Si tu peux le retrouver ca m'intéresserai d'avoir un doc d'aide sur la creation de policy, je n'en ai pas encore trouver sue le net
Sinon, je suis egalement en train de faire mes 1er essais et apres quelques galeres j'ai reussi a faire fonctionner le securityManager. Je suis partie du code propose sur ce site http://www.pps.jussieu.fr/~rifflet/Cours3/rmi.html
J'ai juste modifie la classe CompteurServeur comme ceci pour eviter de lancer RMI registry manuellement et ajouter une property pour le SecurityManager
Ca pourra peu etre t'aider...
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 import java.rmi.Naming; import java.rmi.RMISecurityManager; import java.rmi.registry.LocateRegistry; /** Etapes : * 1 - lancer serveur de nom : Application externe : RMI registry * 2 - lancer le serveur d'objet : executer CompteurServeur * 3 - lancer le client : executer CompteurClient avec les arguments necessaire * * Apres manip, penser a arreter le serveur d'objet et le serveur de nom * * http://www.pps.jussieu.fr/~rifflet/Cours3/rmi.html */ public class CompteurServeur { public static void main(String[] args) throws Exception { //lancement du RMI registry par code au lieu du lancement par appli externe LocateRegistry.createRegistry(1099); //RMI policy System.setProperty("java.security.policy", "ici mettre chemin complet vers fichier policy"); if(System.getSecurityManager() == null) System.setSecurityManager(new RMISecurityManager()); CompteurImpl compteur = new CompteurImpl(0); Naming.bind("cpt", compteur); } }
Par contre je n'arrive tjs pas a faire fonctionner CompteurImpl2. Si vous avez une idee, ca m'interesse...
Bon ça ne marche toujours pas.J'ai toujours la même erreur.Voici ce que j'ai fait:
Une petite question: dois-je avoir la classe interface sur les 2 machines ou bien sur la machine "client" seulement?
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 public static void main(String[] args) { //System.setSecurityManager(new RMISecurityManager()); try { try { LocateRegistry.createRegistry(1099); System.setProperty("java.security.policy", ".java.policy"); if(System.getSecurityManager() == null) System.setSecurityManager(new RMISecurityManager()); ServeurRmi serveur = new ServeurRmi(); Naming.rebind("InterfaceRmi", serveur); JOptionPane.showMessageDialog(null,"Server registered"); } catch (MalformedURLException e) { // TODO Auto-generated catch block } } catch (RemoteException e) { // TODO Auto-generated catch block JOptionPane.showMessageDialog(null,"Echec"); } }
Partager