Bonjour,

J'ai une application utilisant RMI ; donc coté serveur une logique métier, et client client de simples appels.

Voici mon code :

Serveur :
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
 
public class SecurityServiceImpl extends ServiceImpl implements SecurityService {
 
        private List<User> connectedUser;
 
	public User connect(String userName, String password) throws AlreadyLoggedException, LoginFailedException, RemoteException {
 
		for(User user : connectedUser ) {
			if ( user.getUserName().equals(userName) ) {
				throw new AlreadyLoggedException();
			}
		}
 
 
		User user = new UserImpl();
		user.setUserName(userName);
		user.setPassword(password);
 
		...
 
		connectedUser.add(user);
 
		return user;
	}
 
       @Override
	public void disconnect(User user) throws NotConnectedException, RemoteException {
		if ( !isConnected(user) ) {
			throw new NotConnectedException();
		}
 
		connectedUser.remove(user);
	}
}
SecurityServiceImpl étend UnicastRemoteObject
SecurityService implémente Remote
User implémente Remote
UserImpl étend UnicastRemoteObject
Voici le code client :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
 
SecurityService rmiService = (RMIService) Naming.lookup(urlService);
 
User myUser  = securityService.connect("test","test");
securityService.disconnect(myUser);
Problème : la fonction connectedUsers.remove() ne fonctionne pas. J'ai remarqué qu'elle utilisait la méthode equals() pour trouver l'élement à supprimer, hors c'est la méthode equals() du stub de l'objet User qui est appelée, et non la méthode UserImpl.equals(). Donc c'est tout à fait normal qu'il n'arrive pas à trouver l'objet dans la liste.
Initialement connectedUsers était un Set<User>, qui utilise la méthode hashCode(), et j'ai eu le même problème (c'est la méthode hashCode du Proxy qui est appelé, et non celle de l'objet sur le serveur)...

Comment je dois faire pour utiliser des objets qui font des allés retour via rmi entre le client et le serveur ?

Merci