Bonjour,
je travail actuellement sur un petit projet client / serveur en RMI mais je suis confronté à un problème majeur.
Je dispose actuellement de la classe (impossible de les modifiers) Service et de son interface IService. IService n'hérite pas d'une autre interface.
Dans un premier temps il met demande d'avoir un temps de vie pour l'objet. J'ai donc rajouter trois classes :
- ServiceTime qui permet de stocker un Service et la dernière date d'appel d'une des méthodes
- ServiceTimeMap en singleton : qui permet de stocker une liste de ServiceTime en fonction d'un ID.
- ServiceTimeInvocationHandler qui implémente InvocationHandler. Cette méthode connais l'ID d'un ServiceTime
Quand je demande à mon programme (pour le moment je ne test pas sur une architecture client / serveur)...
d'instancier je créé un proxy afin d'intercepter les appels des méthodes de Service via la classe
public Object invoke(Object proxy, Method method, Object[] args)
Une fois dans cette méthode je récupère mon objet ServiceTime je compare les dates et si le timeToLive est OK
J'appel ma méthode sinon je retourne une exception.
Jusque là mon programme marche parfaitement.
Dans un seconds temps, je doit donc passer en architecture RMI. Donc le client doit pouvoir utiliser des Services.
Malheureusement, je ne sais pas comment faire sachant que IService n'hérite pas de Remote...
Je pensais
1) faire un proxy encore qui aurait pour interface Remote / IService et Serializable... (De la même façon que le dessus)
2) UnicastRemoteObject.export(.....)
3) un Naming.bind(....)
Mais une fois que j'appel je fais un lookup depuis le client, je récupère bien mon Objet mais malheureusement
il n'implémente plus IService et Seriablizable mais que Remote et quand je tente de caster j'ai un ClassCastException.
Auriez-vous une idée ?
Merci par avance pour votre aide.
Partager