From: "Herve AGNOUX" <hagnoux@mail.club-internet.fr>
To: java@u-strasbg.fr
Date sent: Tue, 8 Feb 2000 22:13:11 +0100
Subject: dilemme RMI - exceptions
Priority: normal
Send reply to: java@u-strasbg.fr
Lorsqu'une Exception apparaît sur un serveur RMI, nous dit la doc,
il l'emballe dans une java.rmi.ServerException.
Si ma propre méthode distante emballe elle même les exceptions
dans un ServerException, le serveur - je ne sais pas qui
exactement - la réemballe dans une nouvelle ServerException. Mon
exception perso se retrouve donc emballée deux fois.
Donc je n'emballe pas mes exceptions. Mais alors il faut que je les
déclare dans la clause throws de la méthode distante.
Malheureusement je ne peux pas modifier l'interface distant.
Et puis, qu'est ce que mon client recevrait exactement ? Si dans
l'interface distant je déclare "throws PersoException" pour que je
puisse la laisser passer du coté de mon implémentation serveur,
que ce serveur me l'emballe dans un ServerException, le client
recevra une ServerException alors que le client à renvoyé une
PersoException ?
Est-ce que je suis clair, est ce que vous comprenez mon dilemme
? Connaissez-vous la solution ?
--
Hervé AGNOUX hagnoux@mail.club-internet.fr
Faites vos sites avec des formulaires electroniques :
http://www.diaam.com
From: "Olivier Richaud" <richaud@cstb.fr>
To: <java@u-strasbg.fr>
Subject: Re: dilemme RMI - exceptions
Date sent: Wed, 9 Feb 2000 10:03:21 +0100
Organization: CSTB
Send reply to: java@u-strasbg.fr
> Lorsqu'une Exception apparaît sur un serveur RMI, nous dit la doc,
> il l'emballe dans une java.rmi.ServerException.
Non, ce n'est le cas si le serveur leve java.rmi.RemoteException.
L'exception java.rmi.ServerException est une sous class de
java.rmi.RemoteException.
>
> Si ma propre méthode distante emballe elle même les exceptions
> dans un ServerException, le serveur - je ne sais pas qui
> exactement - la réemballe dans une nouvelle ServerException. Mon
> exception perso se retrouve donc emballée deux fois.
Non, toi tu definis dans ton interface une liste d'exception contenant tes
exceptions et au moins java.rmi.RemoteException. Et sur ton serveur tu
leves ton exception comme dans tous les programmes Java. L'empaquetage
n'est pas ton affaire, laisse ca a RMI.
>
> Donc je n'emballe pas mes exceptions. Mais alors il faut que je les
> déclare dans la clause throws de la méthode distante. Malheureusement je
> ne peux pas modifier l'interface distant.
Alors, la tu ne peux rien faire d'autre que de lever des
java.rmi.RemoteException. Tu as un contructeur ou tu peux mettre une
chaine de caracteres et une exception (un Throwable en fait).
>
> Et puis, qu'est ce que mon client recevrait exactement ? Si dans
> l'interface distant je déclare "throws PersoException" pour que je
Il recevrait des PersoException. Ca tombe bien, hein :-)
> puisse la laisser passer du coté de mon implémentation serveur,
> que ce serveur me l'emballe dans un ServerException, le client
> recevra une ServerException alors que le client à renvoyé une
Ca doit plutot etre du serveur...
> PersoException ?
Tu es en train de te poser des questions alors que RMI est fait pour
resoudre ces memes questions. Tu leves une "user exception" sur le
serveur. RMI intercepte dans son squelette, la transcrit en JRMP pour la
passer sur le reseau. Le stub cote client recoit, desemballe, et leve la
bonne exception du bon type, meme si c'est PersoException.
>
> Est-ce que je suis clair, est ce que vous comprenez mon dilemme
> ? Connaissez-vous la solution ?
>
>
> --
> Hervé AGNOUX hagnoux@mail.club-internet.fr
> Faites vos sites avec des formulaires electroniques :
> http://www.diaam.com
>
From: "Herve AGNOUX" <hagnoux@mail.club-internet.fr>
To: java@u-strasbg.fr
Date sent: Wed, 9 Feb 2000 11:06:58 +0100
Subject: Re: dilemme RMI - exceptions
Priority: normal
Send reply to: java@u-strasbg.fr
Merci ! Cela marche déjà mieux si l'on fait simplement les choses
simples ! Encore juste une remarque, si cela ne vous dérange
pas...
Le 9 Feb 00, Olivier Richaud a écrit :
> > Lorsqu'une Exception apparaît sur un serveur RMI, nous dit la doc, il
> > l'emballe dans une java.rmi.ServerException.
>
> Non, ce n'est le cas si le serveur leve java.rmi.RemoteException.
> L'exception java.rmi.ServerException est une sous class de
> java.rmi.RemoteException.
>
Justement, si ServerException est une sous classe de
RemoteException il ne devrait pas me la réemballer ?! Or d'aprés
mes essais, il le fait ? C'et moi qui me suis complètement perdu ?
--
Hervé AGNOUX hagnoux@mail.club-internet.fr
Faites vos sites avec des formulaires electroniques :
http://www.diaam.com
From: "Olivier Richaud" <richaud@cstb.fr>
To: <java@u-strasbg.fr>
Subject: Re: dilemme RMI - exceptions
Date sent: Wed, 9 Feb 2000 11:51:40 +0100
Organization: CSTB
Send reply to: java@u-strasbg.fr
Olivier Richaud
CSTB
office: +33 4 93 95 67 24
mobile: +33 6 87 52 53 17
www: http://cic.cstb.fr
----- Message d'origine -----
De : Herve AGNOUX <hagnoux@mail.club-internet.fr>
À : <java@u-strasbg.fr>
Envoyé : mercredi 9 février 2000 11:06
Objet : Re: dilemme RMI - exceptions
> Merci ! Cela marche déjà mieux si l'on fait simplement les choses
> simples ! Encore juste une remarque, si cela ne vous dérange
> pas...
>
> Le 9 Feb 00, Olivier Richaud a écrit :
>
> > > Lorsqu'une Exception apparaît sur un serveur RMI, nous dit la doc,
> > > il l'emballe dans une java.rmi.ServerException.
> >
> > Non, ce n'est le cas si le serveur leve java.rmi.RemoteException.
> > L'exception java.rmi.ServerException est une sous class de
> > java.rmi.RemoteException.
> >
>
> Justement, si ServerException est une sous classe de
> RemoteException il ne devrait pas me la réemballer ?! Or d'aprés
> mes essais, il le fait ? C'et moi qui me suis complètement perdu ?
>
C'est tout a fait normal. Si par exemple dans une de tes methodes de ton
serveur tu leves RemoteException, le squelette genere par RMIC empequete
ca dans une ServerException pour montrer a ton client que l'exception
vient du serveur. Ni plus ni moins. Par contre, sur le client tu peux
recuperer l'exception initiale :
...
} catch(RemoteException re) {
// c'est l'exception initialement levee sur le serveur est qui est du
type RemoteException
Throwable t = re.detail;
}