Aplikacja w Springu czy łączyć z JEE?

0

Hej,
Uczę się Springa MVC. Potrafię stworzyć aplikację opartą o Spring DATA. Do tej pory robiłem tak, że z obiektu ModelAndView zwracałem nazwę widoku w formacie jsp. Tam dzięki "${item}" mogłem operować na wartościach pobranych z bazy etc.

Słyszałem, że JSP nie jest aktualnie najlepszym rozwiązaniem w takich aplikacjach i chciałbym coś zmienić.

Mam do Was pytanie, czy warto pisać jakąś większą aplikację korzystając tylko ze Springa i tego nieszczęsnego JSP?
Z drugiej strony widziałem aplikacje JEE + Spring, które wykorzystują JSF'y i te ManagedBeany.

Powiedzmy, że są trzy możliwości pisania przeze mnie projektu.

  1. Spring + JSP
  2. Spring + alternatywa dla JSP - jaka?
  3. Spring + JEE + JSF

Bardzo prosiłbym o jakieś opinie i skierowanie mnie w jakąś stronę. Nie uważam, że znam Springa na jakimś świetnym poziomie ale wymyśliłem sobie temat projektu, który mógłby znaleźć się w moim CV a nie, że pójdę na rozmowę a tam: "łeeee JSP z czym do ludzi", "ooo JSF ale szit, sam Pan sobie wybierał technologie?".

Pozdrawiam

0

JSP/JSF/Templatki - NIE.

Springa możesz mieszaćnp. z JAX-RS/Jersey i np. JPA/Spring Data JPA itp.

2

Jeśli już musisz tego nieszczęsnego Springa - to użyj go tylko do robienia Jsonowego API dla klienta Single Page Application w TypeScript (Angular 2).

W kategorii Resume Driven Development to chyba teraz najlepszy wybór. A dodatkowo całkiem przyjemnie Ci się będzie pisać. Zaprawdę wygodniejsze to niż rzeźbienie server side generowanych templatek (w czymkolwiek).

Spring + JavaEE to katastrofa nawet dużo większa niż każda z tych platform osobno.
JSF to katastrofa sama w sobie.

0

jarekr000000, dziękuję za odpowiedź! :)

Dlaczego określiłeś Springa jako nieszczęsnym? W wielu ofertach (jeśli nie wszystkich) o pracę w Javie jest wymaganym.
Ale jak miałbyś coś polecić to mówisz, że TypeScript - okej, dzięki.

A te katastrofy to dlaczego? Zbyt duże kombajny? Za stare? Za .. wszystko? :P

1

Akurat REST Controllers i REST Templates to straszna kupa w Springu.

JAX-RS / Jersey duzo lepiej rozwiniete.
A podpiecie to pod Springa tego nic trudnego.

0

Za dużo magii (ThreadLocal, Dynamic proxy, Refleksja, Classloadery) - do tego całość Stringly Typed i w pewnym momencie odbija się czkawką.
A jak pomieszasz dwa magiczne frameworki ze sobą to już jest duże kuku (pomieszasz 3 -(bo pewnie jeszcze masz JPA)).

Byłem w takim projekcie Spring, JavaEE, JSF, Portlety i jeszcze nie wiem co. Dodanie jednego inputa -> tydzień walki z Nullpointerexceptionami :-)

0

Czyli po prostu wygenerować obiekty JSONowe i wykorzystywać ich pola przy wyświetlaniu na froncie poprzez JSa?

3

Dokładnie - masz wtedy łatwo rozdzielony klient (AngularJS) i server. Łatwo obie części niezależnie testować. Łatwo rozdzielić odpowiedzialności.
Dodatkowo - brak sesji po stronie serwera - dużo lepsza skalowalność.

Do budowy klienta najlepiej użyj JSowych technologii - generalnie NPM.

Hint! Jeśli nauka i opanowanie narzędzi dla JS to trochę za dużo zabawy (to jest dużo nauki). To możesz zrobić tylko serwer - bez klienta i bez GUI.
Wymyśl sobie protokół i API Jsonowej dla jakiejś aplikacji i zrób tylko część serwerową w Javie.
Testuj np. curl-em -załącz nawet skrypty do testowania.
Pobaw się testowaniem wydajności (Jmeter, apache benchmark).
To będzie praktycznie bardziej przydatne niż rycie HTMLa w templatkach.

0

Jak chcesz JEE i JSF to unikaj Springa. Do prostego REST API (frontend w npm i JS/TS) nadaje się jedno i drugie. Spring ma za to lepsze wsparcie dla takich bajerów jak RabbitMQ, AMQP i STOMP: obecnie w pracy używam. Ogólnie JEE to dość ubogi, ale przyjemny, wyjątkowo prosty do nauczenia i elegancki stos (może poza JPA, które jest nieco przekombinowane). Spring to straszna kobyła.

2

Thymeleaf zamiast jsp.
I nie słuchaj się fanatyków którzy zwalczają Springa, Spring to top technologia i jeśli chcesz dostać prace w Javie to raczej nie unikniesz. I nie zauważyłem żeby to była jakas magia, i nie zauważyłem żeby to była trudna technologia

0

W Springu magii jest sporo (nadużycie proxy i refleksji), ale dokumentacja jest rewelacyjna, a społeczność duża, więc idzie ogarnąć dość szybko. Ze względu na mnogość konfiguracji dobrze mieć przy sobie kogoś kto zna dobre praktyki bo ilość możliwych konfiguracji springa jest nieograniczona, a wiele z nich jest słabych i tylko utrudnia.

0

Jsli ktos rezygnuje ze Springa w swiecie javy to powinien to mocno rozwazyc czy jest tego pewien.

Bo Spring to nie tylko REST oraz DI. Ma mnostwo ficzerow, ktore spring daje nam za darmo albo pozwala dodac.

Cloud, logging, monitoring, spring data, message brokers. Hystrix sam w sobie ma brzydkie api, ale ze Springiem jest juz ok. Itp.

I takie aplikacje latwiej zintegrowac ze springiem niz bez niego.

https://developers.redhat.com/blog/2016/12/09/spring-cloud-for-microservices-compared-to-kubernetes/

A jak sie o projekt nie dba to i tak nic nie pomoze.

0

To wyżej to prawda - spring tworzy dość sprawne i spójne środowisko, gdzie dużo rzeczy jest gotowych, Są recepty na prawie wszystko co się przydaje w typowym server side (na wszystko po 5 nowych annotacji i do przodu).

Ale to nie jest za darmo.
To jest kosztem Javy.

Nie możesz używać wątków normalnie (executors, parallelSream, fork joiny) (tylko są specjalne wersje dla Springa)
Nie możesz testować normalnie( jeno Mocki do zarypania).
Nie możesz praktycznie używać immutable klas (nie widziałem jeszcze żeby to się udało w projekcie większym niż hello world).
Nie możesz używać new normalnie.

Po prostu napisz mi, że to jest dobre (z dokumentacji Spring):

  @PreAuthorize("hasRole('ROLE_USER')")
  @PostFilter("hasPermission(filterObject, 'read') or hasPermission(filterObject, 'admin')")
  public List<Contact> getAll();
0

No trudno żeby nie było proxy jak chcesz programować aspektowo. To że developerzy są leniwi i nie chce się im doczytac jak coś działa bo wolą jakieś bieda tutoriala z YT to nie jest problem twórców Springa.
A Spring akurat jest tak zrobiony że jest dosyć łatwo testować aplikacje

0

Co by nie mówić to i tak Springa w jakimś stopniiu znać trzeba jeśli ktoś chce być Java Developerem.

0

Tak jeszcze cofając się do oryginalnego pytania, to JSP zawiera się w JEE tylko teoretycznie.
I spokojnie daje się mieszać ze Springiem, przykład:
https://www.mkyong.com/spring-boot/spring-boot-hello-world-example-jsp/

JSF chyba podobnie:
https://www.mkyong.com/jsf2/jsf-2-0-spring-integration-example/

Schody zaczną się gdy zaczniesz używać EJB i JTA w projekcie ze Spring.

Kilka wątków poleconych w tym temacie przez BalusC:
http://stackoverflow.com/questions/18369356/when-is-it-necessary-or-convenient-to-use-spring-or-ejb3-or-all-of-them-together
http://stackoverflow.com/questions/18995951/how-to-install-and-use-cdi-on-tomcat

Opis komponentów Java EE:
https://docs.oracle.com/cd/E19798-01/821-1841/6nmq2coj7/index.html

11

@jarekr000000
Ostro krytykujesz springa i faktycznie część argumentów przytaczasz słusznych. Fajnie Ciebie poczytać i wyciągnąć wnioski, ale do tego potrzebna jest szersza wiedza i możliwość porównania z czymś innym. Masz wiele lat doświadczenia i pewnie autorytet w firmie i możesz być przywódcą nowej rebelli przeciwko frameworkom. Znajdziesz ludzi którzy za tobą pójdą. Ale czy gdyby młodszy programista głosił że spring jest be, to ktoś wziąłby jego słowa pod uwagę? Ot gadanina niedoświadczonego. Świata nie zna to gada. Dlatego o ile wypowiadasz się w odpowiednich wątkach, to naprawdę doceniam Twój wkład, tak krzyczenie na każdym kroku na frameworki w wątkach nowicjuszy jest robieniem im krzywdy. Po pierwsze będzie im bardzo ciężko na rynku pracy. Narzędzia dobiera się do celu, a podstawowym celem przez pierwsze kilka lat to nabranie doświadczenia i odnalezienie się na rynku, a nie pisaniem super aplikacji. A powiedzmy sobie szczerze, większość firm na rynku wymaga springa. Więc moim zdaniem jeżeli ktoś się uczy to MUSI poznać springa i może zacząć od templatek. Raz że są prostsze, a dwa że o ile nowe apki zmierzają coraz częściej ku SPA, to nadal jest masa softu która stoi i będzie długo stała na teplatkach, i trzy że taką widzę po prostu warto mieć, bo czasem trzeba zrobić jakiś tool na szybko i stawianie angulara w TS to wystawianie armaty na szczury. Z drugiej strony, jeżeli ktoś nie zna w ogóle springa, to nie może go krytykować. W takim wypadku będzie to zwykły hejt. Mówienie że spring jest zły bo ktoś na forum napisał to delikatnie mówiąc łatwowierność, a żeby widzieć wady to trzeba je najpierw poznać na własnej skórze. Więc nawet jeżeli ktoś chce pisać aplikacje w czymś innym niż Spring/JEE, to musi być niezłym zawodnikiem znającym wroga od środka. Inaczej nie przekona innych by poszli jego ścieżką.

TL;DR
Obecnie spring jest obowiązkowy dla każdego programisty java. Odradzanie go komukolwiek, kto nie jest pro i zna go doskonale, to temu komuś krzywdy.

0

No właśnie jak @krzysiek050 napisał - @jarekr000000 możesz być sobie takim JavaHipsterem, fakt jest jest taki ze sporo programistów uważa Springa za dobrą platformę,a przede wszystkim obiektywną prawdą jest to że znacząca większość pracy w webówce w Javie jest wykonywana z użyciem Springa. To co proponujesz początkującym to samobójstwo zawodowe.

0

sporo programistów uważa Springa za dobrą platformę

  1. Sporo ludzi jest zadowolonych z porad wróżek, horoskopów i homeopatii.

  2. odpowiadając na pytanie OP poradziłem mu jak ma to zrobić ze Springiem, bo zdaję sobie sprawę, że pewnie trafi do typowego grajdołka rzeźbienia getterów i seterów.
    (też musiałem swoje w takich odbębnić) .I dokładnie do zdobycia pracy to mu się ten Spring pewnie przyda.

A dalej to już dyskusja z wami ekspertami :-)
Bo:
3. Spring raczej zacznie zdychać tak jak JavaEE. Tego modelu programowania się nie da po prostu obronić. (Ok PHP jest ciągle na rynku i dominuje nawet - choć tez się nie da obronić :-) ).
(Strzelam, że chłopaki ze Springa wywalą wszystkie obecne bzdury i powiedzą "to jest o to Spring Reactive" bierzcie - to że tam prawie nic nie będzie ze Spring Core /Spring Beans może przejdzie bez echa :-) ).
4. Nie da się obronić z tego powodu co wymieniłem - absurdalne i niespójne ograniczenia (musisz dokładnie wiedzieć jak Spring działa, żeby wiedzieć czemu np. nie możesz zrobić return this. To fakt, że problemy są spowodowane tym, że ludzie nie kumają Springa, ale patrząc na ilość absurdalnych reguł, które należy przełknąć aby się w tym cudzie techniki poruszać stwierdziłem, że nie warto już nikogo zachęcać do ogarnięcia. Nawet JavaScript nie jest tak niespójny. (Jeden z moich ulubionych przypadków: wywołaj metodę REQUIRES_NEW z innej metody tego samego beana i spróbuj wytłumaczyć Juniorowi dlaczego nie działa i powiedz mu ( bez wybuchnięcia ( śmiechem | płaczem)), że to jest dobre :-) ).
5. Alternatywy też nie są dojrzałe i takie piękne... rzeźbienie monad w Javie jest prawie równie upokarzające co pisanie kolejnych mapperów , ale przynajmniej jest to krok w stronę normalności. Im szybciej zadomowi się w Javie jakiś odpowiednik Akka HTTP tym lepiej.
6. Tak, że im szybciej przestawicie się na programowanie "normalne" tym lepiej dla was - bo to i tak do was przyjdzie - może będzie się nawet nazywało Spring (tak dla niepoznaki).
7. Co do samobójstwa zawodowego - żyjecie w czasach inflacji i patrzycie na chwile obecną - patrzcie trochę do przodu. Singularity is near.

0

Spring jest dla mnie najbardziej spójną platformą programistyczną z którą pracowałem. Zarządzanie transakcjami jest banalne, Spring IoC znacząco ułatwia testowanie, chociażby umożliwia testowanie calego flow bez stawiana serwerów. Podział na warsty Controller<->Service<->Repository/DAO jest niezwykle logiczny. W przyszłości zamierzam ogarnąc Play Framework zobaczymy jak wypada w porównaniu do Springa :)

2

Ad 2. Odpowiedziałeś na pytanie o "nieszczęsnym springu". Taka wypowiedź dla bardzo świeżego zawodnika sugeruje mu że powinien zmienić tok myślenia. A IMHO nie powinien, o ile nie chce założyć innowacyjnego startupu.
Ad 3. Tak samo jak zdycha java. Ok, może koniec nastąpi, ale kiedy? Za 5 lat? Na pewno nie wcześniej. Aż tak daleko nie warto planować.
Ad 4. Można zrobić return this. Nie każdy bean to proxy.
Ad 6. Nieprawda. Jestem gotów zmienić pracę i porzucić springa już teraz. Tylko kto zatrudni mnie do projektów bez niego? W warszawie pewnie na palcach jednej ręki. W szczecinie pewnie nikt. Lepiej będzie przestawić się na programowanie "normalne" gdy liczba ofert pracy w takim trybie będzie większa od ofert w springu. Czyli bardzo odległy czas.
Ad 7. Patrzę na chwilę obecną i trochę do przodu. Spring da mi i mojej rodzinie jeść przez najbliższe kilka lat. I nie obudzę się z ręką w nocniku, bo przyswajam cały czas nową wiedzę i też trochę eksperymentuję, ale prywatnie. Zawodowo Spring jest królem.

0

No i niestety @jarekr000000 relacyjne bazy danych "niestety" tez szybko nie umrą ;]

EDIT:

Obejrzałem fragment duży tej prezentacji o encjach na twarz i częściowo się z tym zgadzam, muszę obejrzeć całość żeby się do tego odnieśc.
Po 1 wcale nie musi być tak że jedna encja -> 1 serwis.
Po 2 zwracanie encji przez serwis uważam za niezbyt rozsądne
Po 3 używanie serwisów do wywoływania tylko 1 metody DAO/Repository (w sumie nie wiem czym to się różni) uważam za głupie i ma miejsce raczej w prostych CRUDach.

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