sobota, 9 maja 2009

GeeCon dzień 1

GeeCon okazał się być największą i najlepszą polską konferencją Javowa na jakiej dotychczas byłem.
JavaFX: The Platform for Rich Internet Applications
Keynote Simona Rittera na temat Java FX. Niezbyt interesuję się technologiami związanymi z UI oraz widziałem Java FX w akcji podczas Devoxx i chyba dlatego nie do końca dałem się wciągnąć w prezentacje... Podstawowa informacja to, że Java FX jest językiem skryptowym działającym na JRE , pod spodem korzysta z dobrodziejstwa Javy i służy jako język do tworzenia UI uruchamianych w różnych środowiskach: przeglądarka, desktop, urządzenia mobilne, oraz inne wynalazki w stylu TV set top box, konsole gier i inne takie.
Siłą tej technologii ma być prostota, czyli szybkość i łatwość tworzenia UI, które mają działać w wielu środowiskach, czyli 1 język do tworzenia GUI na wielu platformach - cross screen functionality.
Ze względu na to, że przez jakiś czas pracowałem jako J2me developer bardziej zaintersowało mnie wykorzystanie Fx w świecie telefonów komórkowych. Jestem ciekaw czy jest to technologia, która poradzi sobie z problemem fragmentation w świecie mobile. Jak na razie podobno nie ma urządzenia które wspierałoby JAVA FX out of box, ale Sun ma rozmawiać na ten temat z vendorami. Teoretycznie do uruchamianie aplikacji FX na telefonie potrzebna będzie końcówka z obsługą MIDP 2.0 + parę dodatkowych jarów. FX wprowadza profile API, czyli dodatkowe API związane z renderowaniem UI oraz innymi możliwościami (np. PIM oraz obsługa SMS dla Mobile profile) związanymi z platformą uruchomieniową.
W świecie UI (i co za tym idzie RIA) szczególnie ważne jest tworzenie "wodotrysków" i tu Java FX może się na prawdę wykazać. Obsługa audio, video, animacji, rich text jest na prawdę bardzo łatwa, a dodatkowo są też pluginy, które umożliwiają integracje projektów tworzonych w PhotoShop i innych dziwactwach do wykorzystania ich w Java FX. Jako, że aplikacja oprócz UI potrzebuje też trochę logiki, FX posiada wsparcie do komunikacji przez WebServices - chyba chodzi o klasyczne SOAP WebServices (z tego co słyszałem to także Asynchronous Web Services) oraz Restful WebServices.

Collaboration, data synchronization and offline capabilities for Rich Internet Applications
Bardzo przyjemna prezentacja na temat Flex. Cornelaiu po omówieniu ogólnej architektury skupił się na zaprezentowaniu 2 aspektów: data synchronization oraz offline. Dodatkowo zaprezentował tour de flex czyli zestaw przykładów-aplikacji dzięki którym można zobaczyć co Flex potrafi. Nie chodzi jedynie o UI, ale także o pewne feature, które jest bardzo ciężko zaimplementować korzystając z "klasycznych technologii webowych". Pokazano typowe przykłady, w których to z poziomu paru okien przeglądarki widać te same dane, a zmiany robione przez użytkownika są jednocześnie propagowane do okien pozostałych użytkowników. W przypadku konfliktów czyli, np. 2 userów jednocześnie robi zmianę tego samego wiersza Flex wykrywa taką sytuację i pozwala nam coś takiego obsłużyć. Z tego co się orientuje jeśli model który oglądamy w UI jest zbindowany do Hibernate to Flex potrafi podpiąc się pod mechanizm optimistic locking, a w innym przypadku jest to zaimplementowane poprzez cachowanie danych zanim zostaną dostarczone klientowi. Dodatkowo mechanizm Data Management umożliwia korzystanie z Hibernate po stronie klienta, tzn. obiekty w ActionScript są zbindowane do obiektów hibernatowych i ich modyfikacja, ale także odczyt asocjacji (lazy associations) jest propagowany na serwer. Dodatkowo Flex obsługuje comet przy czym ma możliwość "dostosowania" się do działającej infrastruktury: próbuje otworzyc dedykowany socket do serwera, a jeśli to się nie uda to wykorzystuję "klasyczne mechanizmy": Long Pooling , Http Streaming. Kolejny aspektem była praca offline. Jeśli nasz klient straci łącznośc z serwerem, możemy cały czas działać - oczywiście do momentu kiedy nie staniemy się znów online, nie widzimy zmian na serewreze ,ale możemy wykonywać pewne operacje i zapisywać je w lokalnym storage . W przypadku aplikacji nie jest uruchamiana w przeglądarce (aplikacja dektopowa) Flex umożliwia nam korzystanie z wbudowanego SQL Lite. Dla Flexa uruchamianego w przeglądarce ten storage jest bardziej ubogi. Został zaprezentowany przykład, w którym to napisany przez nas listener obsługuję logike związana z zapisywaniem i "wypychaniem" danych na serwer jeśli odpowiednio przejdziemy z online od offline i offline do online. Podobno wszystkie przykłady które zostaly zaprezentowane są dostępne na blogu

Liberate your enterprise Java applications from the Operating System (or: about the JVM-level virtualization)
Chyba najciekawsza (przynajmniej dla mnie) prezentacja dnia. Waldek zaczął od omówienie czym jest wirtualizacja i jakie są korzyści z jej stosowania(przykładowo: "be green", lepsze wykorzystanie maszyn, HA, management). Następnie przedstawił 2 ogólne rodzaje infrastruktury wirtualizacji: Host(OS-based) oraz Hypervisor(bare-metal) . W pierwszym przypadku, w istniejącym systemie operacyjnym instalujemy oprogramowanie, które umożliwia nam uruchamianie maszyn wirtualnych. Jest to architektura, w której pracuje VmWare Workstation, VmWare Server czy VirtualBox. W przypadku Hypervisor, oprogramowanie umożliwiające uruchamianie maszyn wirtualnych jest instalowane bezpośrednio na hardware, czyli pomijamy system operacyjny. Tak działa Oravle VM, Vmware ESX/ESXi. Architektura bare-metal ma nie tylko być wydajniejsza , ale także izoluje nas od stabilności(tzn. braku stabilności) systemów operacyjnych, na których instalowane jest oprogramowanie infrastruktury wirtualizacji. Następnie Waldek przedstawił JRockitVE. Produkt najprościej można opisać jako JRockitVE = JRockitVM + "thin kind-of OS layer". Dzięki JRockitVE mamy możliwość bezpośredniego uruchamiania aplikacji Javowych na maszynie wirtualnej bez potrzeby instalowania na niej systemu operacyjnego.
JVM do swojej pracy(szczególnie jeśli mamy od czynienia z serwerem aplikacyjnym) potrzebuje jedynie pewnych funkcjonalności systemu operacyjnego, np. obsługa urządzeń, system I/O.
Dlatego Jrockit VE dostarcza pewną cienką warstwę, która ma emulować te braki. Waldek podkreślał, że ta warstwa powstała od zera (podejście bottom-up) a nie w wyniku usuwanie zbędnych fragmentów jakiegoś istniejącego OS i oczywiście nie wspiera pewnych funkcjonalności: gui, sound, jni. Z punktu widzenia Javy EE braki te mają być niezauważalne. Taka dostarczana przez Jrockit VE OS jest jedno-procesowy (nie ma możliwości uruchomienia aplikacji/serwera aplikacyjnego oraz bazy danych w ramach jednej maszyny wirtualnej chyba, że baza będzie sama w sobie uruchamiania w JVM) , jedno-użytkownikowy oraz jest w stanie korzystać z funkcji znajdującego się pod spodem hypervisora (paravirtualization). Dodatkowo do tak uruchomionej maszyny wirtualnej możemy się podłączyć za pomocą SSH, jest system plików, jest też jakiś ograniczony shell.
Uruchamianie aplikacji bezpośrednio JRockit VE pozwala nam pozbyć się OS i związanego z nim narzutu: OS nie musi zajmować storage, nie zajmuje RAM, nie ma przejść pomiędzy privileged i user mode.
Na koniec najfajniejsze były przykłady, w których to Waldek za pomocą dostarczanego z JRockitVE narzędzia tworzył z aplikacji Javowej i pliku konfiguracyjnego obraz maszyny wirtualnej i wrzucał go do VmWare Workstation. Na potrzeby prezentacji nie było to środowisko 1:1 z tym co opisywał wcześniej, ale i tak robiło to duże wrażenie..

Making EJB 3.1 development a breeze with Apache OpenEJB
Pierwotnie zająłem miejsce w sali obok i chciałem posłuchać o Scala, jednak gdy na jednym z początkowych slajdów zobaczyłem jakieś krzaki, tzn. jakieś wyrażenie w języku funkcyjnym to czym prędzej uciekłem do sali obok. Przypomniały mi się od razu wyrażenia λ (lambda), które starałem się jakoś pojąć na studiach i jakoś zawsze szło mi to opornie.
W 2 sali Jacek Laskowski zaprezentował OpenEJB jako kontener EJB 3.1. Byłem już na kilku prezentacjach, które omawiały JEE 6 i nie były to dla mnie zbytnie nowości. Z 2 strony cały czas mnie ciekawi co Jacek miał na myśli gdy mówił o integracji OpenEJB ze SpringFramework...

Practical Groovy
Prezentacja na temat Groovy przeprowadzona przez pracownika JetBrains, czyli wszystkie przykłady tworzone i uruchamiane w IntelliJ IDEA. Prezentacja dość typowa dla tych omawiających Groovy: zaczyna się od pokazania ile trzeba "naklepać" w Javie oraz jak szybko da się to przerobić na Groovy (za pomocą narzędzia i/lub ręcznie) aby finalnie zobaczyć zdecydowanie mniejszą ilość kodu z w pełni zachowaną funkcjonalności. Wszystko to wygląda bardzo ładnie, ale mnie przede wszystkim przeraża brak silnej kontroli typów w Groovy, co zmusza developerów do pisania jeszcze większej liczby testów aby wyłapać takie bugi. Podobno można dodatkowo się w tym aspekcie wesprzeć narzędziami do analizy kodu. Osobiście spodobała mi się idea pisania testów jednostkowych dla kodu w Javie w Groovym. Wyglądało to na prawdę całkiem zwięźle i prosto. Oczywiście nie obyło się od prezentacji pokazującej modyfikowanie kodu w w runtime co dla Javowca jest zawsze dużym zaskoczeniem. Groovy podobno bardzo ładnie nadaje się do tworzenie skryptów Anta, budowania konfiguracji Springowych oraz można go wykorzystywać do tworzenia różnej maści DSL. Dodawanie "w locie" metod do klas, używanie clousures i paru jeszcze innych wynalazków, których nazw nie zapamiętałem na pewno wpłynie pozytywnie na produktywność . Jeszcze tylko nie wiem czy taki kod nie okaże się bardzo "fragile".

Building Flex applications with Java Google App Engine backends
Kolejna prezentacja z Flex w temacie. Zaczęło się niestety od problemów technicznych z projektorem i niestety większość prezentacji była wyświetlana w wściekle różowych kolorach. Z całej prezentacji nie interesował mnie Flex, a Google App Engine. Google dotychczas na swoim App Engine umożliwiało wrzucanie aplikacji napisanych w Python, od niedawna jednak można hostować tam aplikacje Javowe. Z tego co się orientuję to chodzi głównie o aplikacje webowe oparte na Java Servlets(z tego co pamiętam to Servlets 2.4) oraz JSP. Dodatkowo można korzystać z dostępnych usług: storage za dostępem za pomocą JDO/JPA, dostęp do Memcache, Java Mail, Authentication/Authorization (na podstawie google accounts). Google dostarcza Google App Engine Java SDK, który może zostać zainstalowane standalone lub jako plugin do Eclipse.W ten sposób łatwo możemy tworzyć, budować, testować (za pomocą lokalnej instancji Jetty) i uploadowac aplikacje na Google App Engine. Podobno nie ma problemu aby uruchomić w taki sposób aplikacje napisaną w Groovy lub za korzystającą z Spring Framework. Podobno jest także wersja BlazeDS, która ma działać na GAE. Google dostarcza jednocześnie model biznesowy(czytaj pricing) dla swojego produktu, ale podobno całkiem dużo można się pobawić za free. O zabawach z flexem na GAE można znaleźc tu

Brak komentarzy:

Prześlij komentarz