16 października 2009

Tworzenie pakunków OSGi w Eclipse IDE 3.6m2 - Eclipse się sprawdził

2 komentarzy
Potrzebowałem stworzyć wtyczkę OSGi, ale nie miałem zamiaru zejść na poziom linii poleceń. To już przerabiałem w Tworzenie pakietów OSGi z Apache Maven 2 czy Pakunki OSGi w projekcie wielomodułowym Apache Maven 2 z maven-bundle-plugin. Tym razem miałem potrzebę skorzystania z IDE.

NetBeans IDE odpada, bo nie oferuje żadnego wsparcia w tym temacie. IntelliJ IDEA - hmmm, nie mam wciąż pojęcia, czy się nadaje, ale przecież Eclipse IDE to w końcu środowisko oparte na OSGi - jako platformie i składowych. W Eclipse można stworzyć jego wtyczki (rozszerzenia), które są niczym innym jak pakunkami OSGi.

Po chwili byłem po lekturze artykułu OSGi with Eclipse Equinox - Tutorial i byłem gotów do eksperymentów.

Zaczynam typowo. Otwieram Eclipse 3.6M2, Ctrl+N i wybieram Plug-in Project.

Uzupełniam dane projektu przyszłej wtyczki - Project name ustawiam na ejb-client i wybieram Target Platform jako an OSGi framework: standard (ktoś wie, co to oznacza i czego nie mam w porównaniu z Equinox?).

Kolejny ekran bez zmian

i w następnym Templates wybieram Hello OSGi Bundle.

Super te szablony, bo z nimi stworzenie bardziej wyrafinowanej wtyczki (wszystkie poza wspomnianym Hello OSGi Bundle) sprowadza się do odpowiedniego wyboru. Nie trzeba nawet wiedzieć, co to są pakunki, aby je stworzyć!

Ostatni ekran to konfiguracja szablonu, więc może się różnic, w zależności od wcześniejszego wyboru.

Kiedy pojawi się pytanie o przełączenie perspektywy na Plug-in Development

wciskam Yes i w końcu mam swój wymarzony pakunek OSGi.

Teraz można dalej się bawić w tworzenie bardziej wyrafinowanych elementów pakunku, a na uznanie zasługują dwie rzeczy - edytor MANIFEST.MF (patrz zrzut ekranu wyżej) oraz widok Outline (na zrzucie wyżej po prawej).

Kiedy przełączyłem się na zakładkę MANIFEST.MF w edytorze manifestu, w widoku Outline pojawiła się charakterystyka pakunku. Bajera!

Mając gotową wtyczkę/pakunek wystarczy File > Export i wybrać Deployable plug-ins and fragments.

Mamy możliwość wyboru pakunku i jego danych do eksportu.

Po prostu bajka. Wszystko idzie bez najmniejszych potknięć. W katalogu plugins, poniżej wskazanego katalogu, czeka na nas gotowy do uruchomienia pakunek OSGi.

W łatwy sposób mamy możliwość importu istniejących pakunków oraz definiowania zależności między nimi - określenie importów i eksportów w manifeście.

Tym samym Eclipse IDE 3.6m2 stało się narzędziem numer 1, jeśli chodzi o tworzenie pakunków OSGi.

Ciekawe, czy IntelliJ IDEA daje jakiekolwiek wsparcie dla tworzenia pakunków OSGi?

14 października 2009

IT-SOA - interesujący projekt z OSGi/SCA w roli głównej na AGH i innych polskich uczelniach

7 komentarzy
Kilka dni temu natchnęło mnie na wyszukiwanie informacji o prowadzonych projektach badawczych wokół OSGi na polskich uczelniach. Nie pamiętam dokładnie jaką frazę wpisałem w Google, ale było to bodajże "osgi uniwersytet" i w zakładce zaawansowane wybrałem język polski. Ku mojemu zdumieniu natrafiłem na bardzo zaawansowany technologicznie projekt IT-SOA, którego uczestnikami są AGH z Krakowa, Uniwersytet Ekonomiczny w Poznaniu, Politechnika Poznańska, Instytut Podstaw Informatyki PAN i Politechnika Wrocławska.

Za stroną główną projektu: "Projekt dotyczy współczesnych technologii informacyjnych działających w systemach rozproszonych." Nie powiem, żeby mnie nie zaintrygowało. Zacząłem przeglądać informacje o projekcie i trafiłem na Obszar Badawczy 5, którego tematem przewodnim był OSGi (było tam kilka innych akronimów, ale ja widziałem, albo chciałem widzieć, jedynie OSGi :)).

Postanowiłem napisać do koordynatora projektu (namiary na stronie Kontakt) i niedługo musiałem czekać, aby dostać odpowiedź z...Sekretariatu Projektu SOA. Po krótkiej korespondencji z panem prof. Krzysztofem Zielińskim z AGH, który zawiaduje projektem okazało się, że dzisiejszy dzień (środa) jest najlepszy dla obu stron i spotykamy się w Krakowie, aby przedyskutować temat współpracy (okazało się, że IBM jest również zaangażowany w temat, więc nie mogłem życzyć sobie więcej).

Po kilkugodzinnej rozmowie w gronie pracowników AGH zaangażowanych w temat okazało się, że mimo początkowego sceptycyzmu, że OSGi jest, i SOA też, ale pewnie jedynie dla wzmocnienia przekazu projektu, bez jakiegokolwiek mocniejszego wykorzystania, projekt nie tylko, że wymienia je z nazwy, ale rozpoznanie technologiczne nie skupia się na podstawowym użyciu, ale również w postaci rozwiązań typu Spring-DM, Swordfish, Distributed OSGi (D-OSGi) i in. Bardzo mocno korzysta się z ServiceMix 4 z jego wsparciem dla OSGi i możliwością klastrowania komponentów JBI (jako członek ServiceMix PMC nie miałem nawet świadomości, że JBI jest wspierane przez niego). Padły również akronimy typu SCA, CEI (rozwiązanie WebSphere AS do rozgłaszania komunikatów) oraz CBE (format komunikatów), więc można sobie tylko wyobrazić, jak chłonąłem te wszystkie informacje podczas spotkania. Widać, że jest z kim porozmawiać na te tematy w Krakowie, bo na AGH naliczyłem 6 osób, które wiedzą, co w trawie piszczy.

Byłoby to niesamowite doświadczenie móc uczestniczyć w tego typu przedsięwzięciu, więc rozpoczynam moją krucjatę, aby choć przez chwilę móc czerpać z doświadczeń projektu IT-SOA.


Podczas podróży miałem okazję przeczytać pierwsze rozdziały książki Programming Clojure. Jedyne co mogę powiedzieć po 3 rozdziałach, to że programowanie funkcyjne jest...trudne dla mojego imperatywno-obiektowego postrzegania świata. Wciąż zachodzę w głowę dlaczego miałbym się nauczyć Clojure, ale skoro mam o nim książkę i wielu wychwalało programowanie funkcyjne jako odświeżające, postaram się wytrwać do końca. Tak wiele trudności w zrozumieniu tematu z branży IT już dawno nie miałem, a już odnośnie samego programowania, wcale. Czy tylko ja doświadczam takich trudności intelektualnych?!

11 października 2009

53. spotkanie Warszawa JUG - "Java w długopisie, zaskakująco użyteczne połączenie" Michała Margiela

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

Temat prezentacji: Java w długopisie, zaskakująco użyteczne połączenie
Prelegent: Michał Margiel

W takcie prezentacji Michał przedstawi genialny[1] wynalazek firmy livescribe - inteligentny długopis o jakże zaskakującej nazwie "Smart pen", który może zrewolucjonizować sposób prowadzenia notatek na wykładach[1].

Długopis zawdzięcza swą "mądrość" Javie ME, którą ma na pokładzie oraz rozszerzeniom, o których więcej podczas prezentacji.

Wykład składa się z dwóch części. W pierwszej zostaną zaprezentowane wbudowane możliwości pisaka - synchronizacja tego, co piszemy z tym, co słyszymy, rozpoznawanie pisma, oraz aplikacja desktopowa do zarządzania naszymi notatkami. W drugiej części przedstawiony będzie interfejs programistyczny na przykładzie aplikacja tworzonej na żywo.

Zdaniem Michała każdy student (ale nie tylko) po wysłuchaniu prelekcji będzie marzył o własnym "Smart penie"

Michał Margiel jest absolwentem wydziału Elektrycznego Politechniki Warszawskiej, z wykształcenia informatyk. W WJUGu jest od samego początku jego istnienia, oraz współorganizował dwie edycje konferencji Javarsovia. Na codzień pracuje w firmie Pragmatists na stanowisko artysta-programista[2] , zaś samą javą zajmuje się już od ponad 4 lat. Posiada certyfikaty SCJP, SCWCD, pomocy przedmedycznej oraz wychowawcy kolonijnego.

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

Wstęp wolny!

Zapraszam w imieniu prelegenta i grupy Warszawa JUG!

[1] Tak przynajmniej twierdzi Prelegent.
[2] Oczywiście artysta sztuki programowania ;)

10 października 2009

Recenzja "Pro Spring Dynamic Modules for OSGi Service Platforms" z Apress - dobry wstęp do OSGi/Spring-DM, ale ogólnie klapa

2 komentarzy
Udało mi się wygospodarować trochę czasu na lekturę Pro Spring Dynamic Modules for OSGi™ Service Platforms autorstwa Daniela Rubio z wydawnictwa Apress i niestety, ale noty są bardzo niskie. Dobre wprowadzenie do OSGi i Spring-DM, ale jak na książkę z "Pro" w tytule, to zdecydowanie za mało. Zresztą, gdyby tylko to, ale listingi build.xml Anta, cały 2 rozdział o Spring Framework czy kolejny o SpringSource dm Server przeszły moje najśmielsze oczekiwania, co można zrobić z książką, gdzie tematem przewodnim miał być Spring-DM. Tyle sobie obiecywałem po tej książce, a skończyło się na tym, że jestem mocniejszy w Apache Ant, Apache Ivy i wiem, co w trawie piszczy odnośnie SpringSource dm Server. Później miało być lepiej. Szumny tytuł o wersjonowaniu w OSGi, tworzeniu aplikacji webowych z Spring-DM oraz testowanie aplikacji opartych na OSGi ze Spring-DM, a skończyło się jedynie na wielkich oczekiwaniach i niemiłym zaskoczeniu, że mogło być więcej, lepiej, itp. Nie powiem, że nie nauczyłem się więcej o OSGi, ale zdecydowanie za mało jak na książkę "Pro" (każdorazowo, kiedy piszę to słowo przypomina mi się wypowiedź Lt. Aldo Raine w "Inglourious Basterds" "I think you show great talent. And I pride myself on having an eye for that kind of talent. Your status as a Nazi killer is... still amateur. We all come here to see if you wanna go pro..."). W tej książce mieć talent, to znaleźć te brylanty, które po 300 stronach zrobią z nas Pro. Ostrzegam jednak, nie będzie łatwo. W zasadzie, każdy komu ta książka nie zacznie się dłużyć stanie się Pro. Może o to chodziło autorowi?!

Podsumowując, książka nie warta swych pieniędzy, ale dla członków Warszawa JUG, którzy mają ją kosztem recenzji, i są zainteresowani wprowadzeniem do OSGi i Spring-DM z dodatkami w stylu Ant, Ivy czy SSdS, dlaczego nie?! Uważam, że bez wygórowanych oczekiwań można znaleźć kilka ciekawostek.

Pełną recencję książki po angielsku (ze względu na wymagania wydawcy w programie "Książka za recenzję") znajdziecie w Book review: Pro Spring Dynamic Modules for OSGi Service Platforms. Miłej lektury - recenzji i...książki! ;-)

09 października 2009

Uruchomienie zdalnego klienta EJB wyłącznie w oparciu o interfejs biznesowy (bez implementacji)

2 komentarzy
Właśnie takiego obrotu sprawy sobie życzyłem. Publikuję wyniki moich doświadczeń szerszemu gronu z nadzieją, że komukolwiek zechce się poświęcić trochę czasu na prześledzenie mojego toku myślenia i samych wyników. Tak też było w przypadku mojego, ostatniego artykułu Jak długo korzystać z referencji bezstanowego komponentu sesyjnego EJB (na przykładzie EJB 3.0 i GlassFish v3). Jego celem było sprawdzenie zachowania się zdalnej referencji EJB3 podczas niedostępności serwera. Przeoczyłem jednak fakt, że aplikacja kliencka dystrybuowana była nie tylko ze zdalnym interfejsem biznesowym, ale również z jego implementacją jako bezstanowe ziarno sesyjne EJB. Nie długo trzeba było czekać, aby takiemu podejściu zaprotestował Łukasz Lenart:

Jedna uwaga, która ogólnie jest globalna do tego typu przykładów. Mianowicie klientowi dostarczasz nie tylko interfejs ale również implementację jako zależność, przez co używanie serwera aplikacyjnego do zdalnej komunikacji jest zbędnym narzutem. Nigdzie jeszcze nie znalazłem przykładu jak to zrobić bez dostarczania implementacji a tylko sam interfejs. Moje próby potwierdziły tylko, że tego nie da się zrobić w przypadku Glassfisha :-(

Problem, jaki wskazał Łukasz, polegał na dystrybuowaniu zdalnego klienta EJB3 w paczce, która zawierała nie tylko interfejs biznesowy, ale i jego implementację (!) Przyznaję, że nie pomyślałem o takim skonstruowaniu paczki dystrybucyjnej klienta, która nie zawierałaby implementacji komponentu EJB, z którego korzysta. Kiedy przeczytałem komentarz, a szczególnie jego ostatnie zdanie, nie miałem złudzeń czym się zająć.

Ten rodzaj reakcji jest zapewne największym podziękowaniem czytelników - dzielimy się własnymi reakcjami na proponowaną rzeczywistość. W końcu autor mógł nie wiedzieć, że da się lepiej, lub po prostu uważać to za nieistotne. Stwarza się w ten sposób okazję do wymiany doświadczeń w jedną (od autora) i drugą, zwrotną stronę (od czytelników), w której nie ma strony wiodącej (poza stroną inicjującą dyskusję, ale tutaj trudno wskazać, czy sam autor artykułu, czy komentarza nią jest - świetny temat na pracę doktorską z filozofii :-)). Tak czy owak, jest nad czym się pochylić i artykuł spełnia swoją rolę - nie jest jednostronny. Najważniejsze, że przy takim podejściu nikt nie traci, bo ja miałem kolejny temat, a Łukasz et al rozwiązanie. Idziemy tym samym naprzód i kolejne projekty stają jeszcze prostsze technologicznie.

Uwielbiam takie publiczne dywagacje, bo nigdy nie wiadomo z kim przyjdzie mi rozmawiać. W przypadku Łukasza to sprawa jest prosta - dostaje baty w bilarda, więc chciał się odegrać :P Ale nie tylko Łukasz zareagował! Dostałem prywatnie komentarz od Pawła Balczyńskiego, który znalazł błąd w jednym z listingów. Standardowe "U mnie działa" miało przez chwilę zastosowanie, ale fakt faktem błąd był (tylko dlaczego u mnie działało?!). Dzięki Paweł!

Zainteresowanych kolejnym doświadczeniem i jego wynikami zapraszam do lektury nowego artykułu Uruchomienie zdalnego klienta EJB wyłącznie w oparciu o interfejs biznesowy (bez implementacji). Teraz oczekuję kolejnej porcji pomysłów na udoskonalenie warsztatu. Komenatrze mile widziane - na priv, albo w komentarzu do tego wpisu.

05 października 2009

Jak długo korzystać z referencji bezstanowego komponentu sesyjnego EJB (na przykładzie EJB 3.0 i GlassFish v3)

8 komentarzy
Niedawno dostałem do skrzynki takie pytanie:

(...)Głównie nurtuje mnie "jak długo" po otrzymaniu referencji do ejb mogę go używać (kontener może go przecież spasywować/usunąć albo *** wie, co jeszcze zrobić) - mogę z niego korzystać dowolnie długo/pobierać od nowa co wywołanie metody biznesowej czy jeszcze inaczej?

Początkowo miałem po prostu odpowiedzieć i zapomnieć o temacie. Zdalna referencja jest jedynie pośrednikiem (ang. proxy) między kodem klienta a serwerem i tak na prawdę odpowiada jedynie za komunikację z serwerem bez utrzymywania jakiegokolwiek stanu komponentu EJB. Mimo jasnej dla mnie odpowiedzi, postanowiłem sprawdzić ją w ramach niewielkiego eksperymentu, który miał mi nie tylko zweryfikować samą odpowiedź, ale również dać nową na pytanie, ile czasu potrzeba na zestawienie środowiska do jego przeprowadzenia. Do dyspozycji miałem linię poleceń lub IDE. Z IDE jest o tyle problem, że trudno wybrać to jedyne (w przypadku projektów Java EE wskazywałbym na NetBeans IDE), więc pozostałem przy linii poleceń. Tak się bawiłem, że skończyło się na nowym artykule - Jak długo korzystać z referencji bezstanowego komponentu sesyjnego EJB (na przykładzie EJB 3.0 i GlassFish v3).

Wykorzystałem w nim Apache Maven 2.2.1 i GlassFish v3 b66 do zestawienia projektu wielomodułowego, który posłużył mi za materiał testowy. Jest też kilka miejsc oznaczonych TODO, dla osób, które rozmyślają, jakby tu zaangażować się w naukę technologii javowych praktycznie. Ufam, że lektura dostarczy równie wiele zabawy co i mi. Pochwały/nagany mile widziane.

p.s. Zastanawiam się, czy nie warto rozważyć screencastów (brakuje mi dla tego chwytliwego odpowiednika po polsku). Wink, Camtasia, a może jeszcze coś innego? Pewnie z udziałem NetBeans IDE 6.8 dev, bo w końcu tego typu projekty dobrze się w nim robi. Co o tym sądzicie?

03 października 2009

default-* execution dla różnych konfiguracji wtyczek w Apache Maven 2.2.1

7 komentarzy
Podczas moich ostatnich wojaży z projektami zarządzanymi Apache Maven 2 potrzebowałem możliwości zdefiniowania różnych konfiguracji dla wtyczki maven-surefire-plugin. Początkowo rozważałem taką konfigurację:
 <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/WyswietlanieKomunikatowClientTest.java</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>uruchom-WyswietlanieKomunikatowClientTest</id>
<phase>integration-test</phase>
<configuration>
<includes>
<include>**/WyswietlanieKomunikatowClientTest.java</include>
</includes>
</configuration>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
która oznacza, że domyślne wykonanie wtyczki, np. podczas wykonania mvn install, wykluczy wykonanie testów z WyswietlanieKomunikatowClientTest, podczas gdy uruchomienie mvn integration-test, albo wszystkich faz kolejnych, tj. verify, install czy deploy, już tak (warto zajrzeć na strony Introduction to the Build Lifecycle i Guide to Configuring Plug-ins#Configuring Build Plugins z dokumentacji Apache Maven, jeśli tematy są niejasne). I tutaj właśnie pojawił się problem - chcąc wykluczyć WyswietlanieKomunikatowClientTest musiałem wykonywać fazy niższe niż integration-test, a one wykluczają install. I na odwrót, wykonanie install wykona integration-test, a to nie było mi na rękę.

Zacząłem przeszukiwać Internet w poszukiwaniu rozwiązania dla konfiguracji bez phase w ramach execution wtyczki. Sądziłem, że gdzieś wokół takiego myślenia powinienem znaleźć rozwiązanie. I jakież było moje zdumienie, kiedy trafiłem na dokument Default Plugin Execution IDs, gdzie przeczytałem o podobnych dywagacjach. To odpowiadało moim potrzebom! Lektura dokumentu upewniła mnie, że mam szansę coś znaleźć w Mavenie. Na końcu dokumentu, w sekcji References, było wskazanie na dwa zgłoszenia JIRA dla Apache Maven. Pierwsze MNG-3401 niezwykle obiecujące, ale kolejne MNG-3203 odpowiadało dokładnie temu, czego poszukiwałem. Oba rozwiązane tyle tylko, że..."This should work both in Maven 2.2.0 and in Maven 3.x". U mnie niestety Maven w wersji 2.1.0:
 $ mvn -v
Apache Maven 2.1.0 (r755702; 2009-03-18 20:10:27+0100)
Java version: 1.6.0_14
Java home: c:\apps\java6\jre
Default locale: en_PL, platform encoding: Cp1250
OS name: "windows xp" version: "5.1" arch: "x86" Family: "windows"
Sądziłem, że pracuję z najnowszą wersją Mavena, więc nietrudno sobie wyobrazić, jak wielkie zrobiłem oczy, kiedy zobaczyłem, że wersja 2.2.1 jest już dostępna. To było dokładnie to, czego poszukiwałem. Rozwiązanie na miarę. Instalacja nowej wersji Apache Maven 2.2.1
 $ mvn -v
Apache Maven 2.2.1 (r801777; 2009-08-06 21:16:01+0200)
Java version: 1.6.0_14
Java home: c:\apps\java6\jre
Default locale: en_PL, platform encoding: Cp1250
OS name: "windows xp" version: "5.1" arch: "x86" Family: "windows"
zmiana konfiguracji projektu na następującą:
 <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>default-cli</id>
<configuration>
<excludes>
<exclude>**/WyswietlanieKomunikatowKlientTest.java</exclude>
</excludes>
</configuration>
</execution>
<execution>
<id>default-test</id>
<configuration>
<includes>
<include>**/WyswietlanieKomunikatowKlientTest.java</include>
</includes>
</configuration>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
i jestem w domu! Problem rozwiązany! Teraz każdorazowe uruchomienie mvn install wykona konfigurację o identyfikatorze default-cli, a każdorazowe wykonanie mvn test, czyli dosłowne uruchomienie wtyczki surefire, która jest związana z fazą test, wykona konfigurację default-test. Dokładnie tak, jak sobie życzyłem. Warto zajrzeć do przykładowego wykonania obu poleceń i prześledzić wykonywanie wtyczek i ich execution, aby dokładnie poznać różnicę między nimi. Nie ma to jak rozwiązanie problemu w przysłowiowe 5 minut - dobrze zadane zapytanie w Google...bezcenne! :)

p.s. Jak tak dalej pójdzie, to niedługo zejdę na serce. Tyle wrażeń jednego dnia na pewno niekorzystanie wpływa na moje zdrowie :) A to tylko przy takim, pojedynczym wydarzeniu, a przecież nie było ono moim jedynym. Informatycy to strasznie podatny na zawał serca lud ;-)

p.s.2. Skoro przy temacie zarządzania projektami, to natrafiłem ostatnio na gradle. Używa ktoś tego? Chętnie wysłucham wrażeń. Komentarze, listy na priv mile widziane.