Newsgroup: it.comp.java
Titolo: java extreme progragramming

Salve a tutti,
il mio problema è questo, ho due computer collegati in rete, un client
e un server.
Il server rimane in attesa di comandi del client, il mio problema è
che il cliente deve poter caricare del codice sul server in
esecuzione. Esattamente quello che voglio è che carichi delle classi
java contenenti dei metodi che sono stati definiti dal client, magari
su un qualche file che invierà al server, il quale deve essere in
grado a runtime di caricare i nuovi metodi e metterli a disposizione
del client.
Qualcuno sa se ci sono delle classi che mi permettono di fare questto
caricamento runtime di nuovo codice, classi, libreria o quel che sia?

 caricamento runtime di nuovo codice, classi, libreria o quel che sia?
Non bastano dei comuni web services?


RMI permette di migrare anche il codice.
http://java.sun.com/j2se/1.4.2/docs/guide/rmi/codebase.html
Cosa c'entra con l'extreme programming?
-- 
Andrea Francia
FtpServerStub ease your FTP Client unit-testing:
http://andreafrancia.it/ftpserverstub/



tutto si può fare. in questo caso, dovresti scrivere un classloader ad 
hoc che carica la definizione della classe che in qualche modo gli passa 
il client (dentro un jar o altro modo).
ora però toglimi una curiosità: stai partecipando al concorso "il server 
più baldracca del mondo"? :-P

ahahahahaha :p
No sto lavorando ad un progetto di tesi, e mi è stata richiesta
esplicitamente una cosa del genere.
Non sono molto esperto di RMI, sapevo che venisse usato per richiamare
funzioni su oggetti allocati in remoto, ma non credevo permettesse
anche la migrazione del codice.
Stavo vedendo nel sito della sun, proprio la classe ClassLoader ma non
avendola mai utilizzata non sapevo se fosse quella adatta a questo
scopo e volevo ricevere delle conferme a tal proposito. Da quello che
mi dici te però devo creare a parte una classe che mi faccia questo e
che non c'è niente di già sviluppato o sbaglio?
Grazie comunque per l'aiuto, se magari conosci anche qualche link dove
poter prendere qualche spunto e capire meglio come funzionano i class
loader te ne sarei veramente grato.



prova a vedere qui:
http://www.lorenzobettini.it/articoli/clloader/clasload.htm

 anche la migrazione del codice.
La migrazione del codice per definizione si fa con gli agenti mobili, poi  
non so il tuo caso specifico cosa preveda
-- 
Mail to: anforagimailpuntocom²
http://www.hostingjava.it/-SaThot/mail/me

 poi non so il tuo caso specifico cosa preveda
La definizione di chi?
Più che altro saranno gli agenti mobili che si fanno con la migrazione 
del codice.


Caro Andrea, ho visto che nei messaggi precedenti mi parlavi di RMI,
ma RMI non serve sono per chiamare metodi in remoto? Nel senso se io
client voglio aggiungere un metodo che non è definito nelle classi sul
server e quindi non lo posso chiamare in remoto, RMI mi permette anche
di aggiungere nuovi metodi relativi all'oggetto di cui ho il controllo
remoto?
Se si come? perchè non ho trovato niente di specifico relativamente a
questo problema.
I classLoader ad esempio permottono di fare ciò solo che poi perdo
tutte le proprietà di controllo remoto che l'RMI mi permette.
Grazie per l'aiuto

 questo problema.
Questo tutorial spiega come fare:
http://java.sun.com/docs/books/tutorial/rmi/TOC.html
Il tutorial spiega come fare un generico server di esecuzione di Job al 
quale il client può sottoporre dei Job arbitrari.
Il punto fondamentale sta nella system property java.rmi.server.codebase.
Devi fare in modo che java.rmi.server.codebase punti all'URL da dove il 
server può scaricare il bytecode delle classi specificate dal server. Se 
  server e client si trovano sulla stessa macchina allora la URL può 
essere del tipo file:///path/to/bytecode.
Il discorso si complica quando il server non si trova sulla stessa 
macchina del client. In quel caso puoi usare file: solo se entrambe le 
macchine vedono lo stesso file system (magari un disco di rete).
Altrimenti, in questi casi, è comodo mettere il bytecode del client su 
un server http e fornire una url del tipo: 
http://macchina-client/path/to/bytecode/
In questo caso il class loader del server scaricarerà via HTTP il 
bytecode del client.
-- 
Andrea Francia
http://andreafrancia.blogspot.com/2008/07/colinux-linux-dentro-windows.html