01 marca 2010

Inicjacja w F# już za mną - pierwsza aplikacja kliencka, która działa

3 komentarzy
Właśnie zakończyłem moją inicjację w F# (również znanego jako fsharp).
#light

open System
open System.Net
open System.IO
open System.Diagnostics

let HttpPost (url:string) =
let request = WebRequest.Create(url) in
request.Method <- WebRequestMethods.Http.Post;
request.ContentType <- "application/x-www-form-urlencoded";

let response = request.GetResponse() in
let reader = new StreamReader(response.GetResponseStream()) in
reader.ReadToEnd()

do let response = HttpPost "http://java.sun.com" in Console.WriteLine("odpowiedź: {0}", (response))
Nie jest to arcydzieło programowania funkcyjnego czy obiektowego, a przypomina stare dobre czasy programowania proceduralnego w C, więc możnaby powiedzieć, że nie ma się czym chwalić, ale chodziło mi raczej o zwrócenie uwagi w stronę tego języka i zdobycie kilku komentarzy, czy warto, czy idę w dobrą stronę, itp. Owe (arcy)dzieło stworzyłem na bazie przykładu Simple Web Service Consumer i zmierzam do czegoś bardziej wyrafinowanego, co w odpowiedzi otrzyma obiekt ze świata Javy. Taka skromna integracja światów .Net/F# ze SCA.

Skąd pomysł na fsharp? Wszystko zaczęło się od Clojure i mojego pierwszego na poważnie spotkania z językami funkcyjnymi. Coś we mnie pękło, coś się przestawiło i z programowania obiektowego zwróciłem się w stronę programowania funkcyjnego (PF). Podobno nie jest tak ciężko, a na pewno bardziej wieloprocesorowo i mniej pamięciożernie. Zalety są, a jedyną wadą, na jaką wciąż trafiam, to w zasadzie słabe rozpoznanie tego obszaru. Może dlatego mnie tak na to wzięło (objaw duszy odkrywcy?).

Komentarz Mateusza Mrozewskiego do Nowy serial "SCA praktycznie" - Zestawienie środowiska z Apache Tuscany i Eclipse IAM uzmysłowił mi, że brakuje mi języka spoza JVM, który mógłby być klientem usługi ATOMowej z artykułu. Przecież nie będę wracał do C czy C++, a do C# nie mam narzędzi, a nawet i systemu operacyjnego (od stycznia siedzę wyłącznie na MacOS), więc przypomniało mi się z F#. A może jest coś jeszcze alternatywnego i równie ciekawego?

Zainteresowanym programowaniem w F# proponuję książkę F# Programming na WikiBooks, bo sam poza istnieniem języka i kilku jego cech oraz tym pierwszym programem/skryptem, nic więcej nie wiem.

W planach mam opisanie konfiguracji środowiska do F# na MacOS, ale na razie walczę z zadaniem od Mateusza i lekturą kolejnej książki "Growing Object-Oriented Software, Guided by Tests", więc albo należy cierpliwie poczekać, albo przekonać mnie do zmiany planów :)

28 lutego 2010

Recenzja "Pro JPA 2: Mastering the Java Persistence API" - obowiązkowa lektura dla zainteresowanych JPA 2.0

0 komentarzy
Pro JPA 2: Mastering the Java Persistence APIO mojej lekturze książki Pro JPA 2: Mastering the Java Persistence API panów Mike Keith i Merrick Schincariol (wydawnictwo Apress, grudzień 2009) pisałem już kilkakrotnie (patrz Z Pro JPA 2: zapytania natywne w SQL vs JP QL i peany nt. WAS V7, Boimy się nieznanego, regularny wypoczynek z pływaniem i silnie typizowane zapytania w JPA2 czy Java Persistence (JPA) 2.0 praktycznie - zestawienie środowiska z EclipseLink i Apache Maven 2).

Możnaby powiedzieć, że wiele już o tej książce napisano (na Amazonie jest już 5 recenzji tej książki), ale co mnie niezwykle zaskoczyło to fakt, że to, co ja uważam za plus, inni uważają za minus i odwrotnie. Niby nic dziwnego, ale jak tu wybrać kolejną książkę technologiczną do czytania, kiedy Ci, którzy zdecydowali się na jej kupno są równie zachwyceni, co rozczarowani, a Ci, którzy nie kupili, stracili możliwość kreowania własnego poglądu na sprawę samodzielnie, bo akurat negatywna recenzja książki przypadła im bardziej do gustu. Co zrobić? Całkowicie zaniechać czytania recenzji nie polecam i zachęcam do większego samozaparcia, bo akurat w tym przypadku warto skusić się na tę 500-stronicową cegłę. Dla mnie miała wszystko, czego oczekiwałbym od książki tego pokroju - dokładnego opisu JPA 1.0 i wejścia w temat JPA 2.0. Skoro jest częścią Java EE spodziewałem się również, że będzie wiele o powiązaniach między nimi i tak też było. Znalazłem to, czego chciałem, a nawet więcej.

Nie będę ukrywał, że jednocześnie książka mnie niezwykle zmęczyła i pozwolę sobie na lekturę kolejnej książki...nietechnicznej celem odświeżenia umysłu. Trochę gimnastyki w dziedzinie bardziej efektywnego (i efektownego) zarządzania zadaniami dobrze mi zrobi. Zdecydowanie warto czytać książki, a Pro JPA 2: Mastering the Java Persistence API przybliża zmiany w obszarze JPA 2.0 znakomicie. Pewnie możnaby lepiej, ale 500 stron daje wyobrażenie o wysiłku autorów w wytłumaczeniu niuansów tej specyfikacji (a i tak zawarto w niej jedynie wycinki kodów).

Zainteresowanych moją, angielską recenzją książki zapraszam do lektury Book review: Pro JPA 2: Mastering the Java Persistence API (język podyktowany programem wydawnictw anglojęzycznych "Książka za recenzję").

Książka dostępna jest w Bibliotece Warszawskiego JUGa i czeka na kolejnego zainteresowanego jej lekturą i poznaniem tajników specyfikacji JPA 2.0.

25 lutego 2010

"Prezentacyjna" dyktatura Tomka z Mule ESB na 62. spotkaniu WJUGa - normalnie Git!

8 komentarzy
Warszawska Grupa Użytkowników Technologii Java (Warszawa JUG)Niezwykłem komentować wydarzeń ze spotkań Warszawa JUG, ale ostatnie, 62. spotkanie było prawdziwym kilerem wśród WJUGowych prezentacji i wyróżniało się pośród dotychczasowych spotkań! Po prostu nie mógłbym tego nie skomentować. Technologiczne cudo!

Na WJUGowej scenie wystąpił Tomasz Nurkiewicz z Mule ESB i nie byłoby może w tym wielkiego wydarzenia, bo temat ciekawy, jak wiele innych, ale sposób, w jaki przyszło nam oglądać występy sceniczne Tomka przyprawił niejednego o lekką palpitację serca...z wrażenia, że można tak składnie poprowadzić temat (przede mną siedzieli Mateusz Z. i Jacek K., i co rusz potakiwali głową na moje ochy i echy :)). Jestem pełen podziwu dla warsztatu prezenterskiego Tomka, w którym miejsce znalazły - doskonałe przygotowanie merytoryczne (słuchało się z zapartym tchem) i dobrze dobrane narzędzia - IntelliJ IDEA, mnóstwo uruchomionych wcześniej serwerów - James (SMTP/POP3), JBoss AS (kolejki JMS z ActiveMQ i jego wyśmienitą konsolą webową) i serwer FTP - pewnie FileZilla - oraz Git. I było faktycznie Git! Kiedy zobaczyłem, jak można połączyć prezentację kodu źródłowego w trakcie tworzenia oprogramowania na żywo z odtwarzaniem zmian z lokalnego repo Gita (git co -f [tag]) bez straty czasu na przeklejanie ze schowka czy przeklepywanie z kartki, o mało nie spadłem z krzesła. Najbardziej nie mogłem zrozumieć, jak można się tak dobrze przygotować do prezentacji, aby idealnie wpasować się w kolejne numery tagów w repo. Zrozumiałbym, gdyby poszło v1, v2, v4, v6, ale v1, v2, v3, v4, aż do bodajżę v12 przeszło moje najśmielsze oczekiwania. Możnaby powiedzieć, że prezentacja w dużej mierze składała się z kodowania, albo nawet możnaby to nazwać gitokodowaniem, w którym część programowania zrzucono na barki odtwarzania odpowiedniego taga z repo Gita. Bajecznie!

Nie byłbym sobą, gdyby nie udało mi się wyłapać kilku niedoskonałości w wystąpieniu Tomka, a odważyłem się na ich publikację na blogu, bo są one tak niewinne, że wręcz śmiesznie nazywać je "niedokonałościami". Na pewno zabrakło przejścia przez slajdy. Było ich zbyt mało, abym uwierzył, że wszyscy zrozumieli sens tych inboundów, outboundów, trasformersów, ruterów, komponentów i co tam jeszcze w Mule można znaleźć. I nie ma co marzyć, aby tak było, nawet ze slajdami, ale przynajmniej mi brakowało ich, aby ułożyć sobie wiedzę, zobrazować ją. Na pierwszym slajdzie, gdzie pojawiła się architektura Mule ESB było za mało kolorowo i trochę niewidocznie (nie narzekam na wzrok, a siedząc w trzecim rzędzie miałem już problemy z odczytaniem, co na nim było - obstawiam, że za mną już nic nie było widać). Kiedy przeszliśmy pobieżnie przez pozostałe slajdy widać było, że były i kolorowe, i wyraźniejsze. Szkoda, że nie było nam dane ich zobaczyć.

Drugim elementem było zbyt intensywne skakanie po kodzie, otwartych konsolach serwerów, przeglądarce i tak w kółko. Dawałem radę, ale wymagało to ode mnie dużego skupienia i nie było nawet mowy o...układaniu pytań (!) Albo temat był doskonale przedstawiony przez Tomka, albo sala oniemiała z wrażenia i pytań było niewiele. Zabrakło mi tego, bo mogłoby mi uporządkować wiedzę.

Kolejnym zaskoczeniem dla mnie była zbieżność nomenklatury między Mule ESB a SCA. W sumie chodzi o to samo - mediację i na wejściu (usługi) czy wyjściu (referencje) musi być możliwość dogadania się z nadającym lub odbierającym. W Mule ESB na wejściu mówimy o Inbound'zie, a w SCA mamy usługę z odpowiednim binding, który wyznacza protokół. Na wyjściu, w Mule ESB, mówimy o Outbound'zie, a w SCA o referencji z binding, ponownie. Naturalnie, że chciałoby się, aby określenie protokołu wejściowego i wyjściowego było deklaratywne. I tak mamy w SCA (jeśli istnieje odpowiedni binding), ale i w Mule ESB, przy odpowiednim transformer'ze. Trochę za wiele było dla mnie XMLa i zdecydowanie brakowało narzędzia typu IDE, które konfigurację transformacji dla Mule przygotował wizualnie (zamiast zmuszać mnie do zejścia na poziom XMLa).

Odświeżające było również zobaczyć, kiedy strona HTML nie była udostępniana przez serwer, ale po prostu uruchomiona w przeglądarce i dopiero zatwierdzenie formularza słało dane do serwera - do Mule ESB. Niby nic odkrywczego, jak tak piszę o tym, ale wiedzieć a stosować, to dwie różne sprawy.

I te uruchomione serwery - James, JBoss z ApacheMQ, serwer FTP i Mule ESB. Transportowy mix. Ostatnio potrzebowałem obsługi protokołu SMTP/POP3 i jakoś nie wpadłem, aby uruchomić James. Zachodzę w głowę, aby znaleźć odpowiedź dlaczego. Widać za mało chciałem i trzeba mi było pojawić się na występie Tomka. Nauka od lepszych mobilizuje do pracy!

Podsumowując, przed moimi występami w Krakowie i Poznaniu muszę:

* przygotować wszelkie przykłady aplikacyjne w lokalnym repo - git lub hg
* zaprezentować działający przykład po pierwszym slajdzie wprowadzającym
* omówić aplikację slajdami
* (kiedy starczy czasu) rozpocząć tworzenie aplikacji od zera, ale bez zbędnej pisaniny - git co -f [tag] zrobi swoje!
* pamiętać o pytaniach do publiki (jak to miało miejsce podczas spotkania z Kirkiem)
* wrócić do slajdu początkowego z architekturą aplikacji

Do poznania (ale w sensie nauki, a nie wyjazdu na konferencję - zbieżność z Poznaniem przypadkowa :)):

* Mule ESB - pojawiły się książki nt. temat, więc będzie co i dlaczego czytać
* Apache CXF - książka o nim już u mnie leży, więc tym bardziej nie mogę się jej doczekać

A jak Wam podobała się prezentacja? Nagranie z niej już wkrótce w Sieci.

p.s. Poza Tomkiem, wystąpił również Łukasz Dywicki, ale nie dane mi było wysłuchać go, poza 1. slajd z mnóstwem wersji i softu, więc korzystam z...prawa do milczenia.

23 lutego 2010

Nowy serial "SCA praktycznie" - Zestawienie środowiska z Apache Tuscany i Eclipse IAM

3 komentarzy
Apache TuscanyPisałem o SCA wielokrotnie - cała masa wpisów w kategorii sca, więc przed zbliżającymi się konferencjami - Studenckim Festiwalu Informatycznym (SFI) 11-13. marca w Krakowie oraz 4Developers 26. marca w Poznaniu, ze mną w roli prelegenta o SCA, wystarczyło jedynie (?) odświeżyć sobie wiedzę nt. Apache Tuscany i zmian w nim.

Pomysł narodził się, kiedy w trakcie pisania redbooka (książki o technologiach IBM) dotyczącym IBM WebSphere Application Server V7 Feature Pack for Service Component Architecture (w skrócie SCA FeP) dostałem jednocześnie zaproszenie na obie konferencje. Mając głowę w SCA nie miałem wątpliwości, o czym chciałbym powiedzieć. Jest wiele tematów, które nazwałbym bardziej chwytliwymi i właśnie to był główny powód, dla którego postawiłem na SCA - niewielkie jego użycie w naszych rozwiazaniach. A może okazać się, że niepotrzebnie. Nadchodzą cieplejsze dni - wiosna, a po niej lato (nic odkrywczego), więc niejednemu marzy się większa aktywność poza komputerem. Gdyby tak móc zrzucić część naszych obowiązków na barki kogoś innego?! Albo jeszcze lepiej, gdyby tak coś, a nie ktoś, zrobił za nas większość roboty, na pewno byłoby więcej czasu (który i tak wielu zmarnowałoby na pierdoły w Sieci - biedaczyska :)).

W tym klimacie, pomyślałem sobie, że ja (ów ktoś z poprzedniego akapitu) i SCA (owe coś) damy Wam szansę z artykułem Service Component Architecture (SCA) praktycznie - zestawienie środowiska z Apache Tuscany i Eclipse IAM, z serii "SCA Praktycznie". Nigdy nie zgłębiałem protokołu Atom i nie sądziłem, że kiedykolwiek będę, a tu proszę, wystarczyło kilka pytań przy Redbooku, abym zechciał sprawdzić to w Apache Tuscany - darmowego kontenera SCA. Jeśli dodam, że z nim i binding.atom, możemy praktycznie poznać podejście REST, to nie mam złudzeń, że tyle akronimów wystarczy, aby skłonić Was do lektury. Zajmie niespełna kwadrans, a może zaoszczędzić całe godziny. Chętnie posłucham, czy faktycznie. Komentarze mile widziane - priv, albo do tego wpisu.

p.s. A czy Ty już oddałeś/-aś swój głos na Notatnik w konkursie Bloger 2009 Roku? Ja też lubię prezenty. ;-)

21 lutego 2010

Eclipse pomocny przy NPE w AtomBindingListenerServlet.doPost() z Apache Tuscany

0 komentarzy
Siedzę przy Service Component Architecture (SCA) z Apache Tuscany i nie pamiętam już, dlaczego wybrałem na rozpoznanie binding.atom. Nie ma to znaczenia, ani nie ma znaczenia, czym jest SCA i owe (magiczne) binding.atom. Przeczytacie w nadchodzącym artykule, a niektórzy usłyszą na nadchodzących konferencjach - Studenckim Festiwalu Informatycznym (SFI) 11-13. marca w Krakowie oraz 4Developers 26. marca w Poznaniu, na których będę prezentował tę technologię (i liczę na Wasz aktywny udział).

Tym razem przyszło mi rozwiązać problem z NPE w Tuscany. Zaczęło się stworzeniem odpowiednich (tak przynajmniej sądziłem początkowo) klas i podczas uruchomienia wciąż tylko:
java.lang.NullPointerException
at org.apache.tuscany.sca.binding.atom.provider.AtomBindingListenerServlet.doPost(AtomBindingListenerServlet.java:590)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:842)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:648)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
at org.apache.tuscany.sca.core.work.Work.run(Work.java:63)
at org.apache.tuscany.sca.core.work.ThreadPoolWorkManager$DecoratingWork.run(ThreadPoolWorkManager.java:215)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:637)
Pracuję z Tuscany 1.6, którego źródeł nie ma w repozytorium mavenowym, a wtyczka Eclipse IAM uparcie przy swoim "Nie ma mowy o podłączeniu źródeł do zależności mavenowych!".

Eclipse IAM - Java Source AttachmentKoniecznie potrzebowałem podpiąć źródła modułu tuscany-binding-atom-abdera-1.6.jar, aby namierzyć przyczynę NPE. Mogłem ręcznie, i tak faktycznie początkowo zrobiłem, ale po kwadransie zarzuciłem to, bo nie tylko, że zaczęło zajmować zbyt wiele czasu, ale i zażyczyłem sobie przejrzenie struktur i ich danych na żywo.

Pamiętam, że miałem podobne "chciejstwo" w IDEA i chyba NetBeans, i nie poszło mi z jego realizacją tak prosto, jak w Eclipse. Wystarczyło podpiąć źródła do projektu przez Build Path > Link Source...

Eclipse - Build Path | Link Source..., aby związać zewnętrzny katalog ze źródłami z projektem...

i w końcu uruchomić projekt w trybie śledzenia (ang. debug).

Eclipse - DebugNie długo trwało, abym się przekonał, że obsługa protokołu Atom przez binding.atom w Tuscany (oparta na Apache Abdera) wymaga właściwego komunikatu przy POST, ale to już historia na inną okazję.

Najważniejsze, że użyte narzędzie - Eclipse IDE - pozwoliło mi na namierzenie i rozwiązanie problemu w kilka chwil, bez znajomości niuansów Atoma. Nie obyło się bez ich poznania, ale to było przy okazji i wchodziło samo do głowy, z nieukrywaną przyjemnością.

Jeszcze tylko zgłosić kilka problemów w JIRA dla Apache Tuscany, aby inni nie musieli przechodzić przez to samo ponownie.

19 lutego 2010

62. spotkanie Warszawa JUG - Tomasz Nurkiewicz i Łukasz Dywicki z "Mule ESB vs. Apache ServiceMix"

2 komentarzy
Warszawska Grupa Użytkowników Technologii Java (Warszawa JUG)Warszawska Grupa Użytkowników Technologii Java (Warszawa JUG) zaprasza na 62. spotkanie, które odbędzie się we wtorek, 23. lutego o godzinie 18:00 w sali 5440 Wydziału MIM UW przy ul. Banacha 2 w Warszawie.

Temat: Mule ESB vs. Apache ServiceMix
Prelegenci: Tomasz Nurkiewicz, Łukasz Dywicki

W trakcie prezentacji Tomasz i Łukasz stworzą działający system, integrujący różne aplikacje przy użyciu technologii takich jak JMS, WS, HTTP, JDBC, ale też poczciwej poczty elektronicznej, FTP czy... współdzielonych plików Excel. Ich celem jest oprogramowanie od zera pełnego procesu biznesowego, wykorzystującego komunikację synchroniczną i asynchroniczną z systemami zewnętrznymi. Ponadto, poruszą fundamentalne cechy ESB, takie jak transformacje, filtrowanie i routowanie komunikatów.

Atrakcją wieczoru będzie integracja przykładowego systemu jednocześnie przy użyciu Mule ESB (Tomek) i Apache ServiceMix (Łukasz). Nie spodziewajcie się wskazania tego najlepszego, ale demonstracji różnic praktycznie, aby umożliwić każdemu słuchaczowi podjęcie decyzji o wyborze samodzielnie.

Gościem specjalnym będzie Gregory Brackett, dyrektor sprzedaży MuleSoft na terenie Europy. Zainteresowani komercyjnym wsparciem i dodatkowymi funkcjami Mule ESB Enterprise będą mieli niepowtarzalną okazję porozmawiać z nim bezpośrednio.

Łukasz Dywicki jest założycielem firmy Code-House. Zawodowy programista od 2005 roku. Programowaniem w Javie zajmuje się od 3 lat. W 2008 roku pracował jako główny programista przy budowaniu magistrali usług w oparciu o Apache ServiceMix w jednym z polskich banków.

Tomasz Nurkiewicz jest absolwentem Wydziału Elektroniki i Technik Informacyjnych Politechniki Warszawskiej. Programista Java EE od 3 lat, obecnie w JAVART. Posiada certyfikaty SCJP, SCJD, SCWCD i SCBCD. W wolnych chwilach pisuje artykuły na swojego bloga: http://nurkiewicz.blogspot.com.

Planowany czas prezentacji to 1,5h, po której planuje się 15-30-minutową dyskusję.

Wstęp wolny

Zapraszam w imieniu prelegentów i grupy Warszawa JUG!

16 lutego 2010

Z Pro JPA 2: zapytania natywne w SQL vs JP QL i peany nt. WAS V7

7 komentarzy
Lektura książki Pro JPA 2: Mastering the Java Persistence API z Apress trwa i nie przestaje mnie zdumiewać. Może nawet nie chodzi o nią samą, ale o to, co ma JPA2, co sprawia, że to właśnie sama specyfikacja mnie tak zdumiewa. Niektóre rzeczy były już w JPA1, więc tym bardziej lektura Pro JPA2 sprawia mi tyle przyjemności, bo co strona, to coś nowego. Pisałem, że mam w zwyczaju oznaczać sekcje książki do dogłębniejszego zbadania i kiedy zwykle w książkach jest kilka akapitów per rozdział, tak w Pro JPA2 są to prawie całe strony (!) "Prawie robi różnicę", ale jak by tego nie wartościować, materiału do przetrawienia jest cała masa.

Kiedy to piszę, zaczynam zastanawiać się, czy mógłbym tę książkę polecić adeptom JPA. Książka zakwalifikowana jest dla średniozaawansowanych - User level: Intermediate. Z jednej strony jest w niej wszystko, co poleciłbym początkującym, ale z drugiej jest tego tyle, że czytanie specyfikacji byłoby łatwiejsze - nie ma tam tylu dywagacji. Owe dywagacje sprawiają, że książka należy do obowiązkowych lektur każdego programisty JEE i nie ma co jej porównywać ze specyfikacją, ale jeśli mi rozdział (około 30-40 stron) zajmuje 3-4 dni, aby całość przetrawić, to jak tu polecić ją początkującym?! Serca nie mam?!

Jestem przy rozdziale 11. "Advanced Topics" (strona 333) i mam wrażenie, że czytam ją całe wieki. Z jednej strony, ciągnie mnie do niej, aby poznać więcej, z drugiej zaczynam powątpiewać w sens tak kurczowego się jej trzymania i dobrnięcia do końca. Nie będę ukrywał, że mnie trochę zmęczyła. Coś mi mówi, że gdyby była podzielona na dwie części, byłoby ją przyjemniej czytać. Przypomina mi "Wprowadzenie do algorytmów" Cormena i in., gdzie można znaleźć wszystko o algorytmach i faktycznie poleca się ją początkującym, ale przebrnięcie przez nią zabiera wieki. Fajnie, że można wszystko znaleźć w jednym miejscu, ale nawet najbardziej wytrwali padają w połowie i tylko zdrowy rozsądek podpowiada, że po zakończeniu satysfakcja gwarantowana. Wiedzy po pachy i aż by się chciało przeskoczyć kilka stron, aby mieć to za sobą.

Możnaby zapytać, czy warto tak się katować czytaniem, skoro czytanie powinno sprawiać przyjemność, a z moich słów można wyczytać ból i cierpienie. Możnaby to porównać do wyjścia na siłownię, bieżnię, wiosła, basen w wydaniu zaawansowanym. Wiemy, że będzie bolało i ma boleć, bo bez tego nie będzie wyników. Podobnie jest z Pro JPA 2 (i było z Cormenem) - bolało, ale ostatecznie wiedza była ponadprzeciętną i nawet, jeśli wszystkiego się nie spamiętało, to wiedza, że tam to jest nie raz uratowała tyłek. Bolało i pewnie nie raz jeszcze zaboli, ale lepsze to, kiedy chcemy, niż później podczas projektów, których jedynym rezultatem i tak jest zatonięcie, tyle że okupione większymi stratami i ślęczeniem po nocach (czego nikomu nie życzę).

Wszedłem w temat zaawansowanego JPA, w świat zapytań natywnych w SQL. W JP QL naszym modelem jest model obiektowy, a w SQL model relacyjny (czy jak to ostatnio ujął Michał M. na spotkaniu Warszawa JUG - tabelkowy). Wybór należy do piszącego zapytanie, do czego mu bliżej - obiekty czy tabelki. Co mnie jednak dzisiaj niezwykle przyjemnie zaskoczyło, to fakt, że bez względu na wybór języka zapytań, programista i tak korzysta z tych samych obiektów - wciąż mamy javax.persistence.Query lub wprowadzone w JPA2 - javax.persistence.TypedQuery (!) Czyż to nie jest wspaniałe w tej specyfikacji, że bez względu na język SQL vs JP QL zmiana w wielu przypadkach odbywa się bez zmiany kodu?! Kiedy dodam do tego, że wprowadzenie zapytań nazwanych (mianowanych?, ang. named queries) umożliwia nadpisywanie ich przez deskryptor persistence.xml, wtedy można do zespołu wdrożyć gościa, którego zadaniem będzie optymalizowanie zapytań. Pasuje mu pisać w SQL, niech będzie, woli podciągnąć się z technologii JEE, wchodzi w JP QL. Najważniejsze, że nie trzeba schodzić na poziom JDBC, aby tworzyć wysokowydajną obsługę danych w bazie. Programiści nie zmieniają swoich konstrukcji programistycznych i prą do przodu, a ów człowiek od zapytań, aka człowiek-pytajnik, optymalizuje zapytania w cieple domowego kominka. Niby oczywiste, ale dla mnie niezwykle odświeżające. Kiedy dodam, że wynik zapytania, to wciąż encje zarządzane przez kontekst utrwalania, wtedy świat staje się ułożony. Pamiętajmy jednak, aby zapytanie SQL pobierało całość danych z bazy danych, bo w przeciwnym wypadku, część danych nie spłynie do encji i podczas zatwierdzenia transakcji, albo przy javax.persistence.EntityManager.flush() dane zostaną wyczyszczone (zamazane pustymi wpisami). Zapewnie nie byłoby to czymś, czym chcielibyśmy się pochwalić klientowi ;-)

Chciałoby się popróbować z JPA2 i w zasadzie każdy może. JPA2 jest częścią JEE6, ale może żyć i bez niej. Jak to miało miejsce w JPA1, tak i w JPA2, uruchomienie w samodzielnych aplikacjach czy wręcz środowiskach zubożonych, np. w wersji wcześniejszej JEE5, jest jak najbardziej możliwe i wspierane specyfikacyjnie. Bodajże wczoraj czytałem zajawkę o wsparciu JPA2 przez Hibernate 3.5 CR1, więc pasjonaci Hibernate mają możliwość, a Ci spoza jego strefy wpływów mają do wyboru referencyjną implementację JPA2 - EclipseLink, albo nieodstającego od peletonu Apache OpenJPA. Zdaje się, że Hibernate, który miał niebagatelny wpływ na specyfikację JPA, zaczyna oddawać pola konkurencji. Mamy wybór, a to jest najważniejsze i w sumie (początkowo) nie ma znaczenia, co działa pod spodem.

Ostatnie tygodnie spędziłem nad redbookiem (książki o technologiach IBM) dotyczącym IBM WebSphere Application Server V7 Feature Pack for Service Component Architecture (w skrócie SCA FeP). Zajmowałem się częścią administracyjną, która jest niezwykle prosta, zakładając znajomość administacji IBM WebSphere Application Server V7 samą w sobie. Największym wyzwaniem było stworzenie bogatej technologicznie aplikacji SCA, ale kiedy okazało się, że wraz z SCA FeP przychodzi wiele przykładów, temat był do obsłużenia w ciągu tygodnia, dwóch (niestety, jak to zwykle bywa, sam rozruch trwał prawie 2 miesiące - czas Nowego Roku nie sprzyjał rozpoznaniu terenu).

Jeśli ktokolwiek parał się z SCA, to wie, że jedną z darmowych implementacji jest Apache Tuscany. I SCA FeP jest po prostu opakowaniem Tuscany w odpowiednie rozszerzenia WASowe. Podobnie było z EJB3 czy Web Services z JEE5 dla WAS 6.1. Było, ale kto tego używał? Na moje nieszczęście niewielu. Niestety, ale produkty stosowe, np. IBM WebSphere Process Server V6.2 nie wspierały tych rozszerzeń, więc w produkcyjnych środowiskach, gdzie królowało SCA i WS-BPEL z WPSem, o JEE5 można było zapomnieć chyba, że przez wykonywanie zdalnych usług Web Services, ale to zawsze można.

IBM WebSphereNiezwykłem do wychwalania produktów mojego pracodawcy obawiając się oskarżeń, że jest to spowodowane głównie, gdzie pracuję, a nie zaletom technologicznym i jakoś tak trwało, że ja swoje, a IBM swoje - technologicznie, oczywiście. Z pewnością na moją decyzję miała również wpływ cena, która zwykle w naszych (=moich i czytelników mojego bloga) rozwiązaniach oscylowała głównie wokół bezwzględnego zera, ze względu na użycie produktów darmowych, otwartoźródłowych. Kolejnym powodem, może nawet ważniejszym, było opóźnienie technologiczne w porównaniu z darmowymi rozwiązaniami. Kiedy królowało JEE5 najnowsze wydanie IBM WebSphere Application Server V6.1 to wciąż jedynie (?) J2EE 1.4 z rozszerzeniami do EJB3 i Web Services. Dobrze, że WAS 6.1 to OSGi i dał tym samym możliwość zabawy z nowościami JEE5 przez rozszerzenia zwane Feature Packs. Zbierając to wszystko, niewiele można było u mnie znaleźć o produktach z rodziny IBM WebSphere mimo, że duża część mojego czasu była konsumowana właśnie przez nie.

I tak trwałem w tym stanie zawieszenia między rozwiązaniami OSS, a IBM, aż do grudnia 2009, kiedy pojawiły się produkty na bazie WASv7. Najnowsze wydanie WAS V7 zmienia diametralnie oblicze rynku rozwiązań JEE. W końcu mam(y) wsparcie JEE5 z JSE6 i OSGi pod spodem. To się musi podobać, szczęśliwcom, których firmy weszły w tą wersję. Nie ma wciąż wielu produktów realizujących JEE6, więc sprawa nabrała rumieńców i moloch typu IBM w końcu dotrał do punktu, w którym WAS V7 wybroni się technologicznie z każdego przetargu. W końcu! Sprzedawcom na pewno zrobiło się lepiej/łatwiej.

Jeśli ktokolwiek zadaje sobie pytanie, po co to piszę i czy ma to jakikolwiek związek z JPA2, albo innymi specyfikacjami wokół JEE, to śpieszę donieść, że pojawiły się dwa otwarte programy IBM WebSphere Application Server V7 Feature Pack for OSGi Applications and Java Persistence API (JPA) 2.0 Open Beta. Z nimi, pod płaszczykiem nauki WAS V7 możemy poznawać nowości JEE6 i OSGi Enterprise z wykorzystaniem Apache OpenJPA 2 i Apache Aries. Czyż nasze administracyjno-programistyczne boje z WASem, nie wydają się być od razu przyjemniejsze? W końcu na coś się zda nasz trud i pot. Jeszcze nie tak dawno, zapisałem się do grupy Apache Aries, aby śledzić poczynania w kontekście korporacyjnego OSGi, gdzie łączy się JEE i OSGi w spójną całość, a tu IBM wyjeżdża z możliwością uruchomienia obu na WAS V7. Niezwykłem wychwalać WASa, bo do wersji 6.1, był po prostu znośny, gdzie moja nauka specyfikacji, to zawsze był krok przez nim. Teraz, z WAS V7, sprawa w końcu przybrała inny obrót - teraz ja muszę nadgonić, bo mam go z przodu. Biorąc pod uwagę inne zalety WAS V7, mogę z czystym sumieniem polecić go jako ten serwer aplikacyjny do rozwiązań komercyjnych. Po 4 latach pracy w IBMie, w końcu mogę odetchnąć, że ja też już mogę bawić się najnowszymi zabawkami i jeszcze mi za to płacą! I to jest w tym wszystkim dobre. Jeszcze tylko niech IBM WebSphere Process Server podskoczy do SCA 1.0 i będzie naprawdę cacy. Na razie ni widu, ni słychu.

A czy Wam też płacą za przyjemności w pracy, czy się wciąż katujecie niszowymi rozwiązaniami?! Wytrwałości. I Wam się też, kiedyś powiedzie! ;-)

p.s. Ci, którzy dobrnęli do końca, mogą odetchnąć i z czystym sumieniem oddać swój głos na Notatnik w konkursie Bloger 2009 Roku. Będzie tego więcej.