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:
-
Poszczególne moduły (w miare możliwości) powinny działać niezależnie od innych modułów.
-
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).
-
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.
-
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.
-
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.