Java a średni (?) projekt informatyczny Doświadczenia na przykładzie projektu Nabór Paweł Dachterski, Paweł Gruszczyński, Bernard Lange, Krystian Nowak, Stanisław Osiński Poznańskie Centrum Superkomputerowo-Sieciowe
Chcemy wywołać dyskusję Problem Statystyki Dyskusja Technologie Wnioski
Uporządkowanie naboru do szkół Od 0 do 200 punktów
Uporządkowanie naboru do szkół
Uporządkowanie naboru do szkół
Ciągły dostęp do informacji
Skomplikowany model dziedzinowy
Konfiguracja dla wielu miast
Średni projekt? DuŜy projekt?... miast
Średni projekt? DuŜy projekt?... zainstalowanych systemów
Średni projekt? DuŜy projekt? ~60,000... uŝytkowników
Średni projekt? DuŜy projekt? 150,029... Java NCSS
Średni projekt? DuŜy projekt? 886,536... linii w całej zawartości repozytorium
Średni projekt? DuŜy projekt?... przypadków testowych (o róŝnym stopniu złoŝności)
Średni projekt? DuŜy projekt?... automatycznych testów akceptacyjnych (o róŝnym stopniu złoŝności)
Średni projekt? DuŜy projekt?... tabel w aktualnym schemacie bazy danych
Średni projekt? DuŜy projekt?... bugów na JIRZe, z czego 189 otwartych
Średni projekt? DuŜy projekt? 3-5/1-2... programistów... testerów
Średni projekt? DuŜy projekt?... release ów produkcyjnych od lutego 2005
DuŜa liczba technologii Development Libraries Test & benchmarking Deployment
Hibernate upraszcza kod DB Application POJOs Hibernate XML mapping Database
Hibernate upraszcza kod DB Przezroczystość i nieinwazyjność, ułatwienia dla programistów Stabilny kod (wtedy wersja 2.1) Elastyczność mapowania, implementacji, cache owania i wyboru bazy danych
Tapestry: składanie UI z klocków
Tapestry: składanie UI z klocków
Tapestry: składanie UI z klocków
Tapestry ułatwia Ŝycie Koniec zabawy z ręczną generacją HTMLa, komponentowość Koniec ręcznej obsługi parametrów (HttpRequest, HttpSession) Automatyczne sprawdzanie poprawności danych
Automatyczne testy akceptacyjne Automatyzacja wykonywania testów (BłaŜej Pietrzak)
Canoo Webtest wygląda ciekawie Wysoki poziom abstrakcji Obsługa plików XLS i PDF Dobra integracja z buildami automatycznymi (Maven) Open Source
Niezbędne zarządzanie konfiguracją
Maven wydał nam się sensowny Zarządzanie zaleŝnościami Gotowa struktura projektu Rozszerzalność (wtyczki) Raporty i statystyki
Maven robi całkiem sporo Generacja plików konfiguracyjnych Kompilacja źródeł Uruchamianie testów jednostkowych i akceptacyjnych
Maven robi całkiem sporo Konfiguracja środowiska programistycznego Testowanie automatycznej migracji danych produkcyjnych
Build server jest niezbędny Kompilacja i uruchamianie testów na bieŝąco Nie wydajemy wersji produkcyjnej (ani RC) bez całościowo przechodzącego builda
Hibernate: łagodna krzywa uczenia
Cykl Ŝycia sesji Hibernate HTTP Request Tapestry rewind Tapestry render R/W transaction RO transaction Flush, (commit)/rollback Hibernate session
Konsekwencje session-per-request Sprawdził się w naszej aplikacji Uwaga na Ŝądania nie wymagające sesji Hibernate Optymalizacja pobierania połączeń do bazy danych
Historie z equals() Celowo nie był nadimplementowywany Czasem problemy z Tapestry (a.equals(b) b.equals(a) :) Problemy z cache owaniem
Uwaga na wydajność select from where child Child child child.parent.name = 'janek' or child.name = 'janek' select from where dummychild0_.child_id as child_id, dummychild0_.name as name, dummychild0_.parent_id as parent_id dummy_child dummychild0_, dummy_parent dummyparen1_ (dummyparen1_.name='janek' and dummychild0_.parent_id = dummyparen1_.parent_id) or (dummychild0_.name='janek' )
Ciekawe zapytania select from where child Child child left outer join child.parent parent parent.name = 'janek' or child.name = 'janek'";
Uwaga na wydajność W Hibernate 2.x kolekcje nie są domyślnie pobierane w trybie lazy Cache owanie wyników zapytań
Ostatnie słowo o Hibernate Migracja do H3.x nie byłaby problemem Warto uŝywać (np. w porównaniu z Torque)
Tapestry: długi czas wdroŝenia (około 6 miesięcy)
Nietrywialny model działania Form rewind/render Cykl Ŝycia komponentów i stron Typy parametrów (T3.x) Interakcje z Hibernate Dziwne wyskoki OGNLa
Brakujące komponenty ValidPropertySelection ValidTextArea StaticScript DynamicBlock FieldLabel InsertWithDefault OptGroup Listener ValidFieldFocusController AjaxRequest... i 50 innych...
Konieczność hackowania Tapestry CSS rewriting Selective page caching Problemy wydajnościowe przy bardzo długich stronach Implementacja komponentów sprawdzających poprawność wprowadzonych danych
Konieczność hackowania Tapestry Obiekty Hibernate owe jako persistent properties Ogólna konkluzja: Tapestry 3.x jest słabo rozszerzalne
Problemy z upgrade do T4.x/5.x Brak zgodności pomiędzy Tapestry 3.x i kolejnymi wersjami Poszukać alternatywy do Tapestry? (Stripes, Wicket)
Ostatnie słowo o Tapestry MoŜe być opłacalne, ale tylko w dłuŝszej perspektywie
Automatyczne testy akceptacyjne Kosztowne utrzymanie Jak interpretować błędy? Problemy ze stanem początkowym i inicjalizacą Problemy z JavaScriptem (prosty Ajax działa)
Automatyczne testy akceptacyjne Co dziesiąty bug przed wydaniem znaleziony przez automat Opłacało się robić te testy, mimo wysokich kosztów
Zarządzanie konfiguracją WaŜne dla programistów Utrzymanie skryptów i buildów pochłania 0.5 osobomiesiąca Wieloprojektowa struktura (Maven) ułatwia ogarnięcie całości i przyspiesza budowanie
Dyskusja