2010-05-10 17 views
5

Mam projekt Java, który oczekuje rejestracji modułów zewnętrznych. Te moduły:Najlepsza praktyka odwoływania się do zewnętrznego modułu w projekcie Java

  • wykonania szczególnego interfejs w głównym projekcie
  • są pakowane w uni-jar (wraz z wszelkimi zależnościami)
  • zawierać pewne postaci czytelnej dla człowieka meta-informacje (takie jak nazwa modułu) .

Mój główny projekt musi być w stanie załadować w czasie wykonywania (np. Przy użyciu własnego programu ładującego klasy) dowolny z tych modułów zewnętrznych. Moje pytanie brzmi: jaki jest najlepszy sposób rejestracji tych modułów w głównym projekcie (wolałbym zachować tę waniliową Javę, a nie używać jakichkolwiek frameworków/bibliotek innych firm do tego wyizolowanego problemu)?

Moje obecne rozwiązanie polega na zachowaniu pojedynczego pliku .properties w głównym projekcie przy użyciu klucza = nazwa, wartość = klasa | ogranicznik | human-readable-name (lub skoordynuj dwa pliki .properties w celu uniknięcia pismowania ogranicznika). W czasie wykonywania główny projekt ładuje się do pliku .properties i wykorzystuje wszystkie znalezione wpisy do zarządzania programem ładującym klasy.

To wydaje mi się hoksem. Czy istnieje lepszy sposób na to?

Odpowiedz

0

Niech wszystkie moduły wyrażają swoje metadane za pomocą standardowego pliku xml. Nazwij go "mój-moduł-data.xml".

Na starcie głównego pojemnika wygląda na ścieżce klasy *: my-module-data.xml”(co może mieć klasę FrontController) oraz delegatów do poszczególnych modułów FrontController klasa robić co chce :)

google również na wiosnę-OSGi i ich doco mogą być pomocne tutaj.

0

Rozszerzając @ZZ Coder ...

Wzorzec dostawcy usług wspomniany i używany wewnętrznie w JDK jest teraz nieco bardziej sformalizowany w JDK 6 z ServiceLoader. Ta koncepcja jest dalej rozwijana przez Netbeans Lookup API.

Podstawowa infrastruktura jest identyczna. Oznacza to, że oba interfejsy API używają tych samych artefaktów w ten sam sposób. Wersja NetBeans to po prostu bardziej elastyczny i solidny interfejs API (umożliwiający na przykład alternatywne usługi wyszukiwania, a także domyślną).

Oczywiście byłoby nie wspomnieć o dominujących, bardziej "ciężkich" standardach EJB, Spring i OSGi.

Powiązane problemy