konto usunięte

Temat: JavaServer Faces (JSF) 2.* vs Spring MVC vs Google Web...

Witam

Ostatnio słyszałem sformułowanie, że Java jest kiepska gdyż siadając do tworzenia serwisu www trzeba odpowiedzieć sobie na masę pytań by wybrać którego frameworka użyć. Może jest to jakiś problem ale jak dla mnie wolę mieć do wyboru multum rozwiązać danego problemu niż być z góry skazanym na jeden. A w związku z tym proponował bym luźną dyskusję jaki dla was framework webowy spisuje się najlepiej. Wiem, że to zależy od środowiska, zastosowania i odbiorcy dlatego postaram się sprecyzować temat. Powiedzmy, że tworzymy spory portal podobny do Facebook-a. Jakiego frameworka byście użyli ?
Proponuję porównanie 4 frameworków jak w temacie (wydaje mi się, że jednych z napopularniejszych).

JSF

Plusy(+)

Oracle wybrało JSF jako podstawową technologię dla widoku dla JEE. Wnioskować po tym można, że będzie kładziony duży nacisk na jego rozwój i może pojawić się wiele ciekawych rozwiązań. Patrząc po wstępnych wersjach JSF 2.2 to Flow Faces zapowiada się całkiem całkiem.
Faclety – mi się osobiście podoba sam pomysł templateów. Dzięki temu nie trzeba powielać kodu.
Wiele gotowych elementów za którymi w wielu przypadkach stoją molochy technologii. Np. richfaces, primefaces, icefaces itd…
Razem z managed beans i CDI stanowią fajny zespół. Oczywiście jest tu jeszcze wiele do zrobienia acz kolwiek np. gdy potrzeba nam coś trzymać dla to robi się to banalnie.
Konwertery – bardzo podoba mi się pomysł definiowania konwerterów. Bez problemu mogę przygotować konwersję danych wprowadzanych przez user-a i zamieniać je tak jak chcę.
Walidatory – to samo co wyżej. Weryfikacja poprawności pola, dopięcie jej do komponentu itd… Moim zdaniem, bardzo fajny pomysł.
Bez problemu radzi sobie z Spring Security itd…
Znalazł się także w Spring Roo dla primefaces

Minusy(-)

Jak na razie trochę kulejące wsparcie dla HTML5 ale podobno ma być to poprawione w JSF 2.2
W przypadku bardziej zaawansowanych komponentów, których nie znajdziemy w gotowcach chyba łatwiej jest zrobić kawałek JQuery niż naciągać pod swoje potrzeby istniejące komponentu.
Dosyć dużo kodu. Wiele elementów można by uprościć by nie wymagały tyle kodu.
Jeśli nastawiamy się na CDI to potrzebujemy już serwera aplikacji.
Jeszcze taki mały minusik (nie wiem czy do JSF ale skoro mam podjąć decyzję jaki framework to jest to na minus). Osobiście korzystam z JetBrains IDEA i rozmawiałem z ludźmi z JetBrains na temat JEE 7. Wsparcie dla JEE 7 będzie dopiero w wersji 13, która będzie wydana pod koniec 2013 roku. Tak więc jeśli chcecie korzystać z HTML 5 i flow faces to albo trzeba się przenieść na NetBeans (jest wersja developerska wspierająca wstępną wersję JEE 7) albo poczekać do końca 2013.

Spring MVC

Plusy(+)

Korzystanie z wszelkich dobrodziejstw Springa
Web flow
Spring roo i podstawowa aplikacja gotowa. W przypadku małych prostych zleceń oszczędza masę czasu od formatek począwszy a na bezpieczeństwie skończywszy.

Minusy(-)

Brak gotowych kontrolek typu rich text editor. Trzeba napisać samemu.

Oparty na JSP. Moim osobistym zdaniem Oracle będzie mniej przychylne do rozwoju JSP idąc bardziej w kierunku JSF-a.

GWT

Plusy(+)

Dynamiczne generowanie elementów.
Możemy zrobić szablon w HTML-u a do niego wpinać GWT-owe elementy.
Kwestia szablonów tu pojawia się w innym kontekście. Można by powiedzieć, że dynamicznie zmieniamy kawałek strony, który nas interesuje (lub np. zastępujemy go innym) a wszystko bez ruszania reszty strony.
Walidacja po stronie klienta. Robi się to genialnie.
Wspierane przez Spring Roo.

Minusy(-)

Z racji, że ogólnie latamy po RPC to odpadają nam takie rzeczy jak lazy loading a dochodzą DTO. Trzeba dodatkowo porównywać obiekty gdy wracają na serwer.
Nie zgrywa się tak dobrze ze Spring Security i innymi rozwiązaniami do bezpieczeństwa co Spring MVC i JSF.
Mało gotowych komponentów a i ponowne użycie własnych nie jest za specjalnie wygodne.
Jeśli chcesz mieć możliwość dodawania do ulubionych (URL) to wymaga to dodatkowych zabiegów.
Gdybyśmy chcieli użyć jQuery to jest taka możliwość ale nie wymaga to troszkę roboty.

Play Framework

Plusy(+)

Dynamiczne przeładowywanie klas. (Można by powiedzieć, że taki okrojony JRebel za free)
Bardzo fajnie zrobione template. O wiele mniej złożone niż w JSF co nie odbija się na ich funkcjonalności.
Proste generowanie wstępnego kody, testy, przełączanie między wersją deweloperską a produkcyjną.

Minusy(-)

Z tego co wiem to brak możliwości wykorzystania spring security. Ma oczywiście własny mechanizm zabezpieczeń ale nie ma jeszcze tyle możliwości co Spring Security.
Brak gotowych komponentów.

Podsumowanie

Zapraszam wszystkich do wypowiedzi. Jeśli mieli byście dziś przepisać Facebook-a na Javę to jaki framework wybrali byście i dlaczego lub jaki na pewno byście nie wybrali i dlaczego. Dla mnie osobiście Play odpada z racji, że jestem zbyt przywiązany do dobrodziejstw, które daje spring. W potyczce JSF z Spring MVC wybrał bym JSF z racji, że są bardzo podobne do siebie (w JSF mogę użyć tego co w Spring MVC) a dodatkowo wiele gotowców do szybkiego wytwarzania i sądząc po ruchach Oracle to mam wrażenie, że to czegp brakowała w Java EE i zostało dodane przez Spring-a teraz jest uzupełniane np. przez CDI itp. Oczywiście do Spring-a jeszcze trochę brakuje ale sądzę, że idzie to w kierunku by wszystko co potrzebne znalazło się w JEE bez potrzeby bibliotek z zewnątrz. Co do GWT to daje naprawdę fajne możliwości i bardzo fajnie sprawdza się przy wielu aplikacjach natomiast nie wybrał bym go do realizacji FB. Jeśli ja miał bym dokonać takiego wyboru to dla widoku wybrał bym:
JSF 2.1-2.2 (Jeśli nie Flow Faces to Web Flow)
Managed Beans
CDI
HTML5
CSS3
JQuery
Primefaces
W reszcie użył bym Spring-a, Hibernate itp.. Postawił bym to na GF 4 z racji, że on będzie pierwszym serwerem aplikacji, który będzie wspierał JEE 7.
Robert Kwolek

Robert Kwolek Team Lead, HERE

Temat: JavaServer Faces (JSF) 2.* vs Spring MVC vs Google Web...

Jako że zaproponowałeś użycie CDI to usunąłbym Managed Beans (JSF) - oba rozwiązania mocno się duplikują (abstrahując od tego, że CDI jest dużo bardziej zaawansowane) i wprowadzają lekką schizofrenię. Chyba że pisząc Managed Beans miałeś na myśli komponenty CDI ;-).Robert K. edytował(a) ten post dnia 22.02.13 o godzinie 09:19

konto usunięte

Temat: JavaServer Faces (JSF) 2.* vs Spring MVC vs Google Web...

"Chyba że pisząc Managed Beans miałeś na myśli komponenty CDI ;-)." - głównie tak. W bebechach pewnie oparł bym się na springu a skoro nie ma jeszcze flow faces to użył bym web plow springa. Boli mnie tylko w JSF (aktualnej wersji) brak możliwości użycia HTML5 (albo czegoś nie wiem).
A ty jaki framework byś wybrał ?
Robert Kwolek

Robert Kwolek Team Lead, HERE

Temat: JavaServer Faces (JSF) 2.* vs Spring MVC vs Google Web...

I jeszcze jedna uwaga: jeśli już popuszczamy wodze fantazji i mielibyśmy robić coś a'la FB/G+ w Javie to trzeba wziąć pod uwagę docelową liczbę użytkowników. Poczyniłbym ogólne założenie, że im więcej użytkowników tym prostsze technologie powinny być użyte tzn. czysty ajax (via jquery)/web sockety a nie mechanizmy JSF (z całym bagażem walidacji etc.). Oczywiście nie można popadać w paranoję i zacząć pisać w asemblerze, ale nie można też bagatelizować tego czynnika. Istotna jest również optymalizacja ruchu przeglądarka - serwer, jak również optymalizacja obliczeń po stronie serwera. W przypadku dużej liczby użytkowników każda niepotrzebnie wykonana operacja może iść w miliony.
Reasumując więc oprócz wybranych technologi ważniejsza może okazać się wybrana architektura.
Robert Kwolek

Robert Kwolek Team Lead, HERE

Temat: JavaServer Faces (JSF) 2.* vs Spring MVC vs Google Web...

Dominik Sienkiewicz:
"Chyba że pisząc Managed Beans miałeś na myśli komponenty CDI ;-)." - głównie tak. W bebechach pewnie oparł bym się na springu a skoro nie ma jeszcze flow faces to użył bym web plow springa. Boli mnie tylko w JSF (aktualnej wersji) brak możliwości użycia HTML5 (albo czegoś nie wiem).
A ty jaki framework byś wybrał ?
Jeśli miałby być to portal dla umiarkowanej liczby użytkowników trzymałbym się Twoich założeń - łatwy rozwój, zarządzanie, etc.
Robienie konkurencji dla FB/G+ nie byłoby takie łatwe i chyba oparłbym wszystko na jakimś autorskim, dedykowanym rozwiązaniu. Tutaj jest link do technologii użytych przy tworzeniu G+.

konto usunięte

Temat: JavaServer Faces (JSF) 2.* vs Spring MVC vs Google Web...

W pełni się zgodzę. JSF przydał by się bardziej do komunikacji z widokiem + mechanizmy internacjonalizacji. Wszystko co dało by się walidować po stronie klienta, należało by walidować właśnie tam. Odciążyło by to serwer. wybrał bym do tego JQuery i JavaScript. Większość komponentów lepiej napisać samemu. Aczkolwiek chyba nie odmówił bym sobie przyjemności skorzystania np. z SessionScoped ... oczywiście trzeba by było analizować czy nie zawali to serwera i wtedy może lepiej było by przetrzymać co się da na przeglądarce ale tu wychodzi kwestia bezpieczeństwa. Kwestia indywidualna w zależności jakie dane.
Wczoraj oglądałem jakąś konferencję gdzie strasznie wychwalali GWT a narzekali na JSF z racji, że dużo trzeba pisać itd... Moim zdaniem jeśli potrzebujemy dużej elastyczności w tworzonym interfejsie i tworzymy wiele autorskich komponentów to JSF 2.* o wiele lepiej zdaje egzamin niż GWT i w przypadku bardzo obciążonych systemów jak Twitter, FB itd... lepiej daje radę.

konto usunięte

Temat: JavaServer Faces (JSF) 2.* vs Spring MVC vs Google Web...

IMHO krytykować Spring MVC, że nie ma rich-komponentów, to trochę jak krytykować toster, że nie robi kawy. On przecież robi dokładnie to, co ma robić - sterować zachowaniem aplikacji w oparciu o MVC.
Poza tym brak ingerencji w warstwę widoku może być właśnie plusem, możesz napisać stronę w javascripcie, coffe scripcie, css3, jQuery czy co tam dusza zapragnie.

Tak przy okazji ktoś wie, w jakich technologiach został napisany Filmweb ? Wiem, że to J2ee, ale co konkretnie ... ?

Ja osobiście preferuję trio Hibernate/Spring/JSF, dosyć szybko się pisze aplikacje, pod warunkiem że klient nie chce udziwnień. Jeśli są owe udziwnienia, wtedy wywalam JSFa i wstawiam Spring MVC + warstwa widoku pisana pod dedykowane rozwiązania.Andrzej Cichoń edytował(a) ten post dnia 22.02.13 o godzinie 11:11

konto usunięte

Temat: JavaServer Faces (JSF) 2.* vs Spring MVC vs Google Web...

Nie twierdze, że nie. Poza tym w życiu nie krytykował bym Spring MVC. Chodzi mi po prostu o to, że dla założeń które opisałem brak mi pewnych funkcjonalności. Co nie znaczy, że nie da rady ich zrobić. Acz kolwiek ja wolę iść na łatwiznę i to co odpowiada mi z pudełka wolę z pudełka niż preparować samemu.
Łukasz D.

Łukasz D. Software Developer,
DevOps Fan

Temat: JavaServer Faces (JSF) 2.* vs Spring MVC vs Google Web...

Andrzej Cichoń:
Tak przy okazji ktoś wie, w jakich technologiach został napisany Filmweb ? Wiem, że to J2ee, ale co konkretnie ... ?
Na pewno za widok odpowiada GWT, a co z tyłu to nie wiem.
Jakub Grabowski

Jakub Grabowski Tworzenie aplikacji,
integracja SOA,
outsourcing,
szkolen...

Temat: JavaServer Faces (JSF) 2.* vs Spring MVC vs Google Web...

Łukasz D.:

Na pewno za widok odpowiada GWT, a co z tyłu to nie wiem.
Czy to potwierdzona informacja? Wygenerowany kod nie wygląda mi na GWT. Zresztą zdziwiłbym się, gdyby ktoś napisał taką aplikację w GWT.
Łukasz D.

Łukasz D. Software Developer,
DevOps Fan

Temat: JavaServer Faces (JSF) 2.* vs Spring MVC vs Google Web...

Jakub Grabowski:
Łukasz D.:

Na pewno za widok odpowiada GWT, a co z tyłu to nie wiem.
Czy to potwierdzona informacja? Wygenerowany kod nie wygląda mi na GWT. Zresztą zdziwiłbym się, gdyby ktoś napisał taką aplikację w GWT.

A co w tym dziwnego? Google Adwords i Adsense też jest w GWT ;)

GWT potwierdzone empirycznie przez podgląd źródła strony:

<meta name="gwt:property" content="locale=pl">
...
<script type="text/javascript" src="http://2.fwcdn.pl/gwt/homeFilms/main.nocache.js"></script>
Maciej Nowicki

Maciej Nowicki Java Developer

Temat: JavaServer Faces (JSF) 2.* vs Spring MVC vs Google Web...

Ja też się mocno zdziwiłem, bo GWT to nie framework do pisania portali, tu się chyba każdy zgodzi?

Przejrzałem kod i jedynie niektóre drobniejsze komponenty (jak ocena filmu) wyglądają na GWT. Ciekawe z czym tu GWT jest połączone.
Jakub Grabowski

Jakub Grabowski Tworzenie aplikacji,
integracja SOA,
outsourcing,
szkolen...

Temat: JavaServer Faces (JSF) 2.* vs Spring MVC vs Google Web...

Łukasz D.:

A co w tym dziwnego? Google Adwords i Adsense też jest w GWT ;)

GWT potwierdzone empirycznie przez podgląd źródła strony:

<meta name="gwt:property" content="locale=pl">
...
<script type="text/javascript" [/quote]> src="http://2.fwcdn.pl/gwt/homeFilms/main.nocache.js"></script>[quote]

Adwords i Adsense mnie nie dziwią. Tam GWT na pewno dobrze się wpasowało. Ale kod Filmwebu nie wygląda na full-GWT. Maciek ma rację - w GWT są wybrane widgety.
Jarosław Szczepankiewicz

Jarosław Szczepankiewicz Lead Technical
Consultant

Temat: JavaServer Faces (JSF) 2.* vs Spring MVC vs Google Web...

z innej beczki zdaje się że powstaje jakiś thiller o javie :)

http://www.filmweb.pl/film/Java+Heat-2013-637218

konto usunięte

Temat: JavaServer Faces (JSF) 2.* vs Spring MVC vs Google Web...

Teledyski już są :D

http://www.youtube.com/watch?v=b-Cr0EWwaTk

http://www.youtube.com/watch?v=1JZnj4eNHXE

a i krótki filmik też :D

http://www.youtube.com/watch?v=4LZdz7h45oI
Adam Lesiak

Adam Lesiak Web developer - JEE
/ jQuery

Temat: JavaServer Faces (JSF) 2.* vs Spring MVC vs Google Web...

To jaki framework wybieramy, zależy od tego co i jak chcemy robić. Spring jest frameworkiem typu action-based w odróżnieniu od np JSF, który jest typu component-based. Taka aplikacja jak FB wyświetla dużo zależnych lub niezależnych komponentów i programowanie jej z użyciem Springa będzie raczej uciążliwe. Z drugiej strony jednak wszystkie komponenty można ładować Ajaxem, do czego Spring nada się znakomicie.Adam Lesiak edytował(a) ten post dnia 02.03.13 o godzinie 15:16



Wyślij zaproszenie do