Domanda

Sono nuovo nell'uso dell'RMI e relativamente nuovo nell'uso delle eccezioni.

Voglio essere in grado di generare un'eccezione su RMI (è possibile?)

Ho un server semplice che serve studenti e ho un metodo di eliminazione che se lo studente non esiste voglio lanciare un'eccezione personalizzata di StudentNotFoundException che estende RemoteException (è una buona cosa da fare?)

Qualsiasi consiglio o orientamento sarebbe molto apprezzato.

Metodo interfaccia server

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

Implementazione del metodo server

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

Metodo client

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

Grazie per la tua risposta, ora sono riuscito a risolvere il mio problema e ho capito che estendere RemoteException era una cattiva idea.

È stato utile?

Soluzione

Va ??bene lanciare qualsiasi tipo di eccezione (anche personalizzata), assicurati di impacchettarli nel tuo file .jar di esportazione (se stai usando una versione di Java dove devi farlo manualmente).

Non vorrei sottoclasse RemoteException, comunque. In genere vengono generati in caso di problemi di connessione. Presumibilmente, il tuo client gestirà i problemi di connessione in modo diverso da altri tipi di problemi. È possibile indicare all'utente che il server non è attivo quando si rileva RemoteException o si connette a un altro server. Per StudentNotFoundException, probabilmente vuoi dare all'utente un'altra possibilità di inserire le informazioni dello studente.

Altri suggerimenti

Sì, è possibile generare eccezioni tramite RMI.

No, non è una buona idea estendere RemoteException per segnalare errori dell'applicazione. RemoteException segnala un errore nel meccanismo di remoting, come un errore di rete. Utilizzare un'eccezione appropriata, estendendo java.lang.Exception se necessario.

Per una spiegazione più dettagliata, guarda un altro dei miei risposte . In poche parole, fai attenzione a concatenare le eccezioni quando usi RMI.

  

Voglio essere in grado di generare un'eccezione su RMI (è possibile?)

Sì. Tutto può essere serializzato, anche eccezioni. Penso che l'eccezione stessa implementa Serializable.

  

Ho un server semplice che serve studenti e ho un metodo di eliminazione che se lo studente non esiste voglio lanciare un'eccezione personalizzata di StudentNotFoundException che estende RemoteException (è una buona cosa da fare?)

Vorrei estendere l'eccezione personalmente. Le tue eccezioni sono le tue eccezioni e RemoteExceptions sono per cose che vanno male con RMI per motivi di connettività.

Non è necessario che le tue eccezioni estendano RemoteException .

(Vale la pena notare che i tipi di eccezione concreti generati devono trovarsi in codebase utilizzate sia dal server che dal client.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top