refused problema net information hamachi further error caused java networking rmi

problema - minecraft java net connectexception connection refused no further information hamachi



RMI y excepciones (4)

Quiero poder lanzar una excepción sobre RMI (¿es esto posible?)

Sí. Cualquier cosa puede ser serializada, incluso excepciones. Creo que la propia excepción implementa Serializable.

Tengo un servidor simple que sirve a los estudiantes y tengo un método de eliminación que, si el estudiante no existe, quiero lanzar una excepción personalizada de StudentNotFoundException que extienda RemoteException (¿es bueno hacerlo?)

Tendría que extender la excepción personalmente. Sus excepciones son sus excepciones y RemoteExceptions son para cosas que van mal con RMI por motivos de conectividad.

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

Quiero poder lanzar una excepción sobre RMI (¿es esto posible?)

Tengo un servidor simple que sirve a los estudiantes y tengo un método de eliminación que, si el estudiante no existe, quiero lanzar una excepción personalizada de StudentNotFoundException que extienda RemoteException (¿es bueno hacerlo?)

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

Método de interfaz del 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 del 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 me las arreglé para solucionar mi problema y me di cuenta de que extender RemoteException era una mala idea.


Está bien lanzar cualquier tipo de excepción (incluso las personalizadas), solo asegúrate de empaquetarlas en tu archivo .jar de exportación (si estás usando una versión de Java en la que necesitas hacerlo manualmente).

Sin embargo, yo no subclase RemoteException. Estos se suelen lanzar si hay algún tipo de problema de conexión. Presumiblemente, su cliente manejará los problemas de conexión de manera diferente a otros tipos de problemas. Podría 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.


No hay necesidad de que sus excepciones extiendan RemoteException .

(Vale la pena señalar que los tipos de excepción concretos que se lanzan deben estar en las bases de código utilizadas tanto por el servidor como por el cliente).


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 de comunicación remota, como una falla de la red. Use una excepción apropiada, extendiendo java.lang.Exception usted mismo si es necesario.

Para una explicación más detallada, mira otra de mis respuestas . En pocas palabras, tenga cuidado al encadenar las excepciones cuando use RMI.