OVH Cloud OVH Cloud

PB Corba

2 réponses
Avatar
ali k
Bonjour,
j'ai un petit peu de mal avec les references corba
un petit exemple pour expliquer mon problème :

je veux créer un irc, j'ai un objet distribué "Conference " et des
objets "Participant". Je définis donc les deux interfaces. Je fais la
projection en java de ces interfaces que j'implante.
Sur le serveur, je crée un objet distribué Conférence. Côté client, je
récupére l'objet Conférence, jusque là aucun problème. Je crée ensuite
un participant :
Participant p = new ParticipantImpl(); //ParticipantImpl est
l'implantation de l'interface Participant.
conference.inscrire(p); //inscription du participant à la conférence.
à la compilation, rien n'est signalé, le serveur se lance correctement
tandit que le client se plante en me disant :

Client.java:12: incompatible types
found : IRC.ParticipantImpl
required: IRC.Participant
Participant part = new ParticipantImpl();

ParticipantImpl est pourtant l'implantation de Participant !!

Si vous avez une petite idée ...
D'avance merci.

2 réponses

Avatar
ali k
aJe me répond à moi-même pour ceux qui aurait ce souci :
Il suffisait juste d'activer l'adaptateur d'objet côté client!
simple comme bonjour.
Avatar
Frédéric Lachasse
"ali k" wrote in message
news:cb1q1f$nl0$
Bonjour,
j'ai un petit peu de mal avec les references corba
un petit exemple pour expliquer mon problème :

je veux créer un irc, j'ai un objet distribué "Conference " et des
objets "Participant". Je définis donc les deux interfaces. Je fais la
projection en java de ces interfaces que j'implante.
Sur le serveur, je crée un objet distribué Conférence. Côté client, je
récupére l'objet Conférence, jusque là aucun problème. Je crée ensuite
un participant :
Participant p = new ParticipantImpl(); //ParticipantImpl est
l'implantation de l'interface Participant.
conference.inscrire(p); //inscription du participant à la conférence.
à la compilation, rien n'est signalé, le serveur se lance correctement
tandit que le client se plante en me disant :

Client.java:12: incompatible types
found : IRC.ParticipantImpl
required: IRC.Participant
Participant part = new ParticipantImpl();

ParticipantImpl est pourtant l'implantation de Participant !!

Si vous avez une petite idée ...
D'avance merci.



Les objets "remote" n'existent que sur le serveur. Le client les utilisent à
travers des objets "proxy". Le client ne doivent jamais créer des objets
serveurs directement. C'est le serveur qui va les créer et quand ils sont
retournés au client, la mécanique CORBA (Java RMI-IIOP) va créer un proxy
dans le client pour y accéder.

Ce que tu dois faire, c'est donc de définir une fonction dans l'interface de
Conference pour créer un nouveau Participant dans la conférence et le
retourner au client:

public interface Conference extends Remote
{
...
public Participant newParticipant() throws RemoteException;
...
}

Et l'implémentation sur le server:

public class ConferenceImpl implements Conference
{
private ArrayList list = new ArrayList();
...
public Participant newParticipant() throws RemoteException
{
Participant participant = new ParticipantImpl();
list.add(participant);
return participant;
}
...
}

Côté client:

Participant participant = conference.newParticipant();

L'objet retourné ne sera pas un ParticipantImpl, mais une classe proxy qui
implemente Participant.

--
Frédéric Lachasse - ECP86