[Java] Dynamiczne dołączanie bibliotek

0

Witam,

chciałem wprowadzić do swojego programu modularyzację i mam problem. Moja wizja jest następująca:
Mam w katalogu głownym plik wykonywalny JAR mojego programu oraz plik config.txt, w którym będę dopisywał polecenia ładowania poszczególnych modułów. W jakimś podkatalogu będą biblioteki java (moduły). I teraz przy starcie program czyta polecenia z pliku config.txt i odpowiednio ładuje moduły (tworzy instancje klas znajdujących się w bibliotekach). Chodzi mi o to żebym mógł sobie wstawiać nowe biblioteki bez ponownego kompilowania całego programu. Ktoś ma pomysł jak stworzyć obiekt klasy znajdującej się w osobnym JAR'e?

0

Na moje to Twoje rozwiazanie wyglada na to samo co robi classpath.

0

Nie mam w tym doświadczenia, ale poszedł bym w tym kierunku:

0

Jeśli dobrze rozumiem to, co zamierzasz, mk761203 dobrze mówi...
Musisz je dodać do classpath programu przed odpaleniem, ale żeby użyć tego, co jest w tych bibliotekach, albo musiałbyś rekompilować, albo odpalać to przez reflection api ...

0

A popatrz sobie na coś co nazywa się OSGi. Łatwiej, prościej i większe możliwości.

0

OSGI jest "prostsze i latwiejsze" niz podanie jarow w classpath? Wolne zarty. A jak pozniej wywolasz klasy z takiego jara? Rowniez kompilujesz z interfejsami a pozniej refleksja. OSGI to nie zadne czary, a tutaj ich nie potrzeba, z tego co widac gosciu chce zduplikowac classpath.

0

@::., przeczytaj o co dokładnie chodzi. Zadanie polega na dynamicznym doładowaniu modułów już po wystartowaniu programu. Inaczej mówiąc w pierwszym kroku na podstawie pliku config.txt wczytujemy listę jarów. Metoda kiepska. Dynamiczne ładowanie jarów ma dużo wad w dodatku można zrobić to bardziej elegancko. Na pierwszy ogień budowanie classpath i Class.forName. Nie za dobrze, bo trzeba znać nazwy głównych klas modułów. Czyli znowu jakiś plik konfiguracyjny.
Druga metoda użycie Services > Własne usługi w JSE fajnie. Działa, można wrzucić sobie jary w jedno miejsce i ładować przy starcie. Nadal jednak brakuje elementu dynamicznego pozwalającego na doładowanie jara bez restartu. Odpalamy zatem OSGi i mamy pełną funkcjonalność o jaka nam chodzi. Fakt na początku trzeba zmienić sposób myślenia o ładowaniu aplikacji oraz można się zamotać z konfiguracją bundli, ale później jest już znacznie łatwiej.

0

@Koziołek - chcesz ruszać takiego potwora jak OSGi tylko po to aby ominąć jednego pliku konfiguracyjnego ?

to chyba trochę jak byś chciał do narysowania koła w aplikacji Swingowej wykorzystać osadzony element JavaFX

albo Swinga do zrobienia IoC na 3 obiektach

:P

0

@walec 51, w tym przypadku będzie to raczej mała operacja, którą można przeprowadzić z tutorialem w ręku.

0

Przeczytalem pierwszy post i w drugim zapytalem o co chodzi. Moim zdaniem to jest zwyczajne dzialanie classpath, nie zaprzeczyl wiec zakladam ze tak jest. Zapinanie OSGi do takiego czegos jest moim zdaniem po prostu smieszne. Ale Koziolek juz tak ma: wiara pyta o ladowanie jarow, mowi: OSGi; pytasz o laczenie z JDBC, mowi: JPA.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0