RMI et les exceptions
Je suis nouveau à l'aide du RMI et je suis relativement nouveau à l'aide d'exceptions.
Je veux être en mesure de lever une exception de plus de RMI (est-ce possible?)
J'ai un simple serveur qui sert des élèves et j'ai supprimer la méthode qui, si l'étudiant n'existe pas, je veux lancer une exception personnalisée de StudentNotFoundException qui s'étend RemoteException (est-ce une bonne chose à faire?)
Des conseils ou des conseils seraient grandement appréciés.
Serveur la méthode de l'Interface
/**
* Delete a student on the server
*
* @param id of the student
* @throws RemoteException
* @throws StudentNotFoundException when a student is not found in the system
*/
void removeStudent(int id) throws RemoteException, StudentNotFoundException;
Serveur méthode de la mise en œuvre
@Override
public void removeStudent(int id) throws RemoteException, StudentNotFoundException
{
Student student = studentList.remove(id);
if (student == null)
{
throw new StudentNotFoundException("Student with id:" + id + " not found in the system");
}
}
Client méthode
private void removeStudent(int id) throws RemoteException
{
try
{
server.removeStudent(id);
System.out.println("Removed student with id: " + id);
}
catch (StudentNotFoundException e)
{
System.out.println(e.getMessage());
}
}
StudentNotFoundException
package studentserver.common;
import java.rmi.RemoteException;
public class StudentNotFoundException extends RemoteException
{
private static final long serialVersionUID = 1L;
public StudentNotFoundException(String message)
{
super(message);
}
}
Merci pour votre réponse, j'ai maintenant réussi à résoudre mon problème et s'est rendu compte que l'extension de l'RemoteException était une mauvaise idée.
OriginalL'auteur Malachi | 2009-03-04
Vous devez vous connecter pour publier un commentaire.
C'est OK pour lancer toute sorte d'exception (même ceux personnalisées), assurez-vous de bien les emballer dans votre exportation .fichier jar (si vous utilisez une version de Java où vous avez besoin de le faire manuellement).
Je ne voudrais pas sous-classe RemoteException. Ceux-ci sont généralement jetés si il y a une sorte de problème de connexion. Sans doute, votre client va traiter des problèmes de connexion différemment des autres types de problèmes. Vous pourriez dire à l'utilisateur que le serveur est en panne lorsque vous attrapez un RemoteException, ou de se connecter à un autre serveur. Pour StudentNotFoundException, vous voulez probablement pour donner à l'utilisateur une autre chance à saisir l'étudiant en info.
OriginalL'auteur Outlaw Programmer
Oui, il est possible de lancer des exceptions via RMI.
Non, ce n'est pas une bonne idée d'élargir
RemoteException
de rapport d'erreurs d'application.RemoteException
signaux d'une défaillance dans le remoting mécanisme, comme une défaillance du réseau. Utiliser une exception appropriée, l'extension dejava.lang.Exception
vous-même si nécessaire.Pour une explication plus détaillée, regarder un autre de mes réponses. En un mot, soyez prudent à propos de l'enchaînement des exceptions lors de l'utilisation de RMI.
J'ai effectivement regardé ça avant de poster. Bravo pour les conseils je pense que j'ai le problème résolu maintenant
OriginalL'auteur erickson
Oui. Tout peut être sérialisé, même des exceptions. Je pense que l'Exception elle-même implémente Serializable.
Je l'aurais étendre Exception personnellement. Vos exceptions sont vos exceptions, et RemoteExceptions sont des choses qui vont mal avec le RMI pour des raisons de connectivité.
Darn. Je savais que!
OriginalL'auteur banjollity
Il n'est pas nécessaire pour vos exceptions à étendre
RemoteException
.(Il est intéressant de noter que le béton les types d'exception jeté besoin d'être dans des bases de codes utilisés par le serveur et le client.)
OriginalL'auteur Tom Hawtin - tackline