Newsgroup: it.comp.java
Titolo: RMI e Peer to Peer

Salve, sto sviluppando un piccolo programma per il trasferimento di file
via p2p utilizzando java (senno'che scrivevo a fare qui? :D ) RMI...
Il mio problema a quanto ho potuto constatare e'piuttosto comune, ma non
ho trovato una soluzione... il codice "funzionante" attuale mi permette di
fare tutto cio'di cui ho bisogno, ma solo in locale... come si sara'capito
sto facendo a pugni con la sicurezza del registro...
In pratica io creo un registro sul server e poi vorrei fare in modo che
direttamente via RMI il client possa "registrare" i propri file da
condividere, per cui mi prendo un riferimento in locale del server (primo
oggetto iscritto nel registro) e poi faccio bind, unbind e compagnia
bella... come gia'detto tutto cio'funziona solo in locale, perché appena
provo a bindare un file da un client remoto succede il disatro, dato che
mi spunta la classica AccessException che mi dice che tale operazione
e'impossibile via client esterno...
Ho provato a creare un thread che in background sul server gestisce le
richieste pervenute al registry (e quindi bypassa il problema, dato che le
richieste al registro arrivano in "locale"), ma a questo punto mi spuntano
fuori eccezioni riguardanti la serializzazione di oggetti (ma quali?
java.lang.Object e'quanto di piu'generico mi possa essere segnalato... :(
).
Eventualmente potreste segnalarmi qualche editor che integri al suo
interno un debugger? Attualmente utilizzo JCreatorLE...
Se lo ritenete opportuno posso anche uppare su un sito il codice in modo
da farvelo visionare... fatemi sapere...
Grazie. :)
***************************************
messaggio inviato tramite HostSearch.it
---------------------------------------
---> 
http://www.hostsearch.it/newsgroup
***************************************

Nella cartella \SDK\jre\lib\security\ c'è un file chiamato java.policy,
contenente i permessi all'interno di un blocco grant{...}.
Penso tu stia usando una versione antecedente all'SDK 1.4, per cui
non ti è necessario specificare i permessi per l'host locale.
Qua di seguito ci sono quelli che ho dovuto inserire io con la nuova
versione del kit, per fare delle connessioni RMI da localhost a localhost.
"1024-" significa "dalla porta 1024 in su". Tu dovresti specificare
l'indirizzo
dal quale provengono e al quale si inviano le varie richieste.
 permission java.net.SocketPermission "localhost:1024-", "listen";
 permission java.net.SocketPermission "localhost:1024-", "accept";
 permission java.net.SocketPermission "localhost:1024-", "connect";
 permission java.net.SocketPermission "localhost:1024-", "resolve";
 permission java.lang.RuntimePermission "setFactory";
 permission java.util.PropertyPermission "*", "read";
 permission java.util.PropertyPermission "*", "write";
Spero di esserti stato d'aiuto.

 Nella cartella SDKjrelibsecurity c'è un file chiamato java.policy,






Uso il JDK 1.4.? (comunque 1.4)...
Ora (oggi) provo, ma non credo sia questo il problema... oppure ho capito
male...
Dico questo perche'non mi si presenta il problema di dover connettere
localhost a localhost, dato che i 2 PC su cui sperimento il codice sono
regolarmente connessi in rete tra loro ed hanno name ed IP configurati da
Windows...
Ad esempio su "A" posso avviare sia una sessione server che una client
senza problemi... il tutto funziona alla perfezione... il problema arriva
quando ad esempio da "B" avvio un client per connettermi al server su
"A"... il lookup del registro funziona, ma il bind/unbind per registrare i
files no :( (spunta la gia'citata AccessException)...
Come gia'detto nel primo post ho provato a bypassare il problema con un
thread sul lato server che gestisce in locale le chiamate al registro, ma
a questo punto ho problemi di serializzazione (che sinceramente non so
neanche da dove vengano... provenienza dell'eccezione: java.lang.Object...
si, ma quale caxxo di oggetto da 'sto problema?).
Ciao e grazie dell'interessamento...


 Windows...
Appunto... io facevo le prove su un solo PC, quindi ho dovuto mettere
localhost dappertutto... tu devi mettere gli indirizzi delle macchine tra
cui avviene la connessione. Comunque, quando viene generata una
AccessControlException, la macchina virtuale specifica quale permesso
non è stato trovato. In ogni caso, RMI mi ha fatto dannare per settimane
e, tuttora, non sono riuscito a settare la policy nel caso di oggetti
attivabili. Penso sia necessario, prima di usare l'invocazione remota in
modo serio, studiarsi un manuale sulla gestione della sicurezza.

Ho abbandonato l'idea...
Ora procedo diversamente... mando un normale oggetto/struttura via TCP che
rappresenta nome e chincaglieria varia del file da condividere al
server... sara'lui che si preoccupa di aggiungere il file al registro...
E'un peccato perche'se fosse stato possibile far registrare i files
direttamente dai client sarebbe stata una gran figata... peccato...
Sai percaso dove trovare tutorial e/o documentazione per costruirsi un
gestore RMI proprio? Va bene anche in inglese... te lo chiedo perche'a
ripensarci mi dispiace veramente di non poter bindare direttamente dal
client :(((
Ciao e grazie dell'aiuto...
P.S. Il fatto di modificare la policy semplicemente "non mi e'permesso" da
motivazioni dall'alto ;)
