Cześć
Ciężko znaleźć materiały odnośnie projektowania aplikacji kilkuwarstwowych w springu. Chciałbym podzielić sobie mój projekt na kilka modułów, tak aby w przyszłości można było w łatwy sposób "postawić", każdy moduł na kilku maszynach. W sieci jest dużo grafów, rysunków, ale nic w praktyce.
Moje założenia.
-
Sesja użytkownika z serwisem musi być w warstwie biznesowej. Tutaj pojawia się pierwsze pytanie, zastanawiałem się nad użyciem CAS. I zintegrować go ze spring security, czyli single sign on. Moje pytanie jest następujące jak replikować sesje na kilka serwerów w warstwie biznesowej ?? Są jakieś przykłady jak to zrobić przy użyciu spring security ?? Moim zdaniem najlepszym wyjściem byłoby użyć szybkiej bazy danych typu key/value np. redis i tam przetrzymywać info odnośnie sesji danego użytkownika??
-
Wykorzystujemy usługi REST i to one łączą się z naszą aplikacją.
-
Oprzeć wszystko na projektowaniu zgodnym z DDD.
Podzieliłem sobie aplikacje na następujące moduły.
Presentation:
- core - web : moduł kliencki. Statyczne pliki web (css, js, html, angularjs itp)
- admin - web : to samo tylko tzw. konsola administracyjna dostępna w intranecie.
- core -android : aplikacja na androida
Application: - core - rest: moduł obsługujący usługi rest dla głównej strony oraz na aplikacje mobilne. Przechowuje tylko usługi rest.
- admin - rest : to samo tylko dla modułu administracyjnego.
Domain: - core - domain : cała logika biznesowa aplikacji, encje, repository, domena itd. Serce całego systemu.
Integration: - Serwery mongodb oraz psql.
Tutaj pojawiają się moje pytania :) Czy podział aplikacji na powyższe moduły ma sens ?? Czym połączyć core -rest i admin -rest z modułem core - domain (myślałem na użyciu spring integration i bramki 'gateway') ?? W jaki sposób i czy w ogóle spring security radzi sobie z sesją w logice biznesowej (Spring security domyślnie działa w oparciu o ciasteczka, czyli u mnie to by było w warstwie core - rest i admin- rest, natomiast ja bym chcial aby spring security działał w warstwie biznesowej core - domain) ?
Nie mam jeszcze :) takiego doświadczenia jeśli chodzi o projektowanie systemów działających w środowisku klastrowym. Z góry dziękuję za wszystkie uwagi i podpowiedzi.