|
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 <classe> 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.
|