View Full Version : Lanciare un'applicaione Java con RMI
Dunque ho fatto stub e skeleton con rmic. Adesso dovrei avviare il registry con rmiregistry... Non ho capito pero' bene come fare... nel senso scrivo da console rmiregistry??? che parametry ci vogliono? e poi.. e' necesario che rimanga la finestra di console dalla quale lancio il comando? dopo aver lanciato il registry, lancio con java Nomeclassemain il programma server come se niente fosse??
esatto.
dal prompt di dos dove lanci rmiregistry non devi avere il classpath settato alla dir che contiene gli stub
devo settare qualcke path?? vi posto il main del server:
final int REGISTRYPORT = 80;
String registryHost = "localhost";
String serviceName = "stackchanger";
try{
if(System.getSecurityManager() == null){
System.setSecurityManager(new RMISecurityManager());
}
String nomeCompleto = "//" + registryHost + ":" + REGISTRYPORT +
"/" + serviceName;
ServerImpl server = new ServerImpl();
Naming.rebind(nomeCompleto,server);
}
catch(Exception e){}
}
va bene?.. io prima compilo il server e cosi' ho server.class, poi faccio rmic server e ho stub e skeleton. Volevo fare una prova sulla macchina locale sulla quale sono ora. Avvio tramite dos rmiregistry scrivendo: rmiregistry 80 (per farlo stare in ascolto sulla 80). Avvio il server scrivendo semplicemente: java nomeserver
poi avvio il client ma alla connessione mi dice: classNotFoundException
c'e' qualke path da settare da qualke parte?
Originariamente inviato da Mazza2
rmiregistry 80 (per farlo stare in ascolto sulla 80). Avvio il server scrivendo semplicemente: java nomeserver
poi avvio il client ma alla connessione mi dice: classNotFoundException
c'e' qualke path da settare da qualke parte?
ma con tutte le porte che ci sono devi andare a prendere quella di default del protocollo piu' utilizzato :muro: :muro:
lascia la sua (1099)
devi settare il classpath come in tutte le applicazioni java....
Originariamente inviato da kingv
ma con tutte le porte che ci sono devi andare a prendere quella di default del protocollo piu' utilizzato :muro: :muro:
lascia la sua (1099)
devi settare il classpath come in tutte le applicazioni java....
e' una storia un po' lunga :sofico: se vedi l'altro mio topic cuqlleo dell'aiuto per un progetto in lan aziendale vedrai che mi lasciano usare solo questa porta :D
settare il classpath di chi? quando lancio il server? ho letto qualcosa sul sito sun riguardo a codebase, ma non ho capito la sintassi del path: va fatto come rtisorsa web, come risorsa locale... mi fai un esempietto? poniamo che ho tutti i file .class del server nella cartella c:\programma\mio programma\
se fai semplicemente:
cd c:\programma\mio programma\
java nome_server
cosa ti dice?
se faccio java nomeserver dalla cartella nel quale e' installato il server parte, non mi vengono segnalati errori e dopo 2 sec il prompt torna normale come se il server terminasse.. ma non dovrebbe rimanere in running in ascolto sulla porta?
Originariamente inviato da Mazza2
se faccio java nomeserver dalla cartella nel quale e' installato il server parte, non mi vengono segnalati errori e dopo 2 sec il prompt torna normale come se il server terminasse.. ma non dovrebbe rimanere in running in ascolto sulla porta?
nel tuo main:
catch(Exception e){}
secondo me finisce qui dentro......
stampa l'eccezione.
access denied (java.net.SocketPermission 127.0.0.1:80 connect,resolve)
e mo che significa? centra qualcosa il fatto che sono in una lan con dominio?non credo..
giusto per provare fai cosi':
crea una file chiamato Mazza2.policy con all'interno:
grant {
permission java.security.AllPermission;
};
e poi quando fai partire il server :
java -Djava.security.policy=Mazza2.policy nome_server
per la soluzione "seria" guarda il tutorial di Sun :O
Connection refused to host: localhost; nested exception is: java.net.ConnectiException: Connection refused: connect
dopo avermi dato questa scritta rimane fermo per 15-20 sec e poi termina...non e' che c'e' qualche impostazione di win che rifiuta connessioni?
Originariamente inviato da Mazza2
Connection refused to host: localhost; nested exception is: java.net.ConnectiException: Connection refused: connect
dopo avermi dato questa scritta rimane fermo per 15-20 sec e poi termina...non e' che c'e' qualche impostazione di win che rifiuta connessioni?
ma e' il server che ti srive questo messaggio?
non hai impostato firewall, vero?
il tcp e' a posto? se fai ping localhost ti risponde correttamente?
dunque.. il server sembrerebbe avviato (nel senso che non vengono + exception e rimane all'infinito fino a che non chiudo la finestra dos)
il client aveva lo stesso problema di non poter accedere alla porta 80. con il file di policy pero' ci riesce anche lui. l'errore che mi da adesso il client e' questo: error unmarshalling return; nested exception is: java.lang.ClassNotFoundException: ServerImpl_stub
in pratica non mi trova lo stub (che e' nella stessa cartella del server...)
ho fatto java -Djava.rmi.server.codebase=file:/cartellaconlostub/ -Djava.security.policy=Mazza2.policy Nomeclasseserver
e il server parte e resta attivo
dopodiche' faccio--> java -Djava.security.policy=Mazza2.policy nomefileclient
quando nel client pero' faccio
ServerImpl server = (ServerImpl)Naming.lookup(nome);
server e' null. e mi crasha..
Non è che hai fatto qualche modifica e ti sei dimenticato di ricreare skeleton e stub?
nono, l'ho rifatto anche adesso.. mi da una nullpointerexception uff:mc:
sono un cretino :sofico:
ServerImpl server = (ServerImpl)Naming.lookup(nome);
l'errore e' nel fatto che facevo il lookup sulla classe che implementa l'interfaccia e non sull'interfaccia :D :D ok ora funge!...
mi sapete dire pero' come farlo partire senza la finestra di dos che e' bruttina da vedere :)
altra domanda... quando col client ho finito di fare quello che voglio.. devo chiudere la connessione tra me e il server? cioe' rmi e' con connessione o no?
usa javaw al posto di java.
RMI registry puoi farlo partire anche dal tuo server (senza digitarlo a mano):
try
{
java.rmi.registry.LocateRegistry.createRegistry(1099);
}
catch (Exception e)
{
e.printStackTrace();
}
Originariamente inviato da Mazza2
altra domanda... quando col client ho finito di fare quello che voglio.. devo chiudere la connessione tra me e il server? cioe' rmi e' con connessione o no?
sì la connessione c'e' ma la gestisce lui, non devi chiudere esplicitamente nulla.
come si fa a dare una serie di comandi da prompt di dos? pensavo si dividessero con dei ;
tipo:
dir; cd\; copy ecc....
Originariamente inviato da Mazza2
come si fa a dare una serie di comandi da prompt di dos? pensavo si dividessero con dei ;
tipo:
dir; cd\; copy ecc....
no quello lo fai in bash :D
che io sappia non si puo', devi creare un bat con un comando per linea.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.