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 Naming j'espère que ça va marcher....................
a+
désolé pour les fautes d'orthographe de l'avant dernier message j'était pas en bon humeur
Wouuuuuuuuuuuuuuuuuuuh ha ha,trop fort,ça marche,merci beaucoup.
Mais je pense qu'on va se revoir très bientôt.
Encore merci
Bonjour,
très bien man il faut juste que t'essaies d'organiser ton code il faut qu'il soit fait d'une manière professionnel surtout le fait que lance des JOptionPane dans le catch si non renseigne toi un peu sur les Design Pattern.
re-bonjour
Eh oui,je savais qu'on se retrouverait.Donc voila le probème:
J'ai exécuté le client rmi sur une 2e machine,et lorsque je clique sur enregistrer(pour enregistrer les données dans la BD qui se trouve sur une autre machine) j'ai le message d'erreur suivant:
Pour la mise en réseau,j'ai attribué l'adresse 192.168.1.1 à la machine "serveur",et 192.168.1.2 au client.Toutes les 2 machines sont sous vista.java.rmi.ConnectException: Connection refused to host: 192.168.1.1; nested exception is:
java.net.ConnectException: Connection refused: connect
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.lookup(Unknown Source)
at java.rmi.Naming.lookup(Unknown Source)
at ClientRmi2.actionPerformed(ClientRmi2.java:401)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.Dialog$1.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(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)
... 38 more
Voici la classe client:
Sinon j'ai bien démarré le serveur avant d'exécuter le client.
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486 import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.NotBoundException; import java.rmi.RemoteException; import java.sql.SQLException; //import java.text.NumberFormat; //import java.util.Vector; import javax.swing.*; import javax.swing.text.DefaultEditorKit; public class ClientRmi extends JDialog implements ItemListener, ActionListener,Serializable { private JMenuBar m = new JMenuBar(); //la barre du menu private JMenu fichier = new JMenu("Fichier"); //le menu fichier private JMenu Edit = new JMenu("Edition"); //le menu edition private JMenu affichage= new JMenu("Affichage"); //le menu affichage private JMenu aide = new JMenu("Aide"); //le menu aide // JMenu fenetre=new JMenu("Fenetre"); // JMenuItem open = new JMenuItem("Ouvrir"); //l'element ouvrir private JMenuItem save = new JMenuItem("Enregistrer"); //l'element Enregistrer // JMenuItem save_as = new JMenuItem("Enregistrer sous"); //l'element Enregistrer sous private JMenuItem close = new JMenuItem("Quitter"); //l'element Quitter private JMenuItem copier; // = new JMenuItem("copier"); //l'element copier private JMenuItem couper; // = new JMenuItem("couper"); //l'element coper private JMenuItem coller; // = new JMenuItem("coller"); //l'element coller private JMenuItem apropos = new JMenuItem("A propos"); //l'element A propos private JMenuItem option = new JMenuItem("Options d'affichage"); //l'element Options d'affichage private JLabel labFormInscription; private JPanel granPan; private PanelArrondi panFormulaire; private JPanel panRecherchEtud; private JPanel panSexe; // Labels,Combos,Panels,JTextField et Boutons du formulaire //Les labels private JLabel labNum; private JLabel labNom; private JLabel labPrenom; private JLabel labSexe; private JLabel labDateNaiss; private JLabel labPays; private JLabel labAdresse; private JLabel labTel; private JLabel labMail; private Database db=null; //les champs de texte private JTextField jtNum; private JTextField jtNom; private JTextField jtPrenom; //private JTextField jtDateNaiss; private JTextField jtPays; private JTextField jtAdresse; private JTextField jtMail; private JTextField jtTel; // Les boutons private JButton enreg; private JButton annuler; private JButton quitter ; private JButton btListeClient; private JButton btSupprimerClient; //Les boutons radio private ButtonGroup sexe ; private JRadioButton masculin ; private JRadioButton feminin; JComboBox jour, mois, annee; //les chmaps de date de naissance private JOptionPane confirm; public ClientRmi() { this.setLayout(null); this.setTitle("Gestion Client"); this.setLocationRelativeTo(this.getParent()); // this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // this.setLayout(null); //this.setBounds(100, 100, 655, 490); // java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); this.pack(); this.setLocation( (screenSize.width-600)/2, (screenSize.height-590)/2 ); this.setSize(660, 620); this.setModal(true); Color c = new Color(224,255,255); granPan = new JPanel(); granPan.setLayout(null); granPan.setBounds(0, 0,660, 620); granPan.setBackground(Color.DARK_GRAY); this.gereMenu(); this.gereAccueil(); this.setVisible(true); } public void gereMenu() { //initialisation des actions copier couper coller Action alt = new DefaultEditorKit.CopyAction(); Action actionCopier = new DefaultEditorKit.CopyAction(); Action actionColler = new DefaultEditorKit.PasteAction(); Action actionCouper = new DefaultEditorKit.CutAction(); KeyStroke k = KeyStroke.getKeyStroke(KeyEvent.CTRL_MASK, KeyEvent.VK_C); KeyStroke k1 = KeyStroke.getKeyStroke(KeyEvent.CTRL_MASK, KeyEvent.VK_V); KeyStroke k2 = KeyStroke.getKeyStroke(KeyEvent.CTRL_MASK, KeyEvent.VK_X); KeyStroke k3 = KeyStroke.getKeyStroke(KeyEvent.ALT_MASK, KeyEvent.VK_F); JTextPane textPane = new JTextPane(); copier= new JMenuItem(actionCopier); copier.setText("copier"); couper = new JMenuItem(actionCouper); couper.setText("couper"); coller = new JMenuItem(actionColler); coller.setText("coller"); save.setEnabled(false); close.setEnabled(true); option.setEnabled(false); apropos.setEnabled(true); // file.add(open); // file.addSeparator(); fichier.add(save); // file.add(save_as); fichier.addSeparator(); fichier.add(close); //ajouter les elments du menu Edit Edit.add(copier); Edit.add(couper); Edit.add(coller); //ajouter les elments du menu view affichage.add(option); //ajouter les elments du menu help aide.add(apropos); //ajouter les menus au barre m.add(fichier); m.add(Edit); m.add(affichage); m.add(aide); close.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { System.exit(0); } }); //Ajouter la barre au frame //this.add(m); setJMenuBar(m); // } public void gereAccueil() { labFormInscription=new JLabel("Formulaire d'ajout d'un client"); labFormInscription.setBounds(130, 30, 400, 20); /* labNum= new JLabel("ID Client :"); labNum.setBounds(30, 60, 100, 20); jtNum=new JTextField(); jtNum.setBounds(120, 60, 150, 20);*/ // jtNum.disable(); labNom=new JLabel("Nom :"); labNom.setBounds(30, 60, 100, 20); jtNom=new JTextField(); jtNom.setBounds(170, 60, 160, 20); labPrenom=new JLabel("Pr�nom :"); labPrenom.setBounds (30, 100, 100, 20) ; jtPrenom=new JTextField(); jtPrenom.setBounds (170, 100, 160, 20) ; labSexe=new JLabel("Sexe :"); labSexe.setBounds(30, 140, 140, 20); sexe = new ButtonGroup(); masculin = new JRadioButton("M", true); feminin=new JRadioButton("F", false); sexe.add(masculin); sexe.add(feminin); panSexe=new JPanel(); panSexe.setLayout(null); panSexe.setBounds(170, 140, 160, 20); panSexe.setLayout(new GridLayout(1, 2)); panSexe.add(masculin); panSexe.add(feminin); labDateNaiss=new JLabel("Date de naissance :"); labDateNaiss.setBounds(30, 180, 120, 20 ) ; jour = new JComboBox(); mois = new JComboBox(); annee = new JComboBox(); //initialisation de la liste des jours int i = 0; for (i = 1; i <= 31; i++) { jour.addItem("" + i); } jour.setSelectedIndex(0); //definir l'element selectionn� par defaut (le 1er element) //initialisation de la liste des mois for (i = 1; i <= 12; i++) { mois.addItem("" + i); } mois.setSelectedIndex(0); //definir l'element selectionn� par defaut (le 1er element) //initialisation de la liste des annees for (i = 1970; i <= 2007; i++) { annee.addItem("" + i); } annee.setSelectedIndex(16); //definir l'element selectionn� par defaut de l'annee (1986) JPanel panDateNaiss = new JPanel(); panDateNaiss.setLayout( new GridLayout(1,3)); panDateNaiss.setBounds(170, 180, 160, 20) ; panDateNaiss.add(jour); panDateNaiss.add(mois); panDateNaiss.add(annee); labPays=new JLabel("Nationalit� :"); labPays.setBounds (30, 220, 100, 20) ; jtPays =new JTextField(); jtPays.setBounds (170, 220, 160, 20) ; labAdresse=new JLabel("Adresse :"); labAdresse.setBounds (30, 260, 100, 20) ; jtAdresse=new JTextField(); jtAdresse.setBounds (170, 260, 160, 20) ; labMail=new JLabel("E-mail :"); labMail.setBounds(30, 300, 100, 20); jtMail=new JTextField(); jtMail.setBounds(170, 300, 160, 20); labTel=new JLabel("T�l�phone :"); labTel.setBounds(30, 340, 100, 20); jtTel=new JTextField(); jtTel.setBounds(170, 340, 160, 20); panFormulaire=new PanelArrondi(); panFormulaire.setLayout(null); panFormulaire.setBounds(10, 20, 380, 400); panFormulaire.setBackground(Color.white); /* panFormulaire.add(labNum); panFormulaire.add(jtNum);*/ panFormulaire.add(labNom); panFormulaire.add(jtNom); panFormulaire.add(labPrenom); panFormulaire.add(jtPrenom); panFormulaire.add(labSexe); panFormulaire.add(panSexe); panFormulaire.add(labDateNaiss); panFormulaire.add(panDateNaiss); panFormulaire.add(labPays); panFormulaire.add(jtPays); panFormulaire.add(labAdresse); panFormulaire.add(jtAdresse); panFormulaire.add(labMail); panFormulaire.add(jtMail); panFormulaire.add(labTel); panFormulaire.add(jtTel); btListeClient=new JButton("Liste des clients"); btListeClient.setBounds(10, 100, 157 , 40); btListeClient.addActionListener(this); btSupprimerClient=new JButton("Suppression"); btSupprimerClient.setBounds(10, 180, 157, 40); btSupprimerClient.addActionListener(this); panRecherchEtud=new JPanel(); panRecherchEtud.setLayout(null); panRecherchEtud.setBounds(465, 20, 170, 380); panRecherchEtud.setBackground(Color.white); panRecherchEtud.setBorder(BorderFactory.createLineBorder(Color.black,1)); // panRecherchEtud.add(boutonModifier); panRecherchEtud.add(btListeClient); // panRecherchEtud.add(boutonSupprimer); panRecherchEtud.add(btSupprimerClient); enreg=new JButton("Enregistrer"); enreg.setBounds(20, 465, 100, 20); enreg.addActionListener(this); annuler=new JButton("Annuler"); annuler.setBounds(140, 465, 80, 20); annuler.addActionListener(this); quitter=new JButton("Quitter"); quitter.setBounds(495, 465, 80, 20); quitter.addActionListener(this); granPan.add(labFormInscription); granPan.add(panFormulaire); granPan.add(panRecherchEtud); granPan.add(enreg); granPan.add(annuler); granPan.add(quitter); this.add(granPan); } void quitter() { int result=confirm.showConfirmDialog(null,"Voulez vous vraiment quitter?","Gestion Etudiants",JOptionPane.YES_NO_OPTION); if(result==0){//reponse oui System.exit(0); } else if(result==1){//reponse non } } public void actionPerformed(ActionEvent e) { if (e.getSource().equals(btListeClient)) { new ListeClient(); // this.setVisible(false); } if (e.getSource().equals(btSupprimerClient)) { new SupprimerClient(); // this.setVisible(false); } if (e.getSource().equals(enreg)) { try { InterfaceRmi interfac = (InterfaceRmi) Naming.lookup("rmi://192.168.1.1/InterfaceRmi"); String j=jour.getSelectedItem().toString(); String m = mois.getSelectedItem().toString(); String a = annee.getSelectedItem().toString(); String nom= jtNom.getText(); String prenom= jtPrenom.getText(); String sexe=""; String date_naiss = j.concat("/").concat(m).concat("/").concat(a) ; String pays= jtPays.getText(); String adresse= jtAdresse.getText(); String mail= jtMail.getText(); String num_tel= jtTel.getText(); if (masculin.isSelected()) { sexe = "masculin"; } else { sexe = "feminin"; } if(nom.equals("")|| prenom.equals("")|| pays.equals("")|| date_naiss.equals("")||adresse.equals("") ||mail.equals("")|| num_tel.equals("")){ JOptionPane.showMessageDialog(null,"Veuillez remplir les champs"); } else { String str = interfac.insertDetails(nom, prenom, sexe, date_naiss, pays, adresse, mail, num_tel); if(str.equals("SUCCESS")) { JOptionPane.showMessageDialog(null,"Enregistrement r�ussi"); } else { JOptionPane.showMessageDialog(null,"Enregistrement non r�ussi cot� client"); } } } catch (MalformedURLException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } catch (RemoteException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } catch (NotBoundException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } } if (e.getSource() == annuler) { jtNom.setText(""); jtPrenom.setText(""); jtPays.setText(""); jtAdresse.setText(""); jtMail.setText(""); jtTel.setText(""); } if(e.getSource()==quitter ) { quitter(); } } @Override public void itemStateChanged(ItemEvent arg0) { // TODO Auto-generated method stub } public static void main(String[] args) { new Client(); } }
Au fait il y'a un détail troublant aussi concernant le réseau.Quant je suis sur la machine "serveur" et que je tape l'adresse de la machine "client" j'arrive à accéder aux données partagées qui sont sur la machine "client".Mais le contraire ne marche.Le serveur est introuvable.c'est peut etre la cause.
Merci d'avance
Que chui bete,c'est mon cable qui déconnait,je l'ai changé et maintenant ce problème est réglé.Désolé pour le dérangement.
Par-contre j'ai un nouveau message d'erreur quand j'exécute le client rmi:
Tu te rappelles m'avoir dit d'enlever le SecurityManager dans la classe serveur?C'est peut-etre ça la cause.Et quand je remet le SecurityManager ça ne marche pas.Que faire please?java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: craysystems.InterfaceRmi (no security manager: RMI class loader disabled)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at java.rmi.Naming.lookup(Unknown Source)
at ClientRmi2.actionPerformed(ClientRmi2.java:401)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.Dialog$1.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: craysystems.InterfaceRmi (no security manager: RMI class loader disabled)
at sun.rmi.server.LoaderHandler.loadProxyClass(Unknown Source)
at java.rmi.server.RMIClassLoader$2.loadProxyClass(Unknown Source)
at java.rmi.server.RMIClassLoader.loadProxyClass(Unknown Source)
at sun.rmi.server.MarshalInputStream.resolveProxyClass(Unknown Source)
at java.io.ObjectInputStream.readProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
... 34 more
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"); } }
sur les 2, vu que tu t'en sert des 2 cotes t'as pas le choix. Voici la repartition des classes :
cote serveur :
- l'interface
- l'implementation de l'interface
- le serveur
cote client :
- l'interface
- le client
Sinon pour la definition de la property, essayes avec un chemin explicite du style "D:\\repertoire\\policy.txt".
Et en mettant quelque chose de basic dans la policy, du style :
Autre chose, "Naming.rebind" ne sert que si tu as deja quelque chose dans l'annuaire si c'est une creation il faut faire "Naming.bind" Il faudrait verifier ds la javadoc mais je crois que rebind cree une exception s'il ne trouve pas l'instance dans l'annuaire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 grant { permission java.security.AllPermission; };
Au fait, ca fonctionne sans SecurityManager?
reee désolé pour ce retard.
en fait il faut faire fonctionner l'application sans le SecurtiyManger dans un premier après on s'en occupe
Bon toujours rien.J'ai remplacé "rebind" par "bind",j'ai mis le "grant" mais il me souligne la ligne en rouge.T'aurais pas oublié une virgule par hasard?
Concernant le setProperty,quand je fais ceci:
il me dit que la syntaxe n'est pas bonne,donc je suis obligé de faire ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part System.setProperty("java.security.policy", "D:\workspace\CraySystems\.java.policy");
Par finir j'ai retiré le SecurityManager,mais ça m'affiche toujours la même erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part System.setProperty("java.security.policy", ".java.policy");
Donc retour à la case départ.
Au fait j'utilise netBeans.
deja pour le chemin, il faut doubler les \.
Mais comme la deja dit Aziz, il faut que cela fonctionne sans SecurityManager avant de s'amuser a l'ajouter...
Il te reste plus qu'a simplifier ton prog pour voir d'ou ca vient? Au fait t'as essaye en local ou t'es directement sur plusieurs PC?
Oui en local ça marche,même avec le securityManager
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager