jesteśmy na etapie planowania migracji dużej witryny internetowej, która jest zbudowana na niestandardowym frameworku mvc, do platformy internetowej opartej na Javie, która zapewnia wbudowaną obsługę Ajax, treści multimedialne, mashup, układ oparty na szablonach, walidację, maksymalny html / separacja kodu java. Grails wyglądał na dobry wybór, jednak nie chcemy używać języka skryptowego. Chcemy nadal używać java. Układ oparty na szablonach jest głównym problemem, ponieważ zamierzamy używać tej aplikacji internetowej z wieloma witrynami o podobnej funkcjonalności, ale radykalnie różnym wyglądzie i działaniu.
Czy rozwiązanie oparte na portalu dobrze pasuje do tego problemu?
Wszelkie spostrzeżenia dotyczące używania „Spring Roo” lub „Play” będą bardzo pomocne.
Znalazłem podobne posty, takie jak ten , ale ma ponad rok. W międzyczasie sytuacja na pewno się zmieniła!
EDYCJA 1: Dzięki za świetne odpowiedzi! Ta strona staje się najlepszym pojedynczym źródłem informacji dla programistów w okopach. Spodziewałem się jednak więcej informacji na temat korzystania z duetu portal-cms. Jahia wygląda dobrze. Coś podobnego?
źródło
Odpowiedzi:
Osobiście trzymałbym się z daleka od dużych, grubych rozwiązań portalowych (często zabijają one produktywność). Słyszałem dobre rzeczy o Gatein, ale nie mam z tym żadnego doświadczenia.
O Spring Roo czytałem poprzednie odpowiedzi, takie jak Spring roo Vs (Wicket and Spring) i inne rzeczy w Internecie, ale nadal nie jestem przekonany (może nie rozumiem), nie jestem pewien jego dojrzałości i, co ważniejsze, naprawdę zastanawiam się, co robi SpringSource z Grails i Roo (nie, Grails vs Roo - dlaczego SpringSource promuje dwie bardzo podobne technologie? nie przekonuje mnie, że obie przetrwają).
Nie mogę wiele powiedzieć o Play. Widziałem demo jak wszyscy, ale chciałbym przeczytać opinie z życia. Do tego czasu poczekam.
Tak i nie :) Ale wejdźmy w ramy prezentacji, do diabła: nie ma jednej odpowiedzi na Twoje pytanie (jak rok temu), są tam dziesiątki frameworków i nie ma wyraźnego zwycięzcy. Wystarczy przytoczyć kilka:
Właściwie proponuję przyjrzeć się prezentacjom Matta Raible'a , naprawdę wykonał świetną robotę porównując frameworki internetowe, pokazując ich mocne i słabe strony, gromadząc fakty i liczby, pokazując trendy ... Polecam:
Naprawdę, spójrz na te prezentacje, pomogą ci znaleźć odpowiednią strukturę (nie ma unikalnej odpowiedzi, ale możesz ograniczyć wybór przez eliminację) i mogą zmienić twój punkt widzenia.
źródło
Używam Spring 3 i Jquery przez jakiś czas, ale usłyszałem o Play i spróbowałem. Naprawdę mi się podoba, Play świetnie łączy coś takiego jak PHP i ciężkie frameworki Java, takie jak Spring.
W zabawie najbardziej lubię:
Czego nie lubię w Play
źródło
Dla mnie najlepszym wyborem jest Wicket . Wyraźne oddzielenie znaczników i kodu Java. Bardzo łatwe w pisaniu i obsłudze komponenty. Prosty w użyciu Ajax, testowalność. Możesz debugować bezpośrednio na swoich stronach / komponentach i nie otrzymywać zaszyfrowanych komunikatów o błędach z implementacji JSF;)
Istnieje również dobra furtka porównawcza <--> JSF pod względem wydajności
źródło
Trzy najlepsze wybory dla mnie to (alfabetycznie):
One:
źródło
Play jest bardzo podobny do ROR, wersji ROR w java
źródło
W przeciwieństwie do innych odpowiedzi, chciałbym zwrócić uwagę na wady (IMHO) popularnych frameworków internetowych:
JSF2 - wydany i już w wieku. Wciąż tylko kilka wiadomości / artykułów / postów na blogach / doświadczeń. Jestem sceptyczny. Wciąż czekam na kolejną główną wersję Richfaces / Icefaces, która w pełni obsługuje jsf 2 - obecnie można pobierać tylko wersje alfa.
Struts 2 - wydaje się być dobrą rzeczą tylko wtedy, gdy nadal polegasz na Struts i chcesz zrefaktoryzować większość swojego kodu. W przeciwnym razie: nie.
GWT - nie podoba mi się podejście single-page i java-> javascript. Nie jestem pewien, czy jedna sesja - wiele widoków / okien można łatwo osiągnąć. Dla mnie ten framework powinien być używany dla ogromnych użytkowników, bogatych w jedno okno aplikacji internetowych.
Furtka - Niezłe podejście, ale trochę rozwlekłe i za mało dostępnej dokumentacji (z wyjątkiem dobrej furtki w książce akcji, ale obejmuje tylko 1.3). Brakuje mi też dużych projektów, które są na nim zbudowane. I obecnie nie widzę, dokąd zmierza droga furtki lub czy została już doprowadzona do ślepego zaułka.
Spring MVC - jeszcze tego nie próbowałem, ale musisz uwzględnić wiele słoików (wiosenny bałagan) w swojej ścieżce klas, aby poprawnie działać z tym frameworkiem. Opiera się na JSP (w większości projektów), które uważam za martwe. Otrzymujesz tylko czysty framework MVC - wszystkie inne rzeczy (ajax i inne) muszą być zaimplementowane / zintegrowane.
Stripes - Mały i ładnie zaprojektowany framework MVC, ale za mało dokumentacji, za mało zatwierdzeń / zatwierdzających, za mało wydań, za mniej wsparcia branżowego, za mniej aktywności na listach mailingowych.
Ciekawi mnie też, czy przegapiłem jakiś ważny framework (celowo zostawiłem Tapestry), który może być opcją dla Ciebie (a także dla mnie).
źródło
Z JAX-RS odniosłem wielki sukces . Jest to jedyna platforma WWW w języku Java, która ma jakąś specyfikację JSR i wiele implementacji innych niż specyfikacja serwletu i portletu (chociaż może to być złe).
Jedną z wad i zalet Javy jest to, że można wybierać i dopasowywać frameworki (python również ma tę funkcję / problem). To miłe, ponieważ nie musisz wkładać wszystkich jajek do jednego koszyka.
Oto ogólny przepis dotyczący stosu aplikacji internetowych w języku Java:
Javascript / Flash + obsługa żądań / odpowiedzi + wstrzykiwanie zależności + trwałość
Javascript: JQuery, Prototype, Dojo
Żądanie / odpowiedź: Spring MVC, Stripes i mój ulubiony JAX-RS (Jersey, Apache CXF)
Dependency Injection: Spring, Guice
Trwałość: JPA (hibernacja, przechowywanie aplikacji Google), hibernacja, JDO i więcej.
Odniosłem również wielki sukces, używając AspectJ do sprawiania, że Java nie jest do niczego. Używając miksów @Configurable Springa i ITD AspectJ, możesz uzyskać Railsy, takie jak obiekty Domain (to jest w rzeczywistości to, co robi Roo, ale nie potrzebujesz do tego Roo).
źródło
Przekonałem się, że paski są naprawdę skuteczne i zaskakująco lekkie ... ma być lżejsze niż rozpórki . Słyszałem od znajomych, którzy są pełnoetatowymi programistami internetowymi, że JSF nie jest wart zawracania sobie głowy, chociaż nie mam doświadczenia z pierwszej ręki i nie mogę tego poprzeć przykładami (!).
źródło
Spójrz na RESThub , który kieruje się tymi samymi zasadami, co Play! ale zaimplementowane przez ponowne użycie niektórych frameworków / narzędzi klasy korporacyjnej, takich jak Maven 3 / Spring 3 / Jersey / jQuery.
RESThub jest bardzo destrukcyjny w porównaniu do innych frameworków, ponieważ jest to zestaw narzędzi z pełnym stosem, ale bez żadnych ramek opartych na MVC lub serwletach po stronie serwera. Zamiast tego używa GUI opartego na interfejsie użytkownika jQuery, który wykorzystuje usługi sieciowe JAX-RS (REST) i system szablonów JavaScript oparty na embeddedJs.
Serwery są bezstanowe i używamy HTML5 sessionStorage do utrzymywania sesji po stronie klienta. To podejście jest zaprojektowane pod kątem RIA i skalowalności.
Niektóre aplikacje demonstracyjne są dostarczane (nawet jeśli są w trakcie tworzenia).
źródło
JSF to fajny framewrok, ale JSF 1.2 brakowało wizji przez wiele lat po jego wydaniu. JSF 2.0 wygląda obiecująco i ma wiele nowych rzeczy dodanych do JSF 1.2, takich jak obsługa Ajax, fasety, obsługa adnotacji i domyślne konwencje (mniej XML), łatwe budowanie komponentów niż 1.2.
Dobrze integruje się również ze Springem, jeśli obawiasz się o obsługę DI.
źródło
Poparłbym zalecenie wiosenne. Nie jestem wielkim fanem GWT, nie sądzę, że crosscompiler Java -> Javascript jest jeszcze dostępny. Pracuję nad aplikacją AJAX, która wykorzystuje spring na serwerze i jQuery na kliencie. Chociaż technicznie nie ma wsparcia dla jQuery „po wyjęciu z pudełka”, zaimplementowanie wiosennego MVC AjaxView jest banalnie proste i zajęło około 25 linii kodu.
źródło
Może trochę późno na show, ale mają wspomnieć Vaadin . Programowanie odbywa się wyłącznie w języku Java, z podejściem opartym na komponentach. Komunikacja klient-serwer polega bardziej na interakcji użytkownika niż na transporcie danych, cała logika biznesowa znajduje się na serwerze.
źródło
Ext GWT + Spring
źródło
Myślę, że to, czego szukasz, jest bliskie Jahii. Obsługuje GWT, Mashup, treści multimedialne itp.
http://www.jahia.org/cms/lang/en/home/Jahiapedia/Jahia_Templates http://www.jahia.net/downloads/jahia/jahia6.0.0/readme/index.html
źródło
OPROGRAMOWANIE PORTALU BACKBASE
Kilka lat temu korzystałem z oprogramowania portalowego „ Backbase ”, które wtedy nie było zbyt dojrzałe. Ale był dobry i łatwy do rozwoju.
źródło
Spójrz na ItsNat
ItsNat to w zasadzie przeglądarka Java W3C na serwerze, zadziwiająco prosta (DHTML na serwerze), promująca aplikacje interfejsu jednostronicowego intensywnie korzystające z AJAX
źródło
Coś, co zasługuje na więcej niż tylko pocisk, to frameworki RIA oparte na graczach. Dawny. Adobe Flex + Java (oczywiście może to w pewnym stopniu zależeć od tego, czy Twoja „witryna” jest naprawdę „witryną”, czy bardziej „aplikacją”, nie tworzyłbyś witryny bloga w Flex).
W sensie AJAX-as-modularne, Flex zazwyczaj używa AMF (binarny protokół, który jest bardziej wydajny niż protokoły używane w aplikacjach AJAX), chociaż możesz również robić rzeczy ściśle AJAX z Flex. Tak więc Flex obsługuje AJAX, ale także obsługuje „lepiej niż AJAX”.
Ponieważ Flex działa na platformie „maszyny wirtualnej” Flash, myślę, że niewiele trzeba dodawać.
Nie jestem pewien, do czego dokładnie to prowadzi, ale brzmi to jak Flex mxml.
Obsługiwane oczywiście, chociaż możesz zdecydować się na zrobienie niestandardowych rzeczy, jeśli chcesz uzyskać fantazję. (Nie żebyś musiał). Fajną rzeczą jest to, że możesz uzyskać tak wyrafinowany, jak chcesz - lub nie.
Nie można uzyskać większej separacji, używając podejścia programistycznego „maszyny wirtualnej”, takiego jak Flex / Silverlight / JavaFX. Pozwala to nie tylko na oddzielenie kodu prezentacji od warstwy logiki po stronie serwera i warstwy dostępu do danych - zapewnia to również ich oddzielenie. `` Wirtualizacja '' środowiska programistycznego zapewnia zgodność z różnymi przeglądarkami, spójną platformę docelową, brak obaw o nowe przeglądarki lub nowe wersje przeglądarek, które psują aplikację, najlepsze funkcje debugowania podobne do java oraz bardziej profesjonalny / imponujący produkt końcowy .
źródło