Aplikacje modułowe w Javie

0

Chciałbym mieć możliwość tworzenia aplikacji modułowych. Dla przykładu: chciałbym stworzyć sobie moduł "faktury" i z tego modułu korzystać w różnych projektach. Moje oczekiwania są następujące:

  1. Poszczególne moduły (w miare możliwości) powinny działać niezależnie od innych modułów.

  2. Poszczególne moduły mogą wykonywać działania cykliczne. Dla przykładu, mogę chcieć napisać moduł "pogoda", który z jednej strony udostępnia API do odczytywania temperatury w regionie a z drugiej będzie sobie co 10 min odświeżał dane o pogodzie (pobieranie informacji z zewnętrznych serwisów).

  3. Powinna istnieć możliwość podmienienia modułu w sposób dynamiczny. To znaczy, jeżeli będę chciał pobierać dane o pogodzie z innego źródła to zmieniam moduł i wszystkie aplikacje, które z tego modułu korzystają powinny zareagować na zmiany.

  4. Mile widziana odporność na zmiany API. Chodzi o to, że na pewnym etapie rozwoju modułu mogę chcieć zerwać ze wsteczną kompatybilnością (lub po prostu rozszerzyć API zachowując wsteczną kompatybilność). Wtedy aplikacje, które nie są kompatybilne z modułem w nowej wersji, powinny korzystać ze starszej wersji aż do momentu, w którym problem kompatybilności zostanie rozwiązany.

  5. Mile widziana możliwość zabezpieczenia modułu, w taki sposób aby było to kompatybilne ze spring security.

Czego mogę użyć? Myślałem nad EJB - niestety nie mam zbyt dużego doświadczenia w tej technologii i nie wiem jak wygląda sprawa z punktem 3, 4 i 5. A może istnieje jakaś dobra alternatywa dla EJB? Słyszałem coś o OSGi, ale nie wiem jak to się sprawuje i czy to dobry pomysł czy może niekoniecznie. Dodam, że całość ma działać na serwerze WildFly.

0

Web services.

  1. Kompletna niezależność. Osobne aplikacje, nawet różne języki.
  2. To nie ma nic wspólnego z komunikacją między modułami. W module (aplikacji), która jest odpowiedzialna za dostarczanie danych o pogodzie robisz joba, który uruchamia się co te 10 minut i aktualizuje dane.
  3. To jest możliwe, "wymienialne" aplikacje musiałyby wystawiać te same endpointy i być dostępne pod tym samym URL. Chociaż szczerze mówiąc ciekaw jestem po co ci coś takiego :P Jeśli chcesz pobrać pogodę z jednego źródła, to zaktualizuj w aplikacji nowe źródło zamiast całej aplikacji.
  4. Zarządzanie kompatybilnością zależałoby tylko od ciebie. Ty definiujesz metody i strukturę tego co przychodzi/wychodzi.
  5. Trochę nie wiem co oznacza kompatybilność ze spring security. Spring security ma fajne wsparcie dla REST.

No i właśnie do rozważenia czy chcesz używać REST czy SOAP, ale nie znamy wymagań. Jednak REST jest znacznie prostszy w obsłudze ;)

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