morskott
11-02-2008, 20:39
Salve, avrei bisogno di modificare il comportamento standard di java per instanziare classi, il problema è che la macchina dove va ad eseguirsi il server puù non avere disponibile in locale la classe che voglio fargli eseguire ma sa l'indirizzo della macchina remota che ha il .class (la computazione la deve fare la macchina server, quindi niente RMI o cose del genere), la mia idea è quella di ridefinire un nuovo ClassLoader che in caso non trovi la risorsa in locale la vada a scaricare dalla macchina remota, qualcosa del tipopublic class MioClassLoader extends ClassLoader{
private InetAddress indirizzoClient;
provate ClassLoader parent;
public MioClassLoader(ClassLoader parent,InetAddress address){
this.parent=parent;
this.indirizzoClient=address;}
public Class findClass(String name){
if (notLocale(name) recuperaClassDaClient(this.indirizzoClient) //Se il .class non è in locale lo trasferisco dal client
return this.parent.findClass(name);
}
}, a questo punto dovrei sostituire il classloader di default con la mia implementazione, ma non riesco a trovare nessun metodo che mi consenta di farlo (ho spulciato sia la documentazione della classe System che quella del ClassLoader e per finire quella del SecurityManager), come posso fa?
private InetAddress indirizzoClient;
provate ClassLoader parent;
public MioClassLoader(ClassLoader parent,InetAddress address){
this.parent=parent;
this.indirizzoClient=address;}
public Class findClass(String name){
if (notLocale(name) recuperaClassDaClient(this.indirizzoClient) //Se il .class non è in locale lo trasferisco dal client
return this.parent.findClass(name);
}
}, a questo punto dovrei sostituire il classloader di default con la mia implementazione, ma non riesco a trovare nessun metodo che mi consenta di farlo (ho spulciato sia la documentazione della classe System che quella del ClassLoader e per finire quella del SecurityManager), come posso fa?