Biorąc pod uwagę liczbę dni do końca roku, ten wpis będzie co najwyżej przedostatnim wpisem na moim blogu, a na pewno ostatnim dotykającym tematu Java EE 6, EJB 3.1 i in.
Korzystając z okazji, chciałbym życzyć Tobie wszystkiego dobrego w nowym roku 2011 i nakłaniam do jeszcze większej aktywności. Nie czekaj, aż powiedzą, ale mów, proponuj, bądź liderem w swojej społeczności. Dla poszukujących natchnienia polecam lekturę wpisu na blogu Damiana Nowaka - Apprenticeship – długa droga ku Software Craftsmanship. Nie wiem, czy to styl pisania Damiana, czy może sama książka, ale tylko takich wpisów życzę nam w nadchodzącym roku. Niech kasa pójdzie w zapomnienie - niech będzie jej tyle, aby nie stanowiła kwestii do rozwiązania - a czas spędzajmy na tworzeniu - nowego i użytecznego oprogramowania, społeczności przez chociażby dzielenie się wiedzą. Nie ważne jaki był (i jeszcze będzie przez kolejne 2 dni) rok 2010, ale ważne, ile możesz zrobić, aby 2011 był jeszcze lepszy. Zalatuje socjotechniką, ale dobre myślenie poprawia mój nastrój, więc może i Twój również, a to może przełożyć się na coś wyjątkowego.
W takim tonie przedkładam Tobie do oceny mój nowy artykuł Embeddable EJB 3.1 z GlassFish 3.1 i NetBeans IDE 7.0, w którym...
Rozdział 22. Embeddable Usage specyfikacji Enterprise JavaBeans (EJB) 3.1 opisuje nową cechę specyfikacji, która pozwala na uruchomienie kontenera EJB i zarządzanych przez niego komponentów EJB poza serwerem aplikacyjnym Java EE 6 - jedynie na poziomie środowiska Java SE. W ten sposób autorzy specyfikacji przewidują (a my programiści im wierzymy) uproszczenie procesu testowania, przetwarzania wsadowego (w którym użycie transakcji jest kluczowe) czy użycie EJB w samodzielnych aplikacjach desktopowych. Innymi słowy, mamy wszystko, co oferuje kontener EJB 3.1 bez konieczności uruchamiania pełnego serwera aplikacyjnego Java EE, którego sama konfiguracja uruchomieniowa mogła przyprawić o ból głowy.
Zainteresowanych lekturą nie zatrzymuję już i jeszcze tylko na odchodne dorzucę nieśmiało, aby komentować, pytać i kwestionować. Wszyscy zostaną *odpowiednio* potraktowani :-)
30 grudnia 2010
28 grudnia 2010
Google Guice z Clojure - niebagatelna rola IRC w moim rozwoju
Do moich poczynań z JRuby on Rails i komentarzy do wpisu Świąteczne próby z JRuby on Rails wrócę w kolejnym wpisie. Dzisiaj będzie o czymś troszkę innym.
Zdumiewające, jak wiele wiedzy można zdobyć stosując wciąż konwencjonalne sposoby nauki. IRC to narzędzie stare jak sam Internet i pamiętam, ile sprawiało mi przyjemności i satysfakcji, kiedy spędzałem godziny siedząc przed terminalem na uczelni klepiąc dyskusje na jakimś bliżej nieokreślonym kanale. Nie miało znaczenia, gdzie, z kim i o czym, byle można było odsiedzieć swoje przez terminalem. Człowiek nic nie robi i czas mu leci - wtedy to był boski stan.
Przez długi czas nie uważałem IRCa za poważne narzędzie. Kojarzyło mi się właśnie z tym błogim stanem nic-nie-robienia, bo w zasadzie w Sieci jeszcze niewiele można było wtedy robić. Kiedy przyłączyłem się do Apache OpenEJB moje postrzeganie IRCa nieznacznie przesunęło się w stronę większego użycia przy rozwiązywaniu problemów - łatwiej było dopytać o szczegóły działania tego czy innego ustrojstwa. Raczej z rzadka tam zaglądałem, bojąc się nieprzerwanych dyskusji, które fajnie było prowadzić, ale w podsumowaniu wyglądały mizernie.
Nie wiem dlaczego, ale postanowiłem uruchomić Google Guice z poziomu Clojure. Czasami takie pomysły są zarzewiem kolejnych, więc nie zastanawiając się długo, zabrałem się za temat.
Początek był trywialny. Chwila zastanowienia i...potrzebny jest Guice w CLASSPATH do Clojure REPL. Nie inaczej, kiedy klasa javowa chce wywołać inną - obie muszą (zwykle) siebie widzieć przez CLASSPATH. Uruchamiam Clojure 1.3.0-alpha4 z odpowiednimi bibliotekami Guice.
Skracając znacznie moją historię, dotarłem do momentu, w którym miałem następujący stan:
I tak stan dumania, co by tu począć, trwał cały dzień. W zasadzie trochę dłużej, bo już wczoraj odnotowałem sobie, gdzie stanąłem i zabrałem się za dalsze dumanie z samego rana.
Wieczorem miałem dosyć. Postanowiłem napisać na grupę użytkowników clojure i iść spać. I już miałem pisać, kiedy przypomniałem sobie o kanale #clojure. I to był strzał w dziesiątkę!
Wystarczy użyć operatora tablicowego i Guice będzie kontent.
Zdumiewające, jak wiele wiedzy można zdobyć stosując wciąż konwencjonalne sposoby nauki. IRC to narzędzie stare jak sam Internet i pamiętam, ile sprawiało mi przyjemności i satysfakcji, kiedy spędzałem godziny siedząc przed terminalem na uczelni klepiąc dyskusje na jakimś bliżej nieokreślonym kanale. Nie miało znaczenia, gdzie, z kim i o czym, byle można było odsiedzieć swoje przez terminalem. Człowiek nic nie robi i czas mu leci - wtedy to był boski stan.
Przez długi czas nie uważałem IRCa za poważne narzędzie. Kojarzyło mi się właśnie z tym błogim stanem nic-nie-robienia, bo w zasadzie w Sieci jeszcze niewiele można było wtedy robić. Kiedy przyłączyłem się do Apache OpenEJB moje postrzeganie IRCa nieznacznie przesunęło się w stronę większego użycia przy rozwiązywaniu problemów - łatwiej było dopytać o szczegóły działania tego czy innego ustrojstwa. Raczej z rzadka tam zaglądałem, bojąc się nieprzerwanych dyskusji, które fajnie było prowadzić, ale w podsumowaniu wyglądały mizernie.
Nie wiem dlaczego, ale postanowiłem uruchomić Google Guice z poziomu Clojure. Czasami takie pomysły są zarzewiem kolejnych, więc nie zastanawiając się długo, zabrałem się za temat.
Początek był trywialny. Chwila zastanowienia i...potrzebny jest Guice w CLASSPATH do Clojure REPL. Nie inaczej, kiedy klasa javowa chce wywołać inną - obie muszą (zwykle) siebie widzieć przez CLASSPATH. Uruchamiam Clojure 1.3.0-alpha4 z odpowiednimi bibliotekami Guice.
jacek:~ $ CLASSPATH=~/apps/guice/guice-3.0-rc1.jar:~/apps/guice/javax.inject.jar:~/apps/guice/aopalliance.jar clj -13 CLOJURE_DIR: /Users/jacek/apps/clojure CLOJURE_CONTRIB_JAR: /Users/jacek/apps/clojure-contrib-1.3.0-alpha3.jar Clojure 1.3.0-alpha4 user=>Pierwsza biblioteka oczywista, a dwie pozostałe wyszły "w praniu", kiedy kolejno uruchamiałem potrzebne elementy Guice.
Skracając znacznie moją historię, dotarłem do momentu, w którym miałem następujący stan:
user=> (import '(com.google.inject Guice AbstractModule)) com.google.inject.AbstractModule user=> (def module (proxy [AbstractModule] [] (configure [] (println "configure called")))) #'user/module user=> (Guice/createInjector module) IllegalArgumentException No matching method found: createInjector clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:77)I tu mała zagwozdka. W javadoc dla com.google.inject.Guice jest metoda createInjector, która powinna akceptować mój moduł. Zresztą niejedna.
I tak stan dumania, co by tu począć, trwał cały dzień. W zasadzie trochę dłużej, bo już wczoraj odnotowałem sobie, gdzie stanąłem i zabrałem się za dalsze dumanie z samego rana.
Wieczorem miałem dosyć. Postanowiłem napisać na grupę użytkowników clojure i iść spać. I już miałem pisać, kiedy przypomniałem sobie o kanale #clojure. I to był strzał w dziesiątkę!
[11:22pm] jlaskowski: hi
[11:23pm] jlaskowski: I'm having troubles with java.lang.IllegalArgumentException: No matching method found: createInjector
[11:23pm] jlaskowski: CLASSPATH=`pwd`/guice/guice-3.0-rc1.jar:`pwd`/guice/javax.inject.jar:`pwd`/guice/aopalliance.jar clj -13
[11:23pm] jlaskowski: CLOJURE_DIR: /Users/jacek/apps/clojure
[11:23pm] jlaskowski: CLOJURE_CONTRIB_JAR: /Users/jacek/apps/clojure-contrib-1.3.0-alpha3.jar
[11:23pm] jlaskowski: Clojure 1.3.0-alpha4
[11:23pm] jlaskowski: (def mm (proxy [AbstractModule] [] (configure [] (println "configure called"))))
[11:23pm] jlaskowski: (bean mm)
[11:24pm] jlaskowski: {:class user.proxy$com.google.inject.AbstractModule$0}
[11:24pm] jlaskowski: and when I call (Guice/createInjector mm)
[11:24pm] jlaskowski: it spits out the exception
[11:24pm] jlaskowski: http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/AbstractModule.html
[11:25pm] jlaskowski: how can I find out what is wrong exactly?
[11:25pm] jlaskowski: how do I find out what Clojure can call upon a class?
[11:26pm] jlaskowski: any helpful reflection methods to use?
[11:26pm] amalloy: jlaskowski: createInjector takes an array of Modules, not a single module
[11:27pm] amalloy: java's Foo.bar(Whatever...) is sugar for arrays
[11:27pm] jlaskowski: right
[11:27pm] jlaskowski: but have a look at the full stack trace
[11:27pm] jlaskowski: user=> (.printStackTrace *e)
[11:27pm] jlaskowski: java.lang.IllegalArgumentException: No matching method found: createInjector
[11:27pm] jlaskowski: at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:77)
[11:27pm] jlaskowski: at clojure.lang.Reflector.invokeStaticMethod(Reflector.java:202)
[11:27pm] jlaskowski: at user$eval17.invoke(NO_SOURCE_FILE:4)
[11:27pm] jlaskowski: at clojure.lang.Compiler.eval(Compiler.java:6201)
[11:27pm] jlaskowski: at clojure.lang.Compiler.eval(Compiler.java:6168)
[11:27pm] jlaskowski: at clojure.core$eval.invoke(core.clj:2680)
[11:27pm] jlaskowski: at clojure.main$repl$read_eval_print__5619.invoke(main.clj:179)
[11:27pm] jlaskowski: at clojure.main$repl$fn__5624.invoke(main.clj:200)
[11:27pm] jlaskowski: at clojure.main$repl.doInvoke(main.clj:200)
[11:27pm] jlaskowski: at clojure.lang.RestFn.invoke(RestFn.java:422)
[11:27pm] jlaskowski: at clojure.main$repl_opt.invoke(main.clj:266)
[11:27pm] jlaskowski: at clojure.main$main.doInvoke(main.clj:361)
[11:27pm] jlaskowski: at clojure.lang.RestFn.invoke(RestFn.java:437)
[11:27pm] jlaskowski: at clojure.lang.Var.invoke(Var.java:409)
[11:27pm] jlaskowski: at clojure.lang.AFn.applyToHelper(AFn.java:169)
[11:27pm] jlaskowski: at clojure.lang.Var.applyTo(Var.java:518)
[11:27pm] jlaskowski: at clojure.main.main(main.java:37)
[11:27pm] amalloy: augh do not do that
[11:27pm] amalloy: http://gist.github.com
[11:28pm] jlaskowski: amalloy: ok, will use it
[11:29pm] amalloy: anyway, yes. it can't find a method with that name whose parameters are (Foo), only one whose parameters are (Foo[])
[11:29pm] jlaskowski: you're right!
[11:29pm] jlaskowski: so how can I call a method that accepts an array?
[11:29pm] amalloy: you can find this out for yourself with clojure.contrib.repl-utils/show
[11:30pm] amalloy: jlaskowski: ##(doc into-array) is one way; in this case it looks like Guice will also accept an Iterable, so you can just pass it a clojure vector
[11:30pm] sexpbot: ⟹ "([aseq] [type aseq]); Returns an array with components set to the values in aseq. The array's component type is type if provided, or the type of the first value in aseq if present, or Object. All values in aseq must be compatible with the component type. Class objec... http://gist.github.com/756642
[11:31pm] jlaskowski: HURRAYY - you saved my day, amalloy
[11:31pm] jlaskowski: it works fine now
[11:32pm] Luyt_: Freenode's channels are a great resource, because of all the friendly and knowledgeable people on it!
[11:32pm] jlaskowski: it's awesome how quickly it's sorted out!
[11:32pm] Luyt_: ...and some communities are really great.
[11:32pm] lancepantz: we just have a great community
[11:32pm] jlaskowski: it's not the first time I just enter the channel
[11:33pm] jlaskowski: and get an answer in secs
[11:33pm] jlaskowski: unbelievable
[11:33pm] jlaskowski: thanks again
[11:34pm] Luyt_: as long as you don't become a Help Vampire (http://slash7.com/2006/12/22/vampires/) it's allright
[11:35pm] Luyt_: and you can always give back to the community, of course. Like lurking and answering questions from noobs, which are too tedious for the advanced clojurists in here. (Same works in #python)I to było dokładnie to, czego potrzebowałem! Niecały kwadrans i odpowiedź już jest. W zasadzie odpowiedź była minutę po tym, kiedy skończyłem pisać - użyć tablicy zamiast po prostu przekazywać moduł. Ech, człowiek ślepnie na starość.Wystarczy użyć operatora tablicowego i Guice będzie kontent.
user=> (Guice/createInjector [module]) configure called #<InjectorImpl Injector[bindings=[ProviderInstanceBinding[key=Key[type=com.google.inject.Injector, annotation=[none]], source=[unknown source], scope=Scopes.NO_SCOPE, provider=Provider<Injector>], ProviderInstanceBinding[key=Key[type=java.util.logging.Logger, annotation=[none]], source=[unknown source], scope=Scopes.NO_SCOPE, provider=Provider<Logger>], InstanceBinding[key=Key[type=com.google.inject.Stage, annotation=[none]], source=[unknown source], instance=DEVELOPMENT]]]>Tylko, po co mi to było?! :)
23 grudnia 2010
Kolorowanie map z Clojure i Danielem Janusem - prezentacja-cudo
Ostatnie, 74. spotkanie Warszawa JUG zaczęło się z prawie 30-minutowym poślizgiem. Około 17:00 zaczął w Warszawie padać intensywny śnieg i zdecydowałem się na dojazd metrem, aby później przez Pola Mokotowskie dotrzeć do MIMUWu. Warto było, bo to, co działo się na ulicach, wołało o pomstę do nieba - wszystko stało, a to, co jechało, to w zasadzie wlekło się. Daniel zdecydował się na dojazd tramwajem i, ku jego zaskoczeniu, z nimi też nie było lepiej. W końcu prezentacja rozpoczęła się. Słuchaczy było 7 plus nasz prelegent.
Prezentację nagrałem i plik z nagraniem jest już gotów do wystawienia. Niestety nie zdążyłem go opublikować przed wyjazdem i zrobię to w nadchodzącym tygodniu. Widziałem, że Poznań JUG wystawił kilka prezentacji na blip.tv i pomyślałem, że może tam trafią i nasze. Usiądę nad tym w przyszłym tygodniu - teraz pora na święta i prezenty. Jeśli znalazłby się ktoś, kto zechciałby mi pomóc w temacie nagrań, ich obsługi i zarządzania ich publikacją, koniecznie niech się ze mną skontaktuje. Pomoc zawsze mile widziana.
Co można było zobaczyć na prezentacji? Było wprowdzenie do Clojure - slajdy poprzeplatane przykładami w REPL, praktycznie, aby ostatecznie całość wiedzy wykorzystać do stworzenia aplikacji webowej z wyświetlanym plikiem SVG z mapą Europy. Daniel pokazał Emacs z SLIME (upewnił mnie, że to nie jest narzędzie dla mnie i nie mam złudzeń, aby tego zestawu NIE dotykać), następnie wczytywanie i zapis plików XML, którego reprezentantem był właśnie SVG i na koniec Ring (nakładka funkcyjna na javowe Servlety w Clojure). Prezentacja-cudo. Interaktywnie zaprezentowany kawał dobrej wiedzy praktycznej i sam przykład przykuwał uwagę - pojawiające się i znikające kolory państw były dla mnie niezwykle interesujące. To jest ten rodzaj prezentacji, gdzie przy tworzeniu aplikacji poznajemy nowe rozwiązanie - tym razem język programowania funkcyjnego Clojure. Brakuje mi takich prezentacji, w których poznawanie nowego jest obok tworzenia interesującej wizualnie aplikacji (niekoniecznie funkcjonalnie, ale jeśli również, to tym lepiej).
Pamiętam podobny przykład z OSGi, w którym aplikacja okienkowa była rozbudowywana przy włączaniu/wyłączaniu kolejnych pakunków. Uważam, że dopasowana aplikacja demonstracyjna podczas prezentacji jest jej kluczowym elementem. Podczas mojego wykładu na PWSZ w Tarnowie udało mi się pokazać coś podobnego - tworzyłem aplikację okienkową w Clojure REPL i nie mogłem uwierzyć, jak wielkie zrobiło to wrażenie. Pamiętam, jaki zadowolony byłem, kiedy wpadłem na ten pomysł i nie inaczej było ze słuchaczami. Ciągle sobie obiecuję, żeby to nagrać, ale jakoś tak schodzi na innych aktywnościach. Brakuje jeszcze umiejętności tworzenia slajdów. Mimo, że zwykle uważa się je za niekonieczne przy prezentacjach technicznych, to ja uważam, że posiadanie ich może znacznie poprawić zrozumienie tematu. Wierzę, że kiedyś i mi się uda nabrać takiego doświadczenia, aby tworzyć przykuwające oko slajdy i dopasować do nich aplikację demonstracyjną. To jest ten moment, w którym życzenia nabierają szczególnej mocy :]
W przyszłym roku będzie kilka okazji, aby popróbować się z tematem - trwają rozmowy z uczelnią krakowską o moim wykładzie w marcu, będzie konferencja 33rd degree w Krakowie i już wiem, że pojawię się również na infoshare.pl w Gdańsku. Pojawił się również pomysł konferencji w Toruniu na UMK w Wydziale MiI w pierwszym kwartale 2011 (zgoda władz wydziału już jest, więc potrzeba jedynie zestawić agendę, czym zajmę się na początku 2011). Chciałbym również odcisnąć swoje piętno (w pozytywnym tego słowa znaczeniu) na jvarsovii 2011.
Tym samym zakończyliśmy spotkania WJUGa w roku 2010. Zapraszam na kolejne w 2011. Pierwsze spotkanie już 11.01.2011, w którym Maciek Próchniak przedstawi Activiti – BPMN 2.0 nadchodzi. Ten temat bardzo mnie interesuje służbowo - wiele czasu spędzam z rozwiązaniem konkurencyjnym - IBM WebSphere Process Server czy IBM WebSphere Business Modeler i ciekaw jestem, co oferuje Activiti. Mógłbym poznać na własną rękę, ale poczekam na prezentację. Będzie nagrywane.
Korzystając z okazji, chciałbym złożyć serdeczne życzenia świąteczne, dużo prezentów i pomysłów na nowe aplikacje z jeszcze bardziej nowatorskimi technologiami, np. Clojure. Nie zapomij o przesłaniu mi ich na priv :-)
Prezentację nagrałem i plik z nagraniem jest już gotów do wystawienia. Niestety nie zdążyłem go opublikować przed wyjazdem i zrobię to w nadchodzącym tygodniu. Widziałem, że Poznań JUG wystawił kilka prezentacji na blip.tv i pomyślałem, że może tam trafią i nasze. Usiądę nad tym w przyszłym tygodniu - teraz pora na święta i prezenty. Jeśli znalazłby się ktoś, kto zechciałby mi pomóc w temacie nagrań, ich obsługi i zarządzania ich publikacją, koniecznie niech się ze mną skontaktuje. Pomoc zawsze mile widziana.
Co można było zobaczyć na prezentacji? Było wprowdzenie do Clojure - slajdy poprzeplatane przykładami w REPL, praktycznie, aby ostatecznie całość wiedzy wykorzystać do stworzenia aplikacji webowej z wyświetlanym plikiem SVG z mapą Europy. Daniel pokazał Emacs z SLIME (upewnił mnie, że to nie jest narzędzie dla mnie i nie mam złudzeń, aby tego zestawu NIE dotykać), następnie wczytywanie i zapis plików XML, którego reprezentantem był właśnie SVG i na koniec Ring (nakładka funkcyjna na javowe Servlety w Clojure). Prezentacja-cudo. Interaktywnie zaprezentowany kawał dobrej wiedzy praktycznej i sam przykład przykuwał uwagę - pojawiające się i znikające kolory państw były dla mnie niezwykle interesujące. To jest ten rodzaj prezentacji, gdzie przy tworzeniu aplikacji poznajemy nowe rozwiązanie - tym razem język programowania funkcyjnego Clojure. Brakuje mi takich prezentacji, w których poznawanie nowego jest obok tworzenia interesującej wizualnie aplikacji (niekoniecznie funkcjonalnie, ale jeśli również, to tym lepiej).
Pamiętam podobny przykład z OSGi, w którym aplikacja okienkowa była rozbudowywana przy włączaniu/wyłączaniu kolejnych pakunków. Uważam, że dopasowana aplikacja demonstracyjna podczas prezentacji jest jej kluczowym elementem. Podczas mojego wykładu na PWSZ w Tarnowie udało mi się pokazać coś podobnego - tworzyłem aplikację okienkową w Clojure REPL i nie mogłem uwierzyć, jak wielkie zrobiło to wrażenie. Pamiętam, jaki zadowolony byłem, kiedy wpadłem na ten pomysł i nie inaczej było ze słuchaczami. Ciągle sobie obiecuję, żeby to nagrać, ale jakoś tak schodzi na innych aktywnościach. Brakuje jeszcze umiejętności tworzenia slajdów. Mimo, że zwykle uważa się je za niekonieczne przy prezentacjach technicznych, to ja uważam, że posiadanie ich może znacznie poprawić zrozumienie tematu. Wierzę, że kiedyś i mi się uda nabrać takiego doświadczenia, aby tworzyć przykuwające oko slajdy i dopasować do nich aplikację demonstracyjną. To jest ten moment, w którym życzenia nabierają szczególnej mocy :]
W przyszłym roku będzie kilka okazji, aby popróbować się z tematem - trwają rozmowy z uczelnią krakowską o moim wykładzie w marcu, będzie konferencja 33rd degree w Krakowie i już wiem, że pojawię się również na infoshare.pl w Gdańsku. Pojawił się również pomysł konferencji w Toruniu na UMK w Wydziale MiI w pierwszym kwartale 2011 (zgoda władz wydziału już jest, więc potrzeba jedynie zestawić agendę, czym zajmę się na początku 2011). Chciałbym również odcisnąć swoje piętno (w pozytywnym tego słowa znaczeniu) na jvarsovii 2011.
Tym samym zakończyliśmy spotkania WJUGa w roku 2010. Zapraszam na kolejne w 2011. Pierwsze spotkanie już 11.01.2011, w którym Maciek Próchniak przedstawi Activiti – BPMN 2.0 nadchodzi. Ten temat bardzo mnie interesuje służbowo - wiele czasu spędzam z rozwiązaniem konkurencyjnym - IBM WebSphere Process Server czy IBM WebSphere Business Modeler i ciekaw jestem, co oferuje Activiti. Mógłbym poznać na własną rękę, ale poczekam na prezentację. Będzie nagrywane.
Korzystając z okazji, chciałbym złożyć serdeczne życzenia świąteczne, dużo prezentów i pomysłów na nowe aplikacje z jeszcze bardziej nowatorskimi technologiami, np. Clojure. Nie zapomij o przesłaniu mi ich na priv :-)
20 grudnia 2010
EJB 3.1 z OpenEJB 3.1 i NetBeans IDE 7.0
Jest wiele sposobów na naukę nowych technologii i dobór odpowiednich narzędzi może znacząco usprawnić ten proces. W przypadku EJB 3.1 możemy skorzystać z projektu Apache OpenEJB 3.1, podpierając się NetBeans IDE 7.0 jako zintegrowanym środowiskiem programistycznym z asystentami tworzenia ziaren EJB z Apache Maven w tle.
Zastosowanie EJB 3.1 jest zwykle podyktowane względami praktycznymi, kiedy wybór serwera aplikacyjnego Java EE 6 mamy już za sobą i pozostaje wykorzystać jego usługi. Ich kompletność i gotowość do użycia najlepiej doświadczyć, kiedy konieczne jest wykorzystanie transakcji, podłączenia do bazy danych z możliwością przypisania komu i co wolno, udostępnić Web Service z wykorzystaniem REST w ramach aplikacji webowej czy podobne "deklaratywne czynności". Nie ma konieczności zestawiania gotowej konfiguracji usług, a konwencja ponad konfigurację znacznie przyspiesza dostarczanie kompletnych rozwiązań. Przenośność aplikacji jest również istotnym aspektem wyboru stosu technologicznego. Dodając do tego łatwość testowania aplikacji korporacyjnych i Java EE 6 (JEE6) wydaje się być idealną platformą aplikacyjną.
W tym artykule przedstawię uruchomienie bezinterfejsowego, niestanowego ziarna sesyjnego EJB (ang. no-interface stateless session bean) z użyciem projektu Apache OpenEJB 3.1.4, który stworzę w NetBeans IDE 7.0 (wersja rozwojowa z dnia 15.12.2010). Celem jest maksymalne zminimalizowanie czasu koniecznego do uruchomienia środowiska. Kolejną zaletą zastosowania OpenEJB jest możliwość wykonanywania wszystkich operacji projektowych (budowanie i testowanie) poza IDE, dzięki użyciu Apache Maven wspieranym przez NetBeans IDE 7 "z pudełka".
Więcej w artykule EJB 3.1 z OpenEJB 3.1 i NetBeans IDE 7.0.
Zastosowanie EJB 3.1 jest zwykle podyktowane względami praktycznymi, kiedy wybór serwera aplikacyjnego Java EE 6 mamy już za sobą i pozostaje wykorzystać jego usługi. Ich kompletność i gotowość do użycia najlepiej doświadczyć, kiedy konieczne jest wykorzystanie transakcji, podłączenia do bazy danych z możliwością przypisania komu i co wolno, udostępnić Web Service z wykorzystaniem REST w ramach aplikacji webowej czy podobne "deklaratywne czynności". Nie ma konieczności zestawiania gotowej konfiguracji usług, a konwencja ponad konfigurację znacznie przyspiesza dostarczanie kompletnych rozwiązań. Przenośność aplikacji jest również istotnym aspektem wyboru stosu technologicznego. Dodając do tego łatwość testowania aplikacji korporacyjnych i Java EE 6 (JEE6) wydaje się być idealną platformą aplikacyjną.
W tym artykule przedstawię uruchomienie bezinterfejsowego, niestanowego ziarna sesyjnego EJB (ang. no-interface stateless session bean) z użyciem projektu Apache OpenEJB 3.1.4, który stworzę w NetBeans IDE 7.0 (wersja rozwojowa z dnia 15.12.2010). Celem jest maksymalne zminimalizowanie czasu koniecznego do uruchomienia środowiska. Kolejną zaletą zastosowania OpenEJB jest możliwość wykonanywania wszystkich operacji projektowych (budowanie i testowanie) poza IDE, dzięki użyciu Apache Maven wspieranym przez NetBeans IDE 7 "z pudełka".
Więcej w artykule EJB 3.1 z OpenEJB 3.1 i NetBeans IDE 7.0.
18 grudnia 2010
Book review: WebSphere Application Server for Developers V7
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.
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"
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"
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.
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.
Subskrybuj:
Posty (Atom)
