Mixmar
08-06-2007, 10:00
Salve a tutti,
recentemente mi sono trovato a dover affrontare questo problema: modificare "a runtime" il classpath della mia applicazione Java. Pensate alla situazione classica: un'applicazione che si lancia con una pletora di dipendenze risolte in un numero elevato di jar, tutti in una directory "lib".
Ho trovato su di un forum un suggerimento che per funzionare funziona, però mi da dei dubbi sulla "pulizia" e sulla legittimità di questo strattagemma: il suggerimento viene da qui (http://forum.java.sun.com/thread.jspa?messageID=2233419&tstart=0).
In pratica, si da' per scontato che il classloader di sistema sia un "URLClassLoader" (e già questo non mi piace), e poi si usa la reflection per invocare il metodo (protected!) addURL per aggiungere nuovi elementi al classpath.
L'ho implementato e, come vi dicevo, va: però mi chiedevo se non ci fosse un sistema più pulito. Avrebbe senso/è possibile "sovrascrivere" il class loader di sistema per poter aggiungere dinamicamente le classi da usare?
Credo che Tomcat faccia una cosa simile con le sue librerie, perchè il comportamento finale è proprio quello che ricerco io.
recentemente mi sono trovato a dover affrontare questo problema: modificare "a runtime" il classpath della mia applicazione Java. Pensate alla situazione classica: un'applicazione che si lancia con una pletora di dipendenze risolte in un numero elevato di jar, tutti in una directory "lib".
Ho trovato su di un forum un suggerimento che per funzionare funziona, però mi da dei dubbi sulla "pulizia" e sulla legittimità di questo strattagemma: il suggerimento viene da qui (http://forum.java.sun.com/thread.jspa?messageID=2233419&tstart=0).
In pratica, si da' per scontato che il classloader di sistema sia un "URLClassLoader" (e già questo non mi piace), e poi si usa la reflection per invocare il metodo (protected!) addURL per aggiungere nuovi elementi al classpath.
L'ho implementato e, come vi dicevo, va: però mi chiedevo se non ci fosse un sistema più pulito. Avrebbe senso/è possibile "sovrascrivere" il class loader di sistema per poter aggiungere dinamicamente le classi da usare?
Credo che Tomcat faccia una cosa simile con le sue librerie, perchè il comportamento finale è proprio quello che ricerco io.