2009-03-04 10 views
16

Soy nuevo en el uso de RMI y soy relativamente nuevo en el uso de excepciones.RMI y excepciones

quiero ser capaz de lanzar una excepción sobre RMI (¿es esto posible?)

Tengo un servidor simple que sirve a los estudiantes y tengo que eliminar método que si el estudiante no existe Quiero lanzar una excepción personalizada de StudentNotFoundException que extiende RemoteException (¿es esto una buena cosa que hacer?)

Cualquier consejo u orientación sería muy apreciado.

método de interfaz de servidor

/** 
* 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; 

implementación del método de servidor

@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"); 
    } 
} 

método de cliente

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); 
    } 
} 

Gracias por su respuesta, ahora he solucionado mi problema y me di cuenta de que la extensión de RemoteException era una mala idea.

Respuesta

11

Está bien lanzar cualquier tipo de excepción (incluso las personalizadas), solo asegúrese de empaquetarlas en su archivo .jar de exportación (si está usando una versión de Java donde debe hacerlo manualmente).

Sin embargo, no crearía la subclase RemoteException. Por lo general, se lanzan si hay algún tipo de problema de conexión. Presumiblemente, su cliente manejará los problemas de conexión de forma diferente a otros tipos de problemas. Puede decirle al usuario que el servidor está inactivo cuando detecta una excepción remota o se conecta a un servidor diferente. Para StudentNotFoundException, es probable que desee darle al usuario otra oportunidad de ingresar la información del estudiante.

2

No es necesario que sus excepciones se extiendan RemoteException.

(Vale la pena señalar que los tipos de excepciones concretas arrojados necesidad de estar en bases de código utilizados por el servidor y el cliente.)

5

Sí, es posible lanzar excepciones a través de RMI.

No, no es una buena idea extender RemoteException para informar fallas en la aplicación. RemoteException señala una falla en el mecanismo remoto, como una falla de la red. Use una excepción apropiada, extendiéndose el java.lang.Exception si es necesario.

Para una explicación más detallada, look at another of my answers. En pocas palabras, tenga cuidado de encadenar excepciones al usar RMI.

+0

¡Heh, esa pregunta parece familiar! –

+0

De hecho miré esto antes de publicarlo. Saludos por el consejo: creo que ya resolvió el problema – Malachi

2

Quiero ser capaz de lanzar una excepción sobre RMI (¿es esto posible?)

Sí. Cualquier cosa puede ser serializada, incluso excepciones. Creo que Exception implementa Serializable.

tengo un servidor simple que sirve a los estudiantes y tengo que eliminar método que si el estudiante no existe Quiero lanzar una excepción personalizada de StudentNotFoundException que se extiende RemoteException (esta es una buena cosa que hacer?)

Me gustaría que extienda la excepción personalmente. Sus excepciones son sus excepciones, y RemoteExceptions son para cosas que salen mal con RMI por razones de conectividad.

+0

El compilador requiere que se capture primero la excepción más específica; tu ejemplo no se compilará De lo contrario, buena publicación. –

+0

Maldita sea. ¡Lo sabía! – banjollity