Aplikacja Vaadin jako klient webservices – słowo wstępne
Zapowiada się dłuższy tekst i zanim do niego przejdę chciałbym przygotować was mentalnie na to czym będziemy się zajmować.
Przy okazji jednego z poprzednich wpisów pojawiło się pytanie o wydajność Vaadin. Jest to dość istotne jeżeli przyjmiemy, że nasza aplikacja powinna być skalowalna. Kwestia wydajności tego typu rozwiązań jest zawsze dyskusyjna. Bo czymże jest wydajność? Jak ją mierzyć w odniesieniu do aplikacji dostarczających web-GUI? Niewątpliwie najważniejszym czynnikiem jest szybkość odpowiedzi na żądania. Na tym polu Vaadin sprawuje się bardzo dobrze, ale by tak było muszą zostać spełnione pewne warunki.
Vaadin to interfejs
Po pierwsze aplikacja jest tylko dostawcą GUI. Logika biznesowa ogranicza się do minimalnego minimum. Aplikacja ma być tylko interfejsem pozwalającym na wywoływanie metod interfejsów biznesowych. Najlepiej w postaci całkowicie asynchronicznego dostępu do komponentów. To uzyskujemy dzięki zastosowaniu technologii AJAX.
Po drugie sposób dostępu do interfejsów biznesowych powinien być łatwo „przepinalny”. Oznacza to, że aplikacja będzie wykorzystywać różne usługi i komponenty biznesowe pobierając informacje o nich za pomocą jakiegoś interfejsu fabrykującego. Interfejs taki powinien pozwalać na przesłonięcie rzeczywistej implementacji nie tylko na poziomie „jak to jest zrobione”, ale też na poziomie „w czym to jest zrobione” inaczej mówiąc jeżeli zgłaszam się po jakiś interfejs to mnie nie obchodzi czy uzyskam komponent EJB, bean Springa czy endpoint webservice. W praktyce jedyną rzeczą jaka powinna mnie obchodzić powinno być tylko podanie prawidłowej nazwy komponentu. I to nazwy domenowej, a nie wskazania na źródło! Przykład takiej implementacji pokazałem w poście o integracji Vaadin ze Springiem.
Po trzecie należy pamiętać o ograniczeniach wynikających z samej natury aplikacji webowych. Nie należy płakać, że przy 50requestach na minutę zawierających ciężkie zapytania np. raporty z bazy danych nasz serwer padł. Jeżeli jest to serwer typu 111 – 1 rdzeń, 1GB ram, 1połączenie do bazy to nie należy się dziwić. Pod tym względem należy zachowywać czujność rewolucyjną i w razie czego dostawiać kolejne maszyny. Niestety era aplikacji biznesowych, które mieściły się w 64kb RAM odeszła do lamusa.
Zatem jeżeli chcemy pisać wydajne aplikacje w Vaadin należy pamiętać, że jest to narzędzie do budowy interfejsu graficznego i takim powinno pozostać. Należy też wziąć pod uwagę, że web-GUI zazwyczaj nie jest najcięższym obliczeniowo elementem, ale dobrze napisane można pominąć w rozważaniach o pojedynczym scenariuszu. Zazwyczaj problemy leżą gdzieś w logice biznesowej, a ta jest wyprowadzona z GUI.
Niezbędne przygotowania dla naszej aplikacji
Chcąc stworzyć aplikację – klienta WebService musimy poczynić pewne przygotowania. Po pierwsze musimy mieć WS. Ja wykorzystam API udostępnione przez Ideone.com, które to pozwala na zdalną kompilację kodu w jednym z wielu dostępnych języków. Całość śmiga pod kontrolą Gentoo, zatem mamy do dyspozycji wszystkie kompilatory dostępne w tej dystrybucji. Jeżeli zatem chcesz przerabiać dokładnie mój przykład zarejestruj się na Ideone.com(bezpłatnie) i skonfiguruj sobie dostęp do API.
Po drugie musicie uzbroić się w cierpliwość. Będę chciał pokazać kompletny projekt, a to jest dużo kodu. Będę korzystał ze Springa3, JPA 2 i Hibernate 3.5. Platformą budującą będzie Maven 3. Całość uruchomię na serwerze Jetty.
Do miłego 🙂