Która Java Web Framework najlepiej pasuje do Google Guice? [zamknięte]

Planuję rozpocząć nowy projekt i przyglądam się aktualnym najnowocześniejszym frameworkom internetowym Java. Postanowiłem zbudować moją aplikację wokół Guice i prawdopodobnie będę używał bardzo lekkiego ORM, takiego jak Squill / JEQUEL / JaQu lub podobnego, ale nie mogę się zdecydować na web framework. Który pasowałby najlepiej w tak lekkim środowisku? A który z nich najlepiej integruje się z Guice?

Author: Andreas Petersson, 2009-01-27

6 answers

Zebrałem trochę doświadczenia na ten temat, ponieważ zacząłem programować nowy projekt w listopadzie. Projekt jest w późnym stadium.

Dla mnie ważne były następujące wytyczne projektowe:

  • Użyj nowoczesnego stosu technologii, który jest zarówno przyjemny w użyciu, jak i będzie ogólnie używany w przyszłości.
  • zmniejsz liczbę artefaktów projektu-użyj adnotacji/kodu Java tam, gdzie ma to sens, pomiń XML.
  • Użyj frameworków, które są open-source
  • mieć aktywna społeczność
  • nie są etapem alfa
  • są lekkie
  • unikaj powielania pojęć
  • mogę wyjaśnić zawarte w nim pojęcia moim dwóm kolegom programistom, którzy - pomimo bycia dobrymi programistami - nigdy nie używali dependency injection (DI) lub frameworków internetowych.
  • Może służyć jako podstawa technologiczna dla przyszłych projektów]}

Google Guice jako kontener DI był oczywistym wyborem-najwyraźniej najbardziej przemyślanym di contianer, z genialni Programiści i dobra społeczność. Spełnia wszystkie wymienione powyżej punkty.

Więc ustawiłem mój podstawowy stos technologiczny. Po uruchomieniu Guice, dodano Hibernate dla persistence (wraz z warp-persist i warp-servlet). Potem napisałem jakiś podstawowy DAO , który coś wybiera.

Następnie próbowałem zrobić, co następuje: dodano inny framework internetowy na dodatek.

Stworzyłem prostą stronę z tabelą, wypełnioną DAO, nagłówkami i polem tekstowym ze wszystkimi czterema frameworkami.

To były moje ustalenia podczas porównywania czterech frameworków.

XSLT i XStream to rodzaj hardcore ' owego podejścia. Nie jest to tak naprawdę framework, ale realna, całkowicie bezpaństwowa technologia dla wysokowydajnych aplikacji. To był zdecydowanie najszybszym sposobem serwowania strony testowej. W trybie debugowania, 3 ms na localhost kontra około 30-50 ms z innymi framworks.

Integracja Guice była stosunkowo płynna i dobra przy użyciu WARP-servlet, który umożliwił mi wstrzykiwanie do serwletów i wstrzykiwanie httprequest, httpresponse, sesji w innych obiektach, bez przekazywania ich. Wady: brak społeczności, ponieważ jestem jedyną osobą, która rozważyłaby ten stos. - brak gotowych do użycia komponentów.

Potem wziąłem spojrzenie na JSF i Guice: oczywiście można umieścić wtryskiwacz w kontekście serwleta i użyć guice jako lokalizatora usług. Przy prostym podejściu nie da się wstrzyknąć ziarna w inne miejsce. Użycie niestandardowej zmiennej resolver rozwiązuje to częściowo, ale wtedy stracisz całą integrację IDE w swoich plikach JSF plus będziesz musiał użyć ugly FQN dla swoich kopii zapasowych, lub zbudować mapowanie klucza string->Guice gdzieś. Obie są brzydkie as:

  • zalety: Dobra społeczność, wielu deweloperów na rynku pracy(brak kryteriów dla mnie). Nie zwolnią Cię za wybranie JSF, jeśli coś pójdzie nie tak.
  • wady: wprowadza własnyMechanizm inwersji sterowania (IoC), który zderza się koncepcyjnie z guice.

Warp-widgets: stworzyłem mój prosty przykład, używając tego dla zabawy; jest to wczesna faza Alfa. Był przyjemny w użyciu, a jego komponenty są łatwe do wdrożenia i ponownego użycia samodzielnie. Ma na celu zapewnienie typesafe HTML z doskonałą integracją Guice. Ponieważ wyglądało na to, że miał wtedy tylko jednego aktywnego dewelopera, który prawdopodobnie teraz pracuje nad Guice 2.0, powiedziałbym, że społeczność prawie nie istnieje. Działał jak czar, był dość szybki, ale byłbym testerem Alfa. To było po prostu zbyt ryzykowne dla mnie, aby rozważyć to jako projekt komercyjny.

Apache Wicket: ten projekt najpierw zaskoczył mnie wicket-ioc I wicket-guice łączącymi się w Core download. Konstruktor Wtrysk na stronach www nie jest możliwy, tylko setter+pole. Wpisywanie stron WWW jest proste, wystarczy dodać @Inject do pól, które chcesz wypełnić - ale nie powinieneś rozumieć Jak to działa w tle. Trudne rzeczy się dzieją. Injection of web pages jest teoretycznie możliwe - ale nie użyłem go ani razu, ponieważ uniemożliwia to Korzystanie z montowanych adresów URL, a do tego będzie bałagan z utrzymywanym/serializowanym stanem. Członkowie klas są traktowani w sposób przejrzysty z sieci serializacja stron, która jest niezbędna do włączenia obsługi wstecznej przeglądarki. Wicket nie używa zewnętrznych artefaktów - wystarczy mała konfiguracja adresów URL w klasie aplikacji. Tak więc cała konfiguracja odbywa się w Javie - która dobrze pasuje do modelu Guice. Wyczyść oddzielenie HTML i Javy. Jest open-source, podobnie jak większość komponentów, które są liczne i dobrej jakości. Istnieje od 2005 roku(?) i jest projektem Apache najwyższego poziomu. Chociaż jest to bogaty w funkcje framework, jego API jest rozsądnie Kompaktowy (wszystkie podstawowe klasy mieszczą się w jednym JPEG na moim ekranie). W przeciwieństwie do innych, nie wprowadza własnego mechanizmu IoC, ale myśli o IoC jako o usłudze, która może być dostarczana przez Spring Framework , Guice itp. i ta filozofia sprawia, że jest to lepsza integracja W. R. T. Guice. Czy wspomniałem o naprawdę inteligentnej i łatwej obsłudze Ajax?

Framework nie do końca oceniony: tapestry5-przynosi własny IoC. Seam : nie ramka na własny, ale meta-framwwork, który normalnie comes Spring, JSF. Hibernacja. (Choć Spring może teoretycznie zostać zastąpiony przez Guice.)

Podsumowanie: spośród ocenianych framworks, Apache Wicket był zdecydowanym zwycięzcą - w odniesieniu do integracji Guice + wszystkich innych wymienionych kryteriów.

Oprócz nas dwóch, niektórzy ludzie mieli ten problem wcześniej.

 23
Author: Andreas Petersson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-25 11:04:41

Wicket ma wbudowany Moduł Guice , którego nie używałem (ale użyłem Wicket dość dużo i spodobał mi się).

 8
Author: Sam Barnum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-25 11:06:53
 3
Author: ykaganovich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-12 19:43:01
 3
Author: oae,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-25 11:08:05

Dobry lekki kontener internetowy to Prosty . Jest niezwykle wydajny i może być używany z frameworkami takimi jak Restlet i Jersey .

 1
Author: ng.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-25 11:06:06

Mojave MVC Web Framework jest bardzo prostym, lekkim frameworkiem, który zawiera Guice.

 0
Author: Luis Antunes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-22 18:29:58