rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

[JAVA]Cast de Remote avec RMI

Posté par yozine, le jeudi 28 juin 2007 à 10:34:39
Salut, je galère un peu pour faire tourner RMI avec Eclipse. Un peu d'aide serait grandement appréciée !

J'ai créé deux packages, qui correspondent au client et au serveur de l'appli que je veux distribuer :
STEU_client
STEU_server

le serveur contient:
- InterfaceEau.java (interface distante)
- EauImp.java (etend UnicastRemoteObject)
- StartEau.java (lance le registre et enregistre le service de EauImpl)
- EauImp_stub.java (est généré par rmic)
+ d'autres classes pas utiles ici

Client contient:
- InterfaceEau.java (interface distante)
- TestRMI.java (client qui appelle la souche RMI)
+ ...

Je génère le stub côté serveur (visiblement avec JRMP 1.2 il n'y a plus de skel côté client)

Je met en place un security manager RMI cote client et serveur.

Je lance mon registre RMI sur le port 'localhost:1099', et j'enregistre le service distant avec 'bind'. Jusque là, pas de soucis.

Puis j'appelle le service enregistré, avec un client par 'lookup'.

Je caste l'objet Remote renvoyé par le nom de mon interface distante.

Et là j'ai ..

.. l'erreur en question :"... java.lang.ClassCastException: rmi.steu.server.EauImpl_Stub cannot be cast to rmi.steu.client.InterfaceEau ..."

Quelqu'un a une idée ?
Configuration: Windows XP
Firefox 1.0.4
Répondre à yozine  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
tibo, le jeudi 28 juin 2007 à 10:42:12
Salut, je galère un peu pour faire tourner RMI avec Eclipse. Un peu d'aide serait grandement appréciée !

J'ai créé deux packages, qui correspondent au client et au serveur de l'appli que je veux distribuer :
STEU_client
STEU_server

le serveur contient:
- InterfaceEau.java (implements Remote)
- EauImp.java (extends UnicastRemoteObject)


{
//...
InterfaceEau serverEau =
(InterfaceEau) Naming.lookup(url);

//...
}
c'est ce que tu as?
c'est marrant qu'il essaye de caster le stub...
tu peux être un plus précis s'il te plaît (un petit bout de code ^^)
Répondre à tibo

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
yozine, le jeudi 28 juin 2007 à 10:53:14
Allez un peu de code pour illustrer:

Dans ce code j'appelle l'objet distant, et il le caste. C'est ce qu'il devrait faire normalement..

package rmi.steu.client;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RMISecurityManager;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;


public class TestRMI extends UnicastRemoteObject {

	private InterfaceEau init;
	private String retourRMI;
	
	public TestRMI() throws RemoteException {
		
		 try {
			   System.setSecurityManager(new RMISecurityManager());
			   init = (InterfaceEau) Naming.lookup("rmi://localhost:1099/communique_etat&quo­t;);
			   
				retourRMI = init.getBonjour();
				System.out.print(retourRMI);
				
			} catch  ...
Répondre à yozine

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
tibo, le jeudi 28 juin 2007 à 11:40:08
c'est ce qui devrait être fait en standart...
le soucis vient peut être du RMISecurityManager
ou du bind, qu'à tu bindé? une instance de EauImp.java

effectivement avec le jdk 1.5 le skeletton n'est plus présent
Répondre à tibo

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
yozine, le jeudi 28 juin 2007 à 18:15:08
ouep voila pour le binding, tout ca c'est dans StartEau, je binde un objet EauImpl :

	 try {
			 java.rmi.registry.LocateRegistry.createRegistry(1099);
			 
		      //System.out.println("Mise en place du Security Manager ...");
		      System.setSecurityManager(new java.rmi.RMISecurityManager());
		      
			 } catch(Exception e) {
				 System.out.print("Un registre RMI est déjà existant.\n\n");
			 }
		
	    try { // enregistre le service
		    Naming.bind("communique_etat", new EauImpl());
		} catch 
Répondre à yozine

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
yozine, le jeudi 28 juin 2007 à 22:18:02
Ca y est, j'ai trouvé le problème.

En fait il faut que le client et le serveur utilisent le même fichier contenant l'interface. Visiblement une copie du fichier contenant l'interface dans le projet client ne suffit pas.

La cause est surement une histoire de 'classloader'. Le top serait que le client loade le fichier contenant l'interface qui se trouve sur le serveur, en utilisant l'url de celui-ci. Il parait que ca se fait. Donc va falloir que je bosse sur le 'classloader' de 'l'interface distante'.

Tout ca pour afficher 'hello'..
Répondre à yozine

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
tibo, le vendredi 29 juin 2007 à 09:50:41
effectivement c'est au niveau du classloader que tu va devoir tout paramétré.

Je crois qu'il y a des choses possibles à faire avec le SecurityManager.

voilà qui pourrait t'aider d'autre part:
http://java.sun.com/docs/books/tutorial/rmi/running.html


N'oublie pas de poster le code de ta solution :)
ça pourra toujours servir par la suite.
Répondre à tibo

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 yozine, le dimanche 1 juillet 2007 à 10:10:44
en fait pour le classloader ca a pas l'air trop complique il y a juste une fonction a appeler je crois, mais faut mettre les classes dans un jar, je crois, ca je sais pas faire, mais bon c pas trop grave.. Je voulais juste savoir comment marche L'appel par RMI, et le faire tourner.

Sinon pour resoudre le truc, j'ai mis un projet commun au projet client et au projet serveur sous Eclipse, et ca marche bien.
Répondre à yozine
Logiciels pertinents trouvés dans les téléchargements
Télécharger Java Runtime Environment 6 Update 7Java Runtime Environment - Java Runtime Environment (JRE) installe la machine virtuelle Java, permettant de jouer en ligne, de discuter avec des...Catégorie: Java
Licence: Open Source
Télécharger GPG 1.4.7GPG - GPG (GNU privacy guard) est une alternative libre au logiciel PGP. Ce logiciel permet de chiffrer des documents avec un haut...Catégorie: Chiffrement
Licence: Open Source
Télécharger RemotePocketAsterisk 1.00RemotePocketAsterisk - RemotePocketAsterisk permet d'afficher en clair les mots de passe masqués par des astérisques sur Windows Mobile. C’est une...Catégorie: Chiffrement
Licence: Freeware/gratuit
Télécharger Remote Shutdown Daemon 1.1Remote Shutdown Daemon - Quand vous gérer plusieurs ordinateur sur un même réseau, il n'est pas très aisé de devoir éteindre tous les postes, donc se...Catégorie: Extensions Firefox
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « [JAVA]Cast de Remote avec RMI »