Tworzenie aplikacji webowych w oparciu o framework ObjectLedge Konrad Mizi«ski Wydziaª Elektroniki i Technik Informacyjnych, Politechnika Warszawska, K.Mizinski@stud.elka.pw.edu.pl Streszczenie ObjectLedge jest frameworkiem znacz co upraszaczaj - cym tworzenie aplikacji webowych. Za pomoc kongurowalnego potoku pozwala na realizacj zarówno podstawowych jak i najbarziej skomplikowanych funckonalno±ci w jak najprostrzy sposób. Pozwala na bªyskawiczne realizowanie podstawowych funkjonalno±ci takich jak widoki czy akcje. Na szczególn uwag zasªuguje wykorzystanie frameworka Velocity oferuj cego nowe a zarazem bardzo praktyczne podej±cie do generacji dokumentów. 1 Wst p W obecnych czasach coraz popularniejsze staj si aplikacje webowe, których tworzenie umo»liwia nam standard Java Enterprise Edition. Nie dziwi wi c lista frameworków uªatwiaj ca pisanie aplikacji w oparciu o t wªa±nie platform. Jednym z mªodszych czªonków rodziny frameworków javowych jest ObjectLedge, z którym mam przyjemno± pracowa podczas tworzenia swojej pracy in»ynierskiej. Zostaª on stworzony przez polskich programistów na bazie projektu Jakarta Turbine, a jednym z jego podstawowych zaªo»e«byªo zerwanie ze wszystkimi naleciaªo±ciami w obecnie istniej cych frameworkach, do których programi±ci zd»yli si ju» niestety przyzwyczai. 2 Aplikacja w architekturze trójwarstwowej Wraz z rozwojem oraz z wzrostem zªo»ono±ci oprogramowania coraz wi ksze znaczenie ma jego architektura. Bardzo cz sto decyduje ona o pora»ce lub powodzeniu danego projektu. Jeszcze niedawno najpopularniejsza byªa architektura typu klient-serwer, jednak obecnie najcz ±ciej wykorzystywana jest architektura trójwarstwowa. Wyró»nia ona nast puj ce warstwy: warstwa prezentacji warstwa aplikacji warstwa ¹ródªa danych
2 3 Warstwa prezentacji Warstwa prezentacji stanowi interfejs miedzy u»ytkownikiem a systemem. Jest ona realizowana w przegl darce internetowej za pomoc j zyka znaczników HTML. Uzyskujemy dzi ki temu niezale»no± interfejsu od ±rodowiska u»ytkownika. Niestety sposób prezentacji wci» zale»y jednak od przegl darki, wi c jednym z etapów projektu powinno by zawsze zaªo»enie jakie przegl darki i od jakiej wersji b d przez nas wspieranie. W przypadku aplikacji wewn trzkorporacyjnych(i prac dyplomowych) mo»na zaªo»y wykorzystanie tylko jednej przegl darki. Kolejn zalet j zyka znaczników jest jego prostota, dzi ki której nawet pocz tkuj cy web-designerzy s w stanie szybko nauczy si pisania kodu HTML. W j zyku HTML mo»liwe jest wskazanie sposobu wy±wietlania informacji, zaleca si jednak aby tre± dokumentu byªa odseparowana od sposobu jej prezentacji. Umo»liwiaj to kaskadowe arkusze stylów(ccs). Wad j zyka HTML jest jego statyczno±, nawet najmniejsza zmiana na stronie wymaga ponownego wygenerowania» dania HTTP i przesªania go do serwera. Wpªywa to negatywnie na responsywno± aplikacji, szczególnie przy du»ym obci»eniu. Rozwi zaniem tego problemu s technologie takie jak np. AJAX, które generuj kod wykonywany na poziomie przegl darki, bez konieczno±ci ponownego przesyªania» dania. 4 Warstwa aplikacji - serwlet Poprzez warstw prezentacji u»ytkownik wysyªa swoje» dania do warstwy aplikacji. W przypadku aplikacji webowych najcz ±ciej mamy do czynienia z» daniami protokoªu HTTP(ang. Hypertext Transfer Protocol ). W przypadku standardu J2EE podstawowym komponentem realizuj cym to zadanie jest serwlet. Wszystkie dost pne komponenty, z których korzystamy tworz c aplikacje webowe(np. strony *.jsp) s zawsze ostatecznie kompilowane do postaci serwletów. Aby utworzy wªasny serwlet wystarczy zdeniowa klas implementuj c interfejs Servlet. Najcz ±ciej jednak tworzymy klasy dziedzicz po abstrakcyjnej klasie HttpServlet. Do poprawnego obsªu»enia» dania HTTP nale»y przeci»y 2 metody doget(...) oraz dopost(...) odpowiadaj ce metod GET i POST protokoªu HTTP. Typowym dziaªaniem serwletu jest popranie parametrów» dania z obiektu HttpRequest oraz wygenerowanie na ich podstawie odpowiedzi zapisanej w obiekcie HttpResponse. Obiekty typy HttpRequest i HttpRespone s parametrami metod doget oraz dopost. Mo»na zada sobie pytanie ile serwletów potrzeba do stworzenia aplikacji. Odpowied¹ wydaje si prosta: wystarczy jeden serwlet. Taki wªa±nie mechanizm oferuje nam framework ObjectLedge. 5 ObjectLedge ObjectLedge jest frameworkiem oferuj cym potokowe przetwarzanie informacji. Programista sam okre±la sekwencje dziaªa«za pomoc tzw. zaworów (ang. Valves), które odpowiadaj za przetworzenie» dania u»ytkownika, oraz wygenerowanie odpowiedzi. Do najwa»niejszych zada«zaworów nale»y:
3 obsªuga akcji - zada«niemaj cych bezpo±redniego wpªywu na widok, ale stanowi cych efekt uboczny wykonania» dania przygotowanie widoku Typowym przykªadem potoku jest podziaª zaworów na 3 klauzule try-catch- nally, gdzie w bloku try umieszczamy zawory odpowiedzialne m. in. za pobranie parametrów zapytania HTTP, obsªug akcji, czy przygotowanie widoku, w bloku catch zawory odpowiedzialne za obsªug sytuacji wyj tkowych(te» przygotowuj ce widok informuj cy o zaistnieniu takiej sytuacji), za± w klauzuli nally zawory odpowiadaj ce za przesªanie odpowiedzi do u»ytkownika. 6 Zawory Podstawowymi elementami potoku s zawory (ang. Valves). ObjectLedge pozwala nam na wykorzystanie dowolnie skongurowanej sekwencji zaworów, nie tylko dostarczonych przez framework ale równie» zdeniowanych przez programist. Zawór nie jest niczym innym jak zwykª klas j zyka Java implementuj c odpowiedni interfejs. W tym przypadku jest to interfejs Valve. Deklaruje on tylko jedn metod : public void process(context context) throws ProcessingException Aby okre±li dziaªanie zaworu wystarczy zdeniowa metod process. Wa»n rol w podczas potokowego przetwarzania» dania peªni obiekt Context. Jest on przekazywany kolejnym zaworom jako argument metody process, b d c tym samym narz dziem do komunikacji mi dzy zaworami. 7 Akcje Czasami oprócz wygenerowania widoku zale»y nam na wykonaniu innych dziaªa«z nim nie zwi zanych. Przykªadem takiego dziaªania mo»e by zapis do bazy danych. W takim przypadku OcjectLedge oferuje nam mechanizm akcji. Akcje deniujemy tak samo tak samo jak elementy potoku(implementuj c interfejs Valve), nie umieszczamy ich jednak w potoku a odwoªujemy si do nich poprzez parametry zapytania HTTP np: http://localhost:8080/demo/ledge/ view/somepackage.someview?action=somepackage.someaction podaj c jako parametr action nazw klasy poprzedzon nazw pakietu. 8 Apache Velocity Velocity jest mechanizmem szablonów pozwalaj cym na szybkie tworzenie dokumentów(najcz ±ciej typu xml, html itp.). Dostarcza on szeregu mechanizmów
4 uªatwiaj cych i przyspieszaj cych ten proces m.in: zmienne, instrukcje warunkowe i pelt (makra #set, #if, #else, #foreach), czyli wszytko to do czego jeste±my przyzwyczajeni przez j zyki programowania. Pozwala on na deniowanie wªasnych makr(instrukcja #makro) oraz na odwoªania bezpo±rednio do obiektów j zyka Java. Na szczególn uwag zasªuguje szczególnie ostania wªa±ciwo±, która czyni z Velocity naprawd pot»ne narz dzie. 9 Przygotowanie widoku Przygotowanie widoku zawsze stanowi wyzwanie dla programisty, wielu z nich nie lubi a nawet nie potra sprawi aby strony HTML ªadnie wygl daªy. Zadanie to powierza si niekiedy grakom, ci jednak nie wiedz jak programowa w Javie. ObjectLedge wychodz c na przeciw tym problemom proponuje podziaª na cze± pisan w Javie i kodowan za pomoc znaczników HTML. Oferuje wi c nast puj ce podej±cia: Zapisanie caªo±ci logiki w formie klasy j zyka Java (Buildera) Zakodowanie strony w postaci kodu HTML w szablonie Velocity Zastosowanie zarówno klasy Javy jak i szablonu Velocity 9.1 Klasa Buildera Klasa Buildera jest klas implementuj c interfejs Builder, jednak najcz ±ciej wykorzystuje si klasy dziedzicz ce po AbstractBuilder. Deniuj c tak klas wystarczy wtedy przeci»y metod build, która jako wynik swojego wywoªania zwraca obiekt typu String, peªni cy funkcj odpowiedzi(lub jej cz ±ci) na zapytanie HTTP i odesªany do u»ytkownika w celu wy±wietlenia przez przegl dark. 9.2 Szablon Velocity Podobny efekt mo»emy uzyska zapisuj c kod HTML w szablonie Velocity. Musimy przy tym pami ta o nazewnictwie szablonu(nazywamy go tak jak klas Javy) i umieszczeniu szablonu w odpowiedniej mu strukturze katalogów(odpowiadaj cej pakietom j zyka Java). Do widoku (zarówno klasy Buildera i jak i szablonu Velocity) odwoªujemy si w taki sam sposób, podj w ±cie»ce nazw pakietu a nast pnie nazw klasy(szablony) np: http://localhost:8080/demo/ledge/view/somepackage.someview 9.3 Podej±cie mieszane Oczywi±cie najciekawsze jest podej±cie mieszane, czyli wykorzystanie zarówno klasy Builedera jak i szablonu Velocity. W typowym podej±ciu w kodzie Javy przygotowujemy jakie± dane(np. czytamy je z bazy danych), a nast pnie przekazujemy je poprzez specjalny obiekt(templatingcontext) do kontekstu Velocity. Dzi ki temu w szablonie Velocity mo»emy si odwoªywa bezpo±rednio do tego obiektu(np. prezentowa dane, które obiekt reprezentuje ).
5 10 Zawieranie si widoków Typowa strona strona HTML ma struktur hierarchiczn. Zazwyczaj widnieje na niej zawsze ten sam tytuª, to samo menu gªówne czy jakie± podmenu wspólne na dla cz ±ci stron. W ogólno±ci mo»na powiedzie»e widoki mog si w sobie zawiera. ObjectLedge dostarcza wi c mechanizmu pozwalaj cego na zdeniowanie widoku widoku zewn trznego dla aktualnie wywoªanego widoku. Pozwalaj na to obiekty EnclosingView(w Builderze) i ViewEnclosureTool(w szablonie), tzn. pozwalaj zdeniowa czy dany widok jest ju» widokiem nadrz dnym, lub jakiego widoku nale»y u»y jako nadrz dnego(który te» mo»e mie swój widok nadrz dny... i tak a» do wierzchoªka). Oczywi±cie podczas tworzenia widoków zewn trznych nale»y pami ta o kodzie wygenerowanym z ju» przetworzonych widoków wewn trznych, s one przekazywane w postaci napisów jako argument procedury build lub umieszczane w kontek±cie velocity pod nazw : embeddedplaceholder. 11 Wstrzykiwanie zale»no±ci Wstrzyknie opisane powy»ej udogodnienia nie byªyby mo»liwe bez mechanizmu wstrzykiwania zale»no±ci(ang. Dependency Injection). ObjectLedge dostarcza mechanizmu bazuj cego na narz dziu PicoContainer, i oferuje wstrzykiwanie zale»no±ci przez konstruktor. Mechanizm ten polega na okre±leniu w specjalnym pliku xml klas wyst puj cych w realizowanym systemie oraz powi za«mi dzy nimi(poprzez zdeniowanie argumentów konstruktora). Dzi ki temu podczas odwoªania si do obiektu jego atrybuty s ju» zainicjowane. Literatura 1. http://objectledge.org 2. http://github.com/objectledge/ledge 3. http://velocity.apache.org/ 4. http://picocontainer.com/