Mariusz Lewandowski

Mariusz Lewandowski Senior Java
Developer

Temat: Jaki framework J2EE pod duzy system webowy?

Witam,

stoje o krok od rozpoczecia prac nad swoim projektem webowym w J2EE, jednak wciaz nie jestem pewien czy dobrze wybralem i czy moja droga nie bedzie uslana kolcami do celu.

Moj projekt to system e-learningowy pozwalajacy na latwe nauczanie przez internet, rozwiazywanie testow oraz wrzucanie zadan na serwer. Bedzie rowniez dostepna czesc dla wykladowcy, ktory bedzie dodawal userow do serwisu oraz tworzyl im testy i dodawal materialy.

Jesli chodzi o szkielet logiki businessowej, calosc zdecydowalem sie oprzec na MVC2 Struts 2 w polaczaniu z frameworkiem DI Spring 2 aby uzyskac loose-coupled system z dependcy injection ktorym zajmie sie sam Spring. Do widoku chce zatrudnic system templateowy Tiles 2 no i do tego jakies tagi JSTL i strutsowe.

Dodatkowo jako JPA swoja role bedzie pelnil Hibernate2 z annotacjami. Serwer: Apache Tomcat6.

Teraz prosze o komentarze za i przeciw takieg polaczenia. Co sadzicie o alternatywie w postaci JBoss Seam'a zamiast powyzszego?
Obecnie mam juz wszystko pokonfigurowane to co opisalem wyzej bez JPA. Mysle wciaz czy nie wybrac Seama.

Pozdrawiam
Piotr Wierzbowski

Piotr Wierzbowski IT Architect, Asseco
Poland S.A.

Temat: Jaki framework J2EE pod duzy system webowy?

Jeżeli nie masz zamiaru korzystać z EJB, MDB i innych featuresów JEE, to Spring faktycznie może być dobrym rozwiązaniem. Nie za bardzo wiem o co chodzi z tym 'loose-coupled system', chyba masz na myśli, że na poziomie klas i beanów w tym Springu, a nie np. komponentów? Jeżeli chodzi o Hibernate to wersja najnowsza to 3.3, do tego nie opłaca sie używać API JPA jeżeli nie musisz mieć EJB3, bo samo API Hibernate jest znacznie przyjemniejsze. Do warstwy prezentacji JSF sa całkiem fajne (AJAX itp.), Seama nie używałem ale słyszałem że jest z tym trochę kłopotu, ogólnie warstwa prezentacji zależy od tego jak to ma w ogóle wyglądać. Co do Tomcata to jest to dobra rzecz do projektów niskobudżetowych, a i tak np. glassfish jest lepszy. Ja miałem kiedyś taki oklepany schemat: Hibernate3 + Spring + RichFaces, przyjemnie się w tym robiło.
Mariusz Lewandowski

Mariusz Lewandowski Senior Java
Developer

Temat: Jaki framework J2EE pod duzy system webowy?

Piotr Wierzbowski:
Jeżeli chodzi o Hibernate to wersja najnowsza to 3.3, do tego nie opłaca sie używać API JPA jeżeli nie musisz mieć EJB3, bo samo API Hibernate jest znacznie przyjemniejsze.

Akurat JPA API uzywam do annotacji moich beansów (np @Entity lub @Id) i Hibernate sam znajduje sobie te klasy i mapuje je na tabele.

Mozesz mi podac przyklad co ten Hibernate 3.3 ma lepszego do mapowania bazo-danowego? Sczerze mowiac dopiero raczkuje w tych wszystkich frameworkach ale ten Struts2 mi sie podoba, w Springu fajne jest to, ze sam "wstrzkuje" obiekty w akcje strutsa i mozna na nich pracowac.

Moze jeszce jedno pytanie: Polecilbys jakies dobre materialy ew przyklady zebym zobaczyl jak np zrobic logowanie na stronie albo AJAXowe wywolania w tej konfiguracji w ktorej ja planuje to poskladac? Bo z tego co widzialem logowanie mozna zrobic na zasadzie interceptora ktory tworzy sesje przed wejsciem do akcji lub jako implementacje interfejsu SessionAware i nie wiem czego powinienem uzyc (albo ja cos pomylilem?)

Odnosnie serwera: Projekt powstaje w ramach pracy inzynierskiej wiec chyba nie potrzebuje pracowac na JBOSSie lub GlassFishu? Mialem okazji z nimi pracowac imusze powiedziec ze sa to kolosy heavy-weight.. Natomiast Tomcat jest w miare kompaktowy i szybko robi reload.Mariusz Lewandowski edytował(a) ten post dnia 09.01.09 o godzinie 00:07
Piotr Wierzbowski

Piotr Wierzbowski IT Architect, Asseco
Poland S.A.

Temat: Jaki framework J2EE pod duzy system webowy?

Miałem na myśli to, że można używać składni hql zamiast tej specyficznej dla JPA, dodatkowo jest tez cos takiego jak obiekt criteria i detached criteria, który znacznie ułatwia robienie bardziej skomplikowanych selectów, szczególnie gdy chcesz mieć jakieś listwy wyszukujące w formularzach, składanie zapytań z sqli nie jest zbyt fajne :]. Co do róznic to pełen spis znajdziesz na stronie producenta ale z takich 'kwiatków' to pamietam że np. w 3.2 nie było opcji wybrania typu joina na detached criteria i zawsze sie robił inner, w 3.3 to juz poprawili. Każda kolejna wersja jest z reguły lepsza od poprzedniej :P.
Co do przykładów to tej konfiguracji o której piszesz nie sprawdzałem co do tej mojej to jest sporo przykładów w internecie i na stronach producentów, z tym że od razu mówie że JSF nie jest łatwy do nauki i dlatego ma tylu przeciwników ;). Samo logowanie bazuje raczej na zwykłej sesji http bez tych udziwnień Springowych i tego modułu Acegi chyba.
Tomcat do developmentu jest nawet zdatny, tylko po jakimś czasie bedzie zapewne dostawał PermGena :], JBoss dla odmiany żyje z płatnego wsparcia swoich produktów, więc w razie problemów jest kwik, ogólnie nigdy za JBossem nie przepadałem.
Zacheusz Siedlecki

Zacheusz Siedlecki Senior Java
Architect, Working
Manager

Temat: Jaki framework J2EE pod duzy system webowy?

PermGen na Tomcacie masz praktycznie w standardzie :D , ale nieraz się okazuje, że szybszy restart Tomcata niż deployowanie na czymś cięższym :)
Mariusz Lewandowski

Mariusz Lewandowski Senior Java
Developer

Temat: Jaki framework J2EE pod duzy system webowy?

Ledwo zrobilem logowanie na stronie a tu tak:


SEVERE: Couldn't invoke destroy method of bean with name 'entityManagerFactory'
java.lang.OutOfMemoryError: PermGen space


I co teraz? Tak zawsze teraz bedzie? Myslicie ze czas przerzucic sie na JBOssa?

A odnosnie logowanie - jest na to super sposob - mozna stworzyc interceptor. Wtedy niezaleznie jaki adres wpisze user z palca to i tak wszystkiego pilnuje interceptor. Bardzo fajna sprawa i ulatwia zycie - nie trzeba w kazdym konstruktorze akcji wrzucac warunku sprawdzajacego czy jest sesja.

Podobnie chyba zrobie jesli chodzi o "role" userow.Mariusz Lewandowski edytował(a) ten post dnia 10.01.09 o godzinie 20:32
Piotr Wierzbowski

Piotr Wierzbowski IT Architect, Asseco
Poland S.A.

Temat: Jaki framework J2EE pod duzy system webowy?

PermGena będziesz dostawać coraz częściej, jedyne wyjście to robienie Stop-Start zamiast redeploy, na tych lepszych serwerach to w Glassfishu ani WASie nigdy tego nie miałem :)
Zacheusz Siedlecki

Zacheusz Siedlecki Senior Java
Architect, Working
Manager

Temat: Jaki framework J2EE pod duzy system webowy?

Piotr Wierzbowski:
PermGena będziesz dostawać coraz częściej, jedyne wyjście to robienie Stop-Start zamiast redeploy, na tych lepszych serwerach to w Glassfishu ani WASie nigdy tego nie miałem :)
Na wasie zdarzają się za to inne przypadłości jeśli redeployujesz aplikację ;)
Maciej Nowicki

Maciej Nowicki Java Developer

Temat: Jaki framework J2EE pod duzy system webowy?

Mariusz Lewandowski:
A odnosnie logowanie - jest na to super sposob - mozna stworzyc interceptor. Wtedy niezaleznie jaki adres wpisze user z palca to i tak wszystkiego pilnuje interceptor. Bardzo fajna sprawa i ulatwia zycie - nie trzeba w kazdym konstruktorze akcji wrzucac warunku sprawdzajacego czy jest sesja.

Podobnie chyba zrobie jesli chodzi o "role" userow.

Na podobne (dobre) pomysły wpadli autorzy wielu frameworków - nie polecam Ci pisania kodu odpowiedzialnego za uwierzytelnianie i autoryzację samemu - lepiej skorzytsać np. z ładnie integrującego się ze Springiem ACEGI

konto usunięte

Temat: Jaki framework J2EE pod duzy system webowy?


SEVERE: Couldn't invoke destroy method of bean with name 'entityManagerFactory'
java.lang.OutOfMemoryError: PermGen space

Normalna sprawa. Serwer defaultowo przydzielone ma malo pamieci i sie zwyczajnie zapycha podczas redeployowania (wiadomo ze java jest zasobozerna :)). Wystarczy w przypadku np. jboss'a dodac odpowiednie wpisy. Chodzi tutaj o zmienne JAVA_OPTS. W przypadku nowej wersji jboss'a (wersja 5) JAVA_OPTS ustawione sa dosc optymalnie i jeszcze nie zdazylo mi sie zeby serwer krzyczal na brak pamieci. W przypadku wczesniejszej wersji nalezalo dodac w [JBOSS_HOME]/bin/run.conf odpowiednie zmienne - chodzi generalnie o MaxPermSize.

W tutorialu do seam'ow na stronie jboss'a jest caly podrozdzial konfiguracji serwera i wlasnie jest mowa o zwiekszeniu MaxPermSize w JAVA_OPTS.

np. http://docs.jboss.org/seam/1.2.1.GA/reference/en/html/...


JAVA_OPTS="$JAVA_OPTS -Xms256m -Xmx768m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -XX:PermSize=128m -XX:MaxPermSize=256m"


W przypadku np. Tomcata zmienne JAVA_OPTS zawarte sa w catalina.sh

Pozdrawiam
Szymon
Łukasz Żuchowski

Łukasz Żuchowski Software Wizard

Temat: Jaki framework J2EE pod duzy system webowy?

1. Hibernate pozwala na więcej niż JPA. Więc jeżeli nie zmierzasz potem zmieniać implementacji JPA na innej może lepiej skorzystać z czystego Hibernate.

2. Tomcat nie jest zły. Obecnie SpringSource wziął się za niego i mocno w niego inwestuje.

Wybór technologi jest dobry. Zarówno Spring jak i Struts2 są napisane w sposób który bardzo ułatwia testowanie na poziomie kodu (Unittesty i nie tylko).

Tomcat jest ok, jeżeli chodzi o development bo pożera znacząco mniejsze ilości pamięci niż serwery J2EE, jego zatrzymanie i start też będą szybsze.
Jacek Wojciechowski

Jacek Wojciechowski Software development
manager

Temat: Jaki framework J2EE pod duzy system webowy?

A propos wycieków pamięci, przy używaniu Tomcata:

1. Przede wszystkim, to Hibernate słynął kiedyś z wycieków pamięci, które ujawniały się przy re-deploy'u - i dlatego problemy się nie pojawiały na Glassfishu (zakładając, że ktoś użył JPA i domyślnej Eclipse/TopLink'owej implementacji - nie wiem czego używa się na WAS). Nie wiem czy w nowych wersjach Hiberante'a ten problem został rozwiązany. Ale być może stąd wzieło się wrażenie, że na Tomcacie z Hiberante'em są problemy z pamięcią przy re-deployu.

2. Zacytuję FAQ z Tomcata:
http://wiki.apache.org/tomcat/FAQ/Deployment
"Why does the memory usage increase when I redeploy a web application?

Because the Classloader (and the Class objects it loaded) cannot be recycled. They are stored in the permanent heap generation by the JVM, and when you redepoy a new class loader is created, which loads another copy of all these classes. This can cause OufOfMemoryErrors eventually. "

Czyli taka jest natura JVMa - Tomcat nie jest tutaj w niczym winny.
Piotr Wierzbowski

Piotr Wierzbowski IT Architect, Asseco
Poland S.A.

Temat: Jaki framework J2EE pod duzy system webowy?

Jacek Wojciechowski:
Czyli taka jest natura JVMa - Tomcat nie jest tutaj w niczym winny.
Raczej wina Classloadera Tomcatowego, a nie samej maszyny wirtualnej, inne serwery nie mają tego mankamentu.

Też słyszałem, że Hibernate miał jakies wycieki spowodowane wadliwym mechanizmem refleksji w jednej z bibliotek których używał, z tego co pamiętam był taki plan żeby podmienić tego liba i nawet była opcja dostępna w konfiguracji, jednak nie była obsługiwana, tak było jeszcze w wersji 3.2, teraz nie wiem jak jest.

konto usunięte

Temat: Jaki framework J2EE pod duzy system webowy?

Jacek Wojciechowski:
A propos wycieków pamięci, przy używaniu Tomcata:

1. Przede wszystkim, to Hibernate słynął kiedyś z wycieków pamięci, które ujawniały się przy re-deploy'u - i dlatego problemy się nie pojawiały na Glassfishu (zakładając, że ktoś użył JPA i domyślnej Eclipse/TopLink'owej implementacji - nie wiem czego używa się na WAS). Nie wiem czy w nowych

WebSphere (wersja 6.1.x z EJB 3 Feature Pack) używa OpenJPA
Jacek Wojciechowski

Jacek Wojciechowski Software development
manager

Temat: Jaki framework J2EE pod duzy system webowy?

Piotr Wierzbowski:
Jacek Wojciechowski:
Raczej wina Classloadera Tomcatowego, a nie samej maszyny wirtualnej, inne serwery nie mają tego mankamentu.

Skoro nie wierzysz temu, co piszą ludzie od Tomcat'a, to może zrób sobie taki test: odpal ten swój kontener (który nie robi "PermGen'ów") z włączoną obsługą JMXa. Następnie otwórz np. JConsole i obserwuj parametr 'Memory Pool "PS Perm Gen"' przy kolejnych re-deployach aplikacji.

I co widać?

Twoje przekonanie bierze się tylko z odpowiednio wysoko ustawionego parametru -XX:MaxPermSize w konfiguracjach tych kontenerów - Tomcat domyślnie używa parametrów domyślnych JVMa (dość nisko ustawionych - o ile dobrze pamiętam, to ten parametr jest ustawiony na 120MB)
Patryk Barnaś

Patryk Barnaś Java Developer w PZU

Temat: Jaki framework J2EE pod duzy system webowy?

Mariusz Lewandowski:
Ledwo zrobilem logowanie na stronie a tu tak:


SEVERE: Couldn't invoke destroy method of bean with name 'entityManagerFactory'
java.lang.OutOfMemoryError: PermGen space


I co teraz? Tak zawsze teraz bedzie? Myslicie ze czas przerzucic sie na JBOssa?

Na JBoss wcale nie bedzie lepiej ;) Co prawda mozna ustawic, aby pozarl nam wiecej ramu, jednak Perm predzej czy pozniej sie pojawi.
A odnosnie logowanie - jest na to super sposob - mozna stworzyc interceptor. Wtedy niezaleznie jaki adres wpisze user z palca to i tak wszystkiego pilnuje interceptor. Bardzo fajna sprawa i ulatwia zycie - nie trzeba w kazdym konstruktorze akcji wrzucac warunku sprawdzajacego czy jest sesja.

Podobnie chyba zrobie jesli chodzi o "role" userow.

W Seamie logowanie tez jest bardzo fajnie rozwiazane... role takze wystepuja.

Mariusz
Lewandowski edytował(a) ten post dnia 10.01.09 o godzinie 20:32
Piotr Wierzbowski

Piotr Wierzbowski IT Architect, Asseco
Poland S.A.

Temat: Jaki framework J2EE pod duzy system webowy?

Patryk Barnaś:
Na JBoss wcale nie bedzie lepiej ;) Co prawda mozna ustawic, aby pozarl nam wiecej ramu, jednak Perm predzej czy pozniej sie pojawi.

JBoss ma wbudowanego Tomcata niestety, także mówiąc kolokwialnie - jeden pies. Nie każdy serwer tak ma, przykładowo GlassFish ma serwerek Grizzli, a WAS jeszcze inne cudo.
W Tomcat liczba redeployów jest zawsze ograniczona niezależnie od ilości przydzielonego ramu, nawet na 2GB zadeklarowanej pamięci aplikacja się kładzie za może 10 razem.
Kiedyś zrobiłem taki teścik: rozwijałem aplikację na Tomcacie, PermGeny zaczęły mnie już irytować mimo ustawienia całej pamięci dla tego wynalazku, więc przeszedłem na GlassFisha i problem już się nie pojawiał, serwerek w ciągu dnia redeployował max 100 razy. Nie twierdze oczywiście, że jest to narzędzie idealne, na którym nigdy PermGean nie będzie.
Patryk Barnaś

Patryk Barnaś Java Developer w PZU

Temat: Jaki framework J2EE pod duzy system webowy?

Piotr Wierzbowski:

W Tomcat liczba redeployów jest zawsze ograniczona niezależnie od ilości przydzielonego ramu, nawet na 2GB zadeklarowanej pamięci aplikacja się kładzie za może 10 razem.

Wydaje mi sie jednak, ze przy zwiekszonej ilosci ramu Perm pokazuje sie 2-3 razy rzadziej... jednak to i tak denerwuje..

Następna dyskusja:

Jaki framework do niewielki...




Wyślij zaproszenie do