18 grudnia 2010

Book review: WebSphere Application Server for Developers V7

0 komentarzy
Właśnie ukończyłem lekturę książki, a właściwie publikacji, jak to zwykle nazywa się IBM Redbooks - WebSphere Application Server for Developers V7. Publikacja jest całkowicie bezpłatna w formie elektronicznej i, jak to ująłem w recenzji, niestaty nie zasługuje na swój tytuł. Jest aż nadto skoncentrowana, aby wprowadzić czytelnika w aspekt administracji WASv7 niż na przedstawieniu Java EE 5 i niewiele można znaleźć informacji nt. czego oczekuje się od programisty, który ma wdrożyć taką aplikację na WAS7. Nie powiem, żeby było mało, ale zdecydowanie za mało, jak na książkę z takim tytułem. Dodatkowo, rozdział dotyczący EJB3 oraz JPA jest wręcz nie-JEE5.

Dla mnie osobiście było to swego rodzaju podsumowanie wiedzy nt. okiełznania WAS7, aby nie sprawiał problemów, kiedy przyjdzie mi wdrażać aplikacje korporacyjne. Nie całkiem niskopoziomowo, ot akurat, aby panować nad sytuacją. Książkę czyta się niezwykle szybko i wiedza sama wchodzi do głowy, zakładając, że WAS7 jest tym materiałem, który w głowie czytającego powinna się w ogóle znaleźć. Osąd pozostawiam Tobie.

Pełną recenzję w języku angielskim można przeczytać na moim Wiki w Book review: WebSphere Application Server for Developers V7.

15 grudnia 2010

74. spotkanie Warszawa JUG - Daniel Janus z "Jak Clojure koloruje mapy"

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

Temat: Jak Clojure koloruje mapy
Prelegent: Daniel Janus

Podczas prezentacji Daniel opowie o:

- co powstaje po przemieszaniu liter w słowie Clojure i co z tego wynika
- dlaczego programowanie w Clojure przypomina operowanie na żywym organizmie
- jak na różne sposoby pokolorować mapę Europy za pomocą Clojure
- jak skonstruować do tego interfejs webowy
- jak dorobić obsługę arkuszy kalkulacyjnych
- jak zbudować łatwo instalowalną aplikację w postaci jednego pliku .jar

A wszystko to podczas prezentacji przeplatanej z tworzeniem kodu "na żywo". Nie zakłada się żadnej znajomości Clojure -- objaśnienia kolejnych cech języka pojawi się w miarę jak będą potrzebne, bez wgłębiania się w szczegóły.

Daniel Janus zajmuje się językami funkcyjnymi od dziesięciu lat, programuje w językach z rodziny Lisp od czterech lat, a od ponad roku współtworzy firmę Fablo, w której Clojure jest główną używaną technologią. Na swoim blogu pisze m.in. o Clojure po polsku.

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

Wstęp wolny

Zapraszam w imieniu prelegenta i grupy Warszawa JUG!

14 grudnia 2010

33rd degree i ja z "EJB 3.1 vs Contexts and Dependency Injection (CDI) and Dependency Injection for Java in Java EE 6"

5 komentarzy
Skoro większość z Was wskazuje na Java EE 6 jako temat przewodni grudnia, to może niech i tak zostanie w nadchodzącym roku 2011. Ot, taka mała zapowiedź dalszych poczynań w blogosferze oraz konferencyjnie.

W mojej skrzynce pocztowej znalazłem wiadomość o nadchodzącej konferencji 33rd degree. Niewiele o niej wiadomo, bo temat bardzo, bardzo świeży. Mógłbym założyć, że na tyle, że jestem pierwszym, który pisze o tym na blogu (poza zapowiedzią u samych organizatorów - Wymarzona konferencja nadchodzi).

Piszę o tym, gdyż jest to kolejna konfencja javowa w Polsce, obok JDD, NYAC, GeeCON, Javarsovia, warsjawa, java4people czy 4Developers. Mimo, że wiele z nich cieszy się renomą, widać, że wciąż jest miejsce dla kolejnej. Do grona "uczestników" sceny konferencyjnej dołącza 33rd degree. Jak na tak niewielki kraj, możemy powiedzieć, że tyle u nas konferencji co partii politycznych (!) Może kiedyś dojdzie do jakiś fuzji konferencyjnych?! Tak czy owak, będzie wiele okazji, aby się spotkać i wymienić doświadczeniami. Będę miał w tym swój wkład!

Należy dodać, że markę 33rd degree chce się zbudować na "Top quality speakers that usually talks at big conferences and were chosen many times as Rock Stars" oraz "All speakers were invited personally and validated in practice. No surprises expected. Only great talks." (za stroną domową konferencji).

I teraz o moim wkładzie, a raczej wykładzie. Tak, tak, będę miał swoje 60 minut na przedstawienie tematu EJB 3.1 vs Contexts and Dependency Injection (CDI) and Dependency Injection for Java in Java EE 6. Na razie mam jedynie szkic, co chciałbym przekazać słuchaczom i w jaki sposób, aby dotrzymać kroku innym wystąpieniom, gdzie slajdy należy potraktować za...relikt przeszłości i eksponat muzealny. Sprawa się będzie klarowała w kolejnych miesiącach.

Pora na rozlosowanie specjalnych kodów promocyjnych. Mam ich 10 (i nie zawaham się ich użyć pro publico bono). Niech jednak będzie to transakcja wiązana (bodaj jedyna legalna forma obdarowywania bezkosztowo w PL), gdzie ja Tobie, a Ty mi i jesteśmy kwita. Proszę o wyrażenie swojej opinii nt. połączenia wystąpienia z wcześniej przygotowanymi nagraniami (coś ala skrinkasty) i lokalnym repozytorium wersji kodów źródłowych, aby zamiast klepania (rękoma i ustami) interakcja między prelegentem a uczestnikami przebiegała znacznie szybciej i bez ryzyka utraty tempa czy toku rozumowania. Rola prelegenta sprowadziłaby się do zaprezentowania nagrań i uzupełniania ich słowno-muzycznie. Czy to ma rację bytu? Wsród osób, które wyrażą swój głos w komentarzu do tego wpisu rozlosuję po jednym specjalnym kodzie promocyjnym na konferencję 33rd degree.

09 grudnia 2010

Temat przewodni na grudzień - Java EE 6

3 komentarzy
Ankieta określająca temat przewodni na miesiąc grudzień 2010 dobiegła końca z 85 głosami, w których specyfikacja Java EE 6 zdobyła najwięcej głosów, nieznacznie więcej niż EJB 3.1 i JSF 2.0. Bardzo zdumiewające dla mnie było wskazanie na OSGi jako bardziej interesującego niż CDI. A może nie jest to wskazanie na bardziej interesującą technologię, ale na mniej rozpoznaną?!
Wyniki ankiety tematu przewodniego grudnia 2010
Tym samym rozpoczynam analizę JEE6, w której głównymi graczami będą - dokument standaryzacyjny JSR 316: Java Platform, Enterprise Edition 6 (Java EE 6), serwery aplikacyjne: GlassFish 3.1, Apache Geronimo 3.0, IBM WebSphere Application Server V8 ze zintegrowanymi środowiskami programistycznymi NetBeans IDE 7.0 i IBM Rational Application Developer V8.

Akurat teraz prowadzę 4-dniowe autorskie warsztaty dla programistów (korzystających z Java EE 5 z RAD8) i administratorów WAS7, w których staram się minimalizować przedstawienie tematu od strony teoretycznej, kładąc nacisk na praktyczną stronę pracy z w/w produktami. Skłamałbym, gdybym powiedział, że udało mi się odpowiedzieć na wszystkie pytania, a było również wiele niezwykle inspirujących. Zebrałem tym samym mnóstwo tematów do przyszłych skrinkastów, więc można spodziewać się ich jeszcze kilka w tym roku i wszystkie (a przynajmniej ich większość) wokół JEE. Końcówka 2010 zapowiada się pracowita nagraniowo. W końcu pojawiła się wena, z którą zamierzam wejść w 2011!

p.s. Uruchomiłem nową ankietę "Preferowany sposób nauki JEE6", w której badam zainteresowanie różnym sposobem prezentacji JEE6. Znajdziesz ją po prawej na moim blogu. Zapraszam.

06 grudnia 2010

Odkrywcze podobieństwo Java SE i Java EE z CDI na czele

5 komentarzy
Każdy, kto programuje w Javie "siedzi" na poziomie Java Standard Edition, w skrócie Java SE, czy wręcz JSE. Obecna wersja to 6.0. Mamy do dyspozycji cały zestaw interfejsów i klas - wszystko objęte terminem Java SE API. Dokumentacja do aktualnej wersji znajduje się na stronach Java Platform, Standard Edition 6 API Specification. To powinno być oczywiste i należy do podstawowej wiedzy programisty Java.

Co jednak nie jest już tak oczywiste, to jak niewiele różni obecnie JSE od kolejnego zestawu Java API o nazwie Java Enterprise Edition, w skrócie Java EE, albo po prostu JEE. Zwracam Twoją uwagę na termin "kolejny zestaw Java API". Od lat siedzę przy obu zestawach - JSE i JEE, a jednak dopiero teraz dotarło do mnie, jak niewiele je różni - wszystko za sprawą środowiska uruchomieniowego, które określa zachowanie naszej aplikacji.

Do wersji JSE 5.0 wcale nie było oczywistym, że umiejętność programowania na platformie JSE jest równoznaczna z JEE. Nie grzebiąc za długo w historii JEE postawię tezę, że umiejętność posługiwania się JSE była dalece niewystarczająca od posługiwania się JEE. Wiele się być może nie zmieniło chyba, że nie mówimy o właściwym użyciu API (semantyce), a jedynie umiejętności użycia konstrukcji (składni). Tu widzę duże uproszczenia.

Od wersji JSE5 mamy adnotacje. Możliwość dopisywania metainformacji na różnym poziomie naszych bytów javowych - interfejsów, klas, pól i metod. Szybko zauważono ich zaletę i zaraz wprowadzono na JEE. I jakkolwiek tworzenie aplikacji na poziomie JSE zmieniło się nieznacznie, to w przypadku JEE postęp jest ogromny.

Poniżej klasa do uruchomienia na platformie JSE.
package pl.jaceklaskowski.blog;

public class BlogEntry {
    private String title;

    public BlogEntry(String title) {
        this.title = title;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
    
    public BlogEntry create(String title) {
        return new BlogEntry(title);
    }
}
Od wersji JSE5 można dodawać do klasy metadane w postaci adnotacji. Dwoma z adnotacji dostarczanych w ramach zestawu JEE5 są @Entity oraz @Id.
package pl.jaceklaskowski.blog;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class BlogEntry implements Serializable {

    @Id
    private int id;
    private String title;

    protected BlogEntry() {
    }

    public BlogEntry(String title) {
        this.title = title;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public BlogEntry create(String title) {
        return new BlogEntry(title);
    }
}
Poza dodaniem tych dwóch adnotacji pojawiły się również zmiany w samym kodzie klasy. I jakkolwiek samo użycie adnotacji nie wymaga ich, to użycie na platformie JEE może uczynić je obowiązkowymi do poprawnego użycia klasy. Aby ujawniła się ich obowiązkowość konieczne jest uruchomienie klasy w ramach platformy JEE, tj. serwera aplikacyjnego JEE (którego zadaniem jest udostępnienie usług respektujących wytyczne specyfikacji JEE) oraz użycie konstrukcji aktywujących daną funkcjonalność. Innymi słowy, samo uruchomienie w ramach serwera aplikacyjnego JEE nie jest równoznaczne z użyciem usługi, która interpretuje adnotacje. Nie zamierzam jednak tym razem wnikać w szczegóły i unikam wyjaśnień wskazując podręcznik The Java EE 6 Tutorial, a szczególnie rozdział Part VI Persistence. Obowiązkowa lektura dla każdego, któremu marzy się tworzenie aplikacji korporacyjnych w JEE, o których w kolejnych wpisach.

I te małe dodatki - metadane w postaci adnotacji - mnie dzisiaj zachwyciły. Podczas lektury artykułu w Sieci na temat tworzenia Web Services, olśniło mnie, że aplikując adnotacje do klasy i uruchamiając ją w ramach serwera aplikacyjnego dostajemy wiele przy tak niewielkim nakładzie pracy.

Przyjrzyj się poniższej klasie.
package pl.jaceklaskowski.blog;

public class BlogPanel {
    public Blog createBlog(String title) {
        return new Blog(title);
    }
}
Niewiele w niej cech aplikacji korporacyjnej, którą cechuje użycie bazy danych (często wielu równocześnie), dostęp do innych zasobów transakcyjnych, różne protokoły dostępowe (wszechobecny HTTP może być uzupełniany przez chociażby FTP czy IMAP) czy bezpieczeństwo. To tylko niektóre z możliwych usług serwera aplikacyjnego JEE.

Przyjrzyjmy się kolejnej wersji wcześniejszej klasy BlogPanel, która różni się jedynie adnotacją @Stateless.
package pl.jaceklaskowski.blog;

import javax.ejb.Stateless;

@Stateless
public class BlogPanel {
    public Blog createBlog(String title) {
        return new Blog(title);
    }
}
Tym razem, poza @Stateless, nic więcej się nie zmieniło. Czyżby?

Jeśli uruchomisz tę klasę na serwerze aplikacyjnym JEE, okaże się, że wykonanie metody createBlog(String title) pociągnie za sobą wzbudzenie monitora transakcji i uruchomienie dedykowanej transakcji, która rozpocznie się i zakończy z rozpoczęciem i zakończeniem wykonania ciała metody. Dodatkowo, każdemu będzie wolno wykonać tę metodę, ale samo sprawdzenie zostanie wykonane. Jak widać, użycie tak niewinnie wyglądającej adnotacji @Stateless może odmienić zachowanie aplikacji, a jej czas wykonania wydłuży się kosztem opakowania jej usługami serwera.

Tak wiele, tak niewielkim kosztem - odkrywcze podobieństwo między JSE a JEE.

W JEE6 pojawiło się rozszerzenie oferowanego API o pakiety javax.enterprise.inject, javax.enterprise.context oraz javax.enterprise.event, które materializują wytyczne specyfikacji JSR 299: Contexts and Dependency Injection for the Java EE platform, w skrócie CDI. Sama specyfikacja jest częścią Java EE 6 i przez to obowiązkowa w ramach serwerów aplikacyjnych JEE6 (tu należy zwrócić uwagę na wersję wspieranego zestawu JEE - musi być 6).

I tutaj było moje największe odkrycie, a w zasadzie faktyczne przetrawienie wszystkiego, co do tej pory usłyszałem na temat JEE6, EJB 3.1, JSF 2.0, JPA 2.0, Servlets 3.0 i kilku innych.

Wszystkie byty na platformie JEE6 są opisywalne przez adnotacje.

Z tego płynie bardzo istotna wiedza pozwalająca zrozumieć sedno działania serwera aplikacyjnego JEE i związywania usług do odpowiednich składowych (komponentów) naszej aplikacji. Wystarczy zaaplikować adnotację i jak za dotknięciem czarodziejskiej różdżki pojawi się automagicznie pożądana funkcjonalność (ortogonalna do funkcjonalności biznesowej, którą oprogramowujemy i tu jest właśnie miejsca dla naszej inwencji twórczej).

Skoro CDI to specyfikacja odnosząca się do definiowania kontekstu funkcjonowania bytu zwanego ziarnem zarządzanym (ang. managed bean) - wcześniej termin zarezerwowany przez specyfikację JSF) i to właśnie kontekst wyznacza jego cykl rozwojowy (ang. lifecycle) - przejścia między stanami, w których wyróżnionymi są utworzenie i zniszczenie obiektu, wtedy można postawić tezę, że wszystko, co mamy do dyspozycji jako programiści JEE6 można oprzeć na CDI.

W ten sposób Resin - kontener webowy - oferuje EJB 3.1 przez CanDI. Pewnie będzie można zauważyć podobny trend w innych serwerach aplikacyjnych.

CDI jest również możliwe do uruchomienia na platformie JSE6, ale w takiej konfiguracji będziemy musieli rolę serwera przejąć na siebie i oprogramować w ramach aplikacji. Nawet, jeśli CDI i JEE6 nie są doskonałe, to są standardem, który zmierza w dobrym kierunku. Po czasach rozterek JEE vs Spring Framework+Hibernate mam wrażenie, że wybór staje się bardziej oczywisty. Mnie to cieszy.

02 grudnia 2010

73. spotkanie Warszawa JUG - Andrzej Salwicki z "O obiektach aktywnych, obcym wołaniu metod takich obiektów i problemie otwartym?"

0 komentarzy
Warszawska Grupa Użytkowników Technologii Java (Warszawa JUG)Warszawska Grupa Użytkowników Javy (Warszawa JUG) zaprasza na 73. spotkanie, które odbędzie się w najbliższy wtorek, 7. grudnia o godzinie 18:00 w sali 5440 Wydziału MIM UW przy ul. Banacha 2 w Warszawie.

Temat: O obiektach aktywnych, obcym wołaniu metod takich obiektów i problemie otwartym?
Prelegent: prof. dr hab. Andrzej Salwicki

Podczas prezentacji omówię obiekty aktywne (rodzaj wątków) i oryginalną, obiektową koncepcję komunikacji/synchronizacji obiektów aktywnych zaproponowaną przez Bolka Ciesielskiego w 1988. Metody obiektu aktywnego mogą dynamicznie zmieniać swój status:
prywatny -> publiczny -> prywatny -> publiczny -> ...
enable m disable m
Wywołanie z obiektu Y metody m w obiekcie X wygląda zwyczajnie (* call *) X.m(...). Różnice sprowadzają się do kilku punktów:
- chociaż obiekt aktywny Y wywołuje metodę m w obiekcie X, to obiekt X ma ją wykonać,
- aby mogło do tego dojść, metoda m obiektu X musi być publiczna (ang. enabled),
- takie obce wołanie metody może być zrealizowane w sposób synchroniczny, spotkanie instrukcji wywołania (w Y) z instrukcją accept (w X), lub w sposób asynchroniczny (wywołanie metody PRZERYWA wykonywanie wątku X'a - X wykonuje metodę m - i wraca do dalszego ciągu swego wątku.

Odczyt przedstawi szczegóły i omówi zalety takiego rozwiazania. Pomysł ten jest wykonalny (sprawdzono w Loglanie'82).

Na zakończenie przedstawimy interfejs AO (obiekt aktywny) i sformułujemy wyzwanie: zaimplementować ten interfejs w Javie lub udowodnić, że nie mozna tego zrobić bez modyfikacji JVM. Za rozwiązanie problemu przysługuje nagroda!

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

Wstęp wolny

Zapraszam w imieniu prelegenta i grupy Warszawa JUG!

01 grudnia 2010

Java EE 6 webapp development with CDI, GlassFish and NetBeans 7

9 komentarzy
Próbowałem się z NetBeans IDE 7.0 (wersja rozwojowa z dzisiaj) i kiedy sprawdzałem możliwości CDI z przekazywaniem (aka wstrzykiwaniem) zależności do servletu przyszło mi do głowy, aby nagrać moje doświadczenia. Nie są one wyrafinowane, ale chodziło mi raczej o popróbowanie się ze skrinkastami w kwadrans, aby nabrać większej umiejętności w tego typu przekazie niż na samej oprawie czy treści. Chciałem również sprawdzić, czy uda mi się opublikować nagranie na YouTube w formacie 1080p.

Zero podkładu głosowego, zero muzyni, niewiele treści merytorycznej, ale nagranie w Full HD jest. Tym samym 3-minutówka znalazła się na YouTube do oceny publiczności.

Teraz kolej na Ciebie. Zadanie na dziś to obejrzenie filmiku i ocena jego przydatności, a właściwie wskazanie niedoskonałości i tym samym zagwarantowanie sobie bardziej przyzwoitej treści w kolejnych odsłonach.

Zapraszam na swój kanał na YouTube do obejrzenia Java EE 6 webapp development with CDI, GlassFish and NetBeans 7.

p.s. Uruchomiłem ankietę "Temat przewodni na grudzień", której celem jest określenie tematyki, którą chciał(a)byś, abym rozpracowywał w ostatnim miesiącu tego roku - grudniu 2010. Zainteresowanych wyrażeniem swojego zdania zapraszam na blog, gdzie po prawej u góry znajduje się ankieta. Sugestie w postaci odpowiedzi "Inne?!" proszę o rozwinięcie na priv, albo w komentarzu do tego wpisu.