ePrometeusCorsoJavaJava
testi articoli
Testi Articoli  Download
Home | Eshop | Java | Tools | Web | 
CorsoJava è ora Video! Free for all!
Clicca Qui!

RMI IN PRATICA
RMI in pratica
RMI e i browser
L’intefaccia remota
Serializzazione dei parametri
L’implementazione
Importare l’oggetto
Compilazione e avvio
Conclusioni
L'Autore

<<< Compilazione e avvio >>>

Abbiamo riscontrato qualche dolente nota avviene in fase di compilazione e avvio. Innanzitutto, non basta definire il client e il server, occorre anche generare le classi stub e skel, reverse.ReverseImpl_Stub e reverse.ReverseImpl_Skel. A costruirle pensa il compilatore rmic ma sembra non volerne sapere di funzionare (almeno quello che avevamo noi) senza specificare esplicitamente sulla riga di comando sia il classpath che la directory di destinazione. Ecco il batch che abbiamo utilizzato e che ci ha portato a generare dopo innumerevoli tentativi le classi nella directory di destinazione corretta:

set JHOME=d:\jbuilder\java %JHOME%\bin\javac reverse\*.java %JHOME%\bin\rmic -d . -classpath .;%JHOME%\lib\classes.zip reverse.ReverseImpl

Il batch tradisce che abbiamo utilizzato il JBuilder, col quale è compreso il JDK 1.1.2, ma funziona pure con il JDK 1.1.3. Come parametro per rmic occorre specificare la classe dell’oggetto server, specificato come nome di classe. Il risultato della compilazione è la comparsa delle due classi Stub e Skel nella sottodirectory reverse, dove devono stare. Se non si specifica -d . le classi compaiono nella directory corrente! Misteri di Sun...
Dunque abbiamo tutto, possiamo far partire il server. Prima, però del server occorre avviare il registro di oggetti remoti, rmiregistry. Siamo incappati in due nuovi problemi. Primo problema: il programma server non parte se non si imposta esplicitamente il classpath. Normalmente col JDK 1.1, digitando java &ltclasse> il classpath viene ricavato direttamente dall’interprete, senza doversene preoccupare. Invece java reverse.RemoteServer termina dichiarando che non trova la classe Skel.
Il problema non siamo riusciti a definirlo con esattezza, comunque la soluzione è stata anche questa volta di definire esplicitamente il classpath con uno switch sulla riga di comando. Ma non è finita qui. Dovendo attivare sia il rmiregistry che il programma, ci è sembrato naturale inserire in un batch sia l’avvio del registry che l’avvio del server. Invece il sistema si pianta. Dopo vari tentativi abbiamo capito che il problema si verifica se il server parte troppo presto. Probabilmente il registry fa delle inizializzazioni, e se, prima che terminino, un oggetto tenta di registrarsi, succede il finimondo. La soluzione, banale, è quella di fare una pausa dopo l’avvio del registry.

ePrometeus s.r.l. - Web Software House & Open Source System Integrator
MILANO - SAN BENEDETTO DEL TRONTO(AP)
Contatti: info@eprometeus.com