Che cosa è un java.rmi.RemoteException?

February 5

Che cosa è un java.rmi.RemoteException?


programmatori Java spendono molto del loro tempo di sviluppo pianificare la gestione delle eccezioni del caso, da eccezioni che sorgono nelle biblioteche che utilizzano per la pianificazione che faranno eccezioni generano con il proprio codice. Mentre la maggior parte offerte di codice Java con eccezioni comuni, in modo tale che derivano da errori di file o riferimenti nulli, il RemoteException viene meno comunemente incontrata. Come tale, è difficile per i programmatori Java per ottenere una solida conoscenza di quando è gettato e che cosa potrebbe significare.

Un po 'di storia su Remoting

Remoting è una delle "arti oscure" della programmazione a un sacco di sviluppatori. In realtà, è facile per gli sviluppatori di passare attraverso un'intera carriera senza preoccuparsi di esso. I dettagli sono piuttosto brutta, ma l'essenza di esso è semplice: un programma su un computer chiama il codice su un altro computer.

Per facilitare un po 'di discussione, il termine "client" farà riferimento all'applicazione del programmatore sta sviluppando, e "server" si riferiscono all'applicazione del programmatore sta comunicando con.

Uno sguardo a come Java Remoting Opere

I dettagli di scrivere un programma Java che esegue i servizi remoti sono oltre la portata di questo articolo, ma i concetti di base sono la pena di copertura. Un oggetto remoto è rappresentato da una interfaccia. Lo sviluppatore ottenere un'istanza dell'interfaccia e chiamare un metodo su di esso.

Questa chiamata invierà la richiesta al server, che elabora i parametri (e restituire un risultato, se necessario). Il processo di invio di oggetti / parametri da e verso il server si chiama "smistamento", e il processo di prendere i dati di marshalling e la traduzione di nuovo a oggetti utilizzabili si chiama "unmarshalling".

Le cause

Naturalmente, le cose possono sempre andare male. Forse un programma chiama una funzione che non esiste su un altro computer. Ad esempio, se si tenta di chiamare a.foo () utilizzando RMI, e la versione sul computer che stai comunicando con non ha a.foo () definita, le cose si inceppano. Un'altra possibilità è che un errore sul programma server, come un problema di connessione al database.

Quando questo accade, si otterrà una RemoteException o una delle sue sottoclassi.

Sapori di RemoteException

Ci sono diverse sottoclassi di RemoteException per gestire varie situazioni che possono verificarsi (vedere la sezione Risorse per un elenco completo delle sottoclassi). Ad esempio, se si verifica un problema, mentre smistamento o unmarshalling degli oggetti, un MarshalException o UnmarshalException verrà gettato rispettivamente. Se si verifica un'eccezione che non viene dichiarata in firma chiamata del metodo (cioè, una eccezione di runtime incontrollato), un UnexpectedException sarà gettato - questo potrebbe essere un NullPointerException sul lato server, per esempio.

Gestione RemoteException

Mentre generale pratica Java consiglia di prendere il caso più specializzato di un'eccezione, questo può essere difficile da raggiungere quando si lavora con RMI. Ci sono troppi potenziali eccezioni da considerare quando si esaminano le varie sottoclassi RemoteException che si occupano di loro singolarmente probabilmente non vale la pena.

Detto questo, uno sviluppatore può concentrarsi su potenziali aree problematiche che possono essere più o meno evidenti durante lo sviluppo. Per esempio, nel primo tentativo di una chiamata di metodo remoto (forse inizializzazione dell'applicazione), lo sviluppatore può provare a gestire un UnknownHostException in maniera speciale. Un'altra possibilità potrebbe essere un gestore di RemoteException generica che potrebbe intraprendere azioni diverse in base l'eccezione specifica incontrato.