Witam.
Zastanawiam się jak zrobić desktopową aplikację, której działanie i przeznaczenie było by całkowicie uzależnione od załadowanych pluginów.
Uruchomiłem taki przykład jak stworzyć aplikację opartą o pluginy:
http://www.solitarygeek.com/java/a-simple-pluggable-java-application/
generalnie to dodawanie nawet całych aplikacji jako pluginy okazało się proste :)
Ale do rzeczy. Problemem jest by aplikacja zawsze działała, a jednocześnie można było aktualizować jej główny moduł. O ile poszczególne komponenty są "wyczepialne" ( w zamyśle wiem jak to zrobić ) to nie mam pojęcia jak podmieniać na gorąco główny moduł.
Chodzi mi po głowie coś takiego.
- Mam moduł główny A01
- tworzę moduł A02 jako aktualizację i ładuje go jako plugin do A01 (jak zwykły plugin lub osobnym kanałem)
- jak A02 ma przejąć kontrolę i wyłączyć moduł A01, by można go było bezpiecznie usunąć?
Javą głębiej interesuję się od niedawna i nie bardzo wiem jak to rozwiązać.
Mój pomysł:
- uruchomienie modułu A02 jako osobnego wątku ( wystarczy zwykły, czy jakiś specjalny?)
- przejęcie wszystkich informacji o załadowanych modułach metodą: pojedynczo włączam w A02 i wyłączam w A01 (na raz mogło by pewnie nieźle zamulić)
- wyłączenie wątku odpowiedzialnego za istnienie modułu A01, tyle że tak by nie nastąpiło razem z nim wyłączenie wątku A02
Mam wyjątkowo blade pojęcie jak się do tego zabrać. Prosiłbym o jakieś wskazówki, pomysły, przemyślenia ...gotowy kod ;P