Динамическая загрузка и выгрузка плагинов во время исполнения программы (Java)?
=================================================================================

 Что сейчас есть:  
  

1) Программа на Java, которая использует Jetty Embedded и висит на определенном порту  
  

2) Плагины к этой программе: набор Java классов в пакетах (они распространяются в jar-файлах без библиотек)  
  
  

Идея:  
  

На главный сервлет поступает команда включить (выключить) плагин. Выполняет нужный метод: при включении все классы jar-файла плагина становятся доступны, при выключении — обратная ситуация.  
  
  

Что удалось нагуглить?  
  
  

Про classpath: что при включении можно расширить classpath на классы в Jar'e плагина.  
  

Про динамическую загрузку классов: с помощью своего class loader.   
  
  

Вопросы:  
  

Реализуема ли идея, путем простой модификации classpath или нет?  
  

Если да, то как будет выглядить выгрузка (то есть удаление путей из classpath)?  
  

Если нет, то есть ли какие-нибудь особенности в реализации Class Loader из Jar файлов.  
  

Как быть с выгрузкой (везде написано, что классы «выгружает» Garbage Collector (но, насколько я помню, GC нельзя вызвать самому, его вызывает JVM, когда нужно).   
  

Тогда еще вопрос: как сделать ситуацию «когда нужно» для классов, которые в Jar'e плагина.  
  
  

Заранее спасибо. 

 Наследуете URLClassLoader, останется сказать откуда брать классы. При загрузке плагина создаёте новый класслоадер и заносите его в свой список доступных класслоадеров, при выгрузке — удаляете из списка.  

  

Когда надо что то сделать ищете (уже не знаю что именно вам нужно — по имени плагина? класса?) нужный класслоадер у себя в списке и создаёте оттуда инстанс нужного класса.  

  

Список класслоадеров держите у себя где нибудь — ServletContext или что нибудь такое  

  

В сети есть не мало статей на эту тему 

 Что бы гибко управлять плагинами лучше использовать OSGi, как тут уже советовали.