21 grudnia 2007

Zmiana rozszerzenia pliku jar w Maven2?

6 komentarzy
Pojawiła się kwestia do rozwiązania, w której plik wynikowy tworzony przez Maven2 za pomocą wtyczki maven-jar-plugin powinien mieć inne rozszerzenie niż jar.

Jaki jest przypadek użycia, zapytasz? Załóżmy, że korzystam z narzędzia, dla którego jedynym słusznym rozszerzeniem jest xyz. W jaki sposób najmniejszym wysiłkiem utworzyć plik o zadanym rozszerzeniu nie łamiąc zasad rządzących Maven2 i wciąż móc korzystać z pozostałych wtyczek?

Jedyne, co przyszło mi do głowy to skorzystanie z wtyczki - maven-antrun-plugin. Wykonanie polecenia mvn package działa, ale mvn install już nie. Czy są inne sposoby rozwiązania tej kwestii? Skorzystanie z dedykowanej wtyczki? Dedykowany packaging z własną konfiguracją wtyczek?

<properties>
<nazwaPlikuWynikowego>${project.build.directory}/${artifactId}-${version}</nazwaPlikuWynikowego>
<rozszerzenie>xyz</rozszerzenie>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>package</id>
<phase>package</phase>
<configuration>
<tasks>
<move file="${nazwaPlikuWynikowego}.jar" tofile="${nazwaPlikuWynikowego}.${rozszerzenie}"/>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

W źródłach wtyczki maven-jar-plugin jest wyraźnie wskazane, że jedynym słusznym rozszerzeniem jest jar. Patrz org.apache.maven.plugin.jar.AbstractJarMojo.getJarFile(File basedir, String finalName, String classifier).

Zdaje się, że właśnie natrafiłem na ciekawy problem na długie i obfitujące w jedzenie, świąteczne wieczory.

p.s. Dzięki Szimano za niezłą zagadkę na zakończenie roku. Gratulacje humoru! ;-)

20 grudnia 2007

Konkurs Blog Roku 2007

8 komentarzy
Blog Roku 2007 w kategorii ProfesjonalneIdąc śladami Wiktora Gworka, który wystartował w konkursie Grono.net i...wygrał postanowiłem wystartować w podobnej inicjatywie. Pamiętam, jak rozpoczynał swój projekt podczas konferencji WarsJava 2007 i namawiał mnie na wzięcie udziału. Sam pomysł udziału w konkursie był ciekawy, ale fajny gość z tego Wiktora, więc zakończyłem to stwierdzeniem "Eee, zarobiony jestem.". Wiktor był tak napalony główną nagrodą komputer Apple MacBook Pro, że nie chciałem mu po prostu robić przykrości...wygrywając konkurs ;-)

Dzisiaj jednak, kiedy zajrzałem na blog Jarosława Zabiełło, a tam namiary na konkurs Blog Roku 2007, gdzie główną nagrodą w kategorii Profesjonalne jest...Laptop MacBook white 2.0 GHz Intel Core 2 Duo pomyślałem, że to jest ten moment, aby spróbować. W końcu, tylko ten wygrywa, kto gra, a ja wierzę, że z Waszą pomocą uda się. Zarejestrowałem Notatnik i cierpliwie czekam na ogłoszenie wyników. Na głównej stronie, w prawym panelu, umieściłem odnośnik do konkursu dla zainteresowanych moją wygraną.

Parafrazując jedną z reklam: Wszyscy mają Maki, będę miał i ja! To jak, pomożecie?

19 grudnia 2007

Ciekawostki JPA z XX spotkania Warszawa JUG

0 komentarzy
Podczas wczorajszego, XX spotkania grupy Warszawa JUG tematem przewodnim było Java Persistence API (JPA). Zajęliśmy się aktualizacją bazy danych przez dostawcę JPA o zmiany w encjach w trakcie trwania transakcji. Temat wcześniej opisałem w artykule Zasady zapisu zmian do bazy danych w JPA. Okazało się, że z 3 dostawców JPA - Apache OpenJPA, Hibernate EntityManager i TopLink Essentials, jedynie dwa ostatnie - Hibernate i TopLink działają tak samo, tzn. podczas pierwszego testu można zauważyć, że przed wykonaniem zapytania oba zapisują zmiany w bazie danych, a następnie wykonują zapytanie. W przypadku OpenJPA tak się nie dzieje. I tu możnaby zastanowić się, czy przypadkiem nie jest to błąd (!)

Piotr Tabor zauważył ciekawą rzecz, która unaocznia potencjalny problem z OpenJPA. Zmodyfikujmy zadanie o wyszukanie encji Osoba, których imię to Agata. Czego możemy spodziewać się od następującego fragmentu kodu?

System.out.println("\n=== Test #1: FlushModeType.AUTO z transakcja ===");

em.getTransaction().begin();
Osoba osoba = em.find(Osoba.class, osobaId);

System.out.println("\n>>> Zmieniamy imie osoby\n");
osoba.setImie("Agata");

System.out.println(">>> Wczytujemy wszystkie osoby\n");
Query query = em.createNamedQuery("Osoba.osobyPoImieniu");
query.setParameter("imie", "Agata");
List osoby = query.getResultList();
System.out.println("\n>>> Wszystkie osoby wczytane\n");

assert osoby.size() == 1 : "Liczba osób powinna być 1";
assert osoby.get(0).getImie().equals("Agata") : "Oczekujemy Agaty";

System.out.println(">>> Zatwierdzamy transakcje\n");
em.getTransaction().commit();

Czy oba warunki określone przez instrukcje assert powinny być spełnione? Z niecierpliwością czekam na odpowiedzi ;-) Zainteresowanych potyczkami z JPA zachęcam do skorzystania ze wspomnianego artykułu, w którym jest gotowe środowisko do odtworzenia sytuacji. Nie należy zapominać o stworzeniu zapytania nazwanego Osoba.osobyPoImieniu.

17 grudnia 2007

XX spotkanie Warszawskiej Grupy Użytkowników Technologii Java (Warszawa JUG)

2 komentarzy
Warszawska Grupa Użytkowników Technologii Java (Warszawa JUG) zaprasza na ostatnie w roku 2007, XX spotkanie, które odbędzie się we wtorek 18.12.2007 o godzinie 18:30 w sali 4420 Wydziału MIMUW przy ul. Banacha 2 w Warszawie.

Temat prezentacji: EJB 3.0 z JPA 1.0 w POPie (Pytania i Odpowiedzi z Przykładami) 2.0
Prowadzący: Jacek Laskowski

UWAGA: Spotkanie rozpoczyna się wyjątkowo o godzinie 18:30.

Specyfikacja Enterprise JavaBeans 3.0 (EJB3), której integralną częścią jest Java Persistence API (JPA), to jedna z kluczowych specyfikacji Korporacyjnej Javy 5 (Java EE 5). Jeszcze do niedawna wielu z przyjemnością zapomniałoby całkowicie o istnieniu EJB zastępując ją alternatywnymi rozwiązaniami i dopiero czynny udział osób związanych z projektami otartymi, m.in. Hibernate, czy Spring Framework sprawił, że EJB3 stał się ciekawym rozwiązaniem, po które można sięgnąć z przyjemnością podczas tworzenia rozwiązań korporacyjnych opartych o platformę Java EE 5. Biorąc pod uwagę ścisłą integrację EJB3 z pozostałymi elementami Java EE 5, nie sposób nie korzystać z jego dobrodziejstw, a jest ich wiele, z czego na szczególną uwagę zasługują - deklaratywne określanie wykorzystania usług serwera aplikacji Java EE 5 jak bezpieczeństwo, transakcje, trwałość, utrzymywanie sesji, czy udostępnianie ziaren EJB jako usług sieciowych, a skończywszy na elementach AOP w postaci mechanizmów przechwytywania zdarzeń rozwojowych ziaren.

Podobnie jak na poprzednim, XIX spotkaniu wprowadzającym w tematykę EJB 3.0 i JPA, spotkanie będzie prowadzone w formie warsztatu bez slajdów, gdzie motorem napędowym będą sami uczestnicy spotkania. Na spotkaniu Jacek przedstawi dwa tematy dotyczące JPA - Zasady zapisu zmian do bazy danych w JPA i Dynamiczny dostęp do wielu baz danych w JPA, jak również wprowadzi w tematykę interceptorów EJB3. Skorzystamy z pomocy NetBeans IDE i jego integracji z Glassfish.

Na zakończenie, Jacek sprawdzi wiedzę uczestników z EJB3/JPA korzystając z narzędzia przygotowującego do certyfikatu Sun Certified Business Component Developer (SCBCD) Java EE 5.0 - uCertify CX310-091 - SCBCD Java 5.0 Practice Test. Nagrody gwarantowane!

Jacek Laskowski zajmuje się Korporacyjną Javą od pierwszego dnia jej opublikowania. Jest członkiem zespołów rozwojowych m.in. Apache Geronimo, Apache OpenEJB. Zajmuje się rozpoznawaniem technologii upraszczających tworzenie aplikacji korporacyjnych z Java EE 5, a swoje spostrzeżenia publikuje w Notatniku Projektanta Java EE oraz na swoim Notatniku-Wiki. Jest założycielem i liderem Warszawskiej Grupy Użytkowników Javy (Warszawa JUG). Ideę dzielenia się wiedzą wprowadza w życie poprzez wystąpienia na konferencjach krajowych i zagranicznych. Służbowo związany z firmą IBM jako konsultant oprogramowania.

Planowany czas prezentacji to 1,5 godziny.

Wstęp wolny!

Zapraszam w imieniu Warszawa JUG!

16 grudnia 2007

Zasady zapisu zmian do bazy danych w JPA

0 komentarzy
Z każdym dniem na grupie pl.comp.lang.java pojawiają się coraz ciekawsze pytania i problemy związane z Java Persistence API (JPA) oraz Enterprise JavaBeans 3.0 (EJB3). Tym razem Marx zadał pytanie o zasady rządzące zapisem zmian encji do bazy danych w JPA - EJB3 - select robi update. W ten sposób sprowokował mnie do napisania kolejnego artykułu z serii przedstawiającej tajniki specyfikacji JPA - Zasady zapisu zmian do bazy danych w JPA.

Podobnie jak w poprzednich artykułach dotyczących JPA - Dynamiczny dostęp do wielu baz danych w JPA oraz Testowanie złączeń FETCH JOIN w JPA artykuł rozpoczyna się od przedstawienia teorii JPA, którą następnie zademonstrowałem w działaniu za pomocą aplikacji demonstracyjnej. Skorzystałem z konfiguracji projektu nadzorowanego przez Apache Maven 2, aby możliwe było uruchomienie go z 3-ma głównymi dostawcami JPA - Apache OpenJPA, Hibernate EntityManager oraz TopLink Essentials.

Drobnym acz ciekawym elementem konfiguracji Maven2 na potrzeby naszego projektu jest zależność javax.persistence.persistence-api, która występuje w wersji 1.0 w repozytorium Maven 2 oraz w wersji 1.0.2 w repozytorium Maven 1 na java.net. Biorąc pod uwagę, kto nadzoruje wersjami w repozytorium java.net (Sun) wydaje się być stosowne stosowanie bibliotek Korporacyjnej Javy właśnie z tego repozytorium. I tak też czynię w artykule.

14 grudnia 2007

Dynamiczny dostęp do wielu baz danych w JPA

1 komentarzy
Kolejny raz zostałem zainspirowany przez użytkownika grupy pl.comp.lang.java. Tym razem, Michał Chmielarz zadał pytanie o Dostęp do wielu baz danych przez JPA w ramach EJB 3.0, które sprowokowało mnie do dokładniejszego spojrzenia we wnętrze JPA. Już wczoraj próbowałem się z tematem z użyciem Raven i Buildr, ale nie miałem wiele szczęścia z nimi i ostatecznie skorzystałem ze sprawdzonego Mavena 2. Zresztą nie tak dawno zestawiłem środowisko do pracy z JPA z wykorzystaniem Maven (Testowanie złączeń FETCH JOIN w JPA), więc miałem w zasadzie wszystko gotowe.

W moim kolejnym artykule nt Java Persistence API (JPA) - Dynamiczny dostęp do wielu baz danych w JPA pobieżnie wprowadzam do teorii JPA w kontekście dynamicznego zarządzania wieloma bazami danych, po którym demonstruję kompletną (acz bardzo podstawową) aplikację w działaniu z wykorzystaniem zaprezentowanej teorii. Miłej lektury!

13 grudnia 2007

Raven, Buildr i...JPA - nieudany start

2 komentarzy
Na grupie pl.comp.lang.java Michał Chmielarz zapytał o Dostęp do wielu baz danych przez JPA w ramach EJB 3.0. Pytanie bardzo ciekawe, więc postanowiłem odpowiedzieć prezentując przykładową aplikację okraszoną niewielkim artykułem (wprowadzeniem w temat). Jak to bywa w takiej sytuacji należało zestawić projekt i stworzyć kilka klas dla zobrazowania rozwiązania. I właśnie, kiedy już przymierzałem się do zestawienia środowiska do pracy z JPA na bazie doświadczeń przedstawionych w Testowanie złączeń FETCH JOIN w JPA z Apache Maven 2 natrafiłem na artykuł Introducing Raven: An Elegant Build for Java. Zawsze mnie to spotyka, że kiedy napotkam nowy temat to z wielu stron. Przecież nie tak dawno Radarek w komentarzu do Tworzenie wtyczek Maven 2 w Groovy zasugerował przyjrzenie się...Ravenowi, który jest tematem wspomnianego artykułu, a który okazało się, że jest połączeniem cech Maven 2 oraz Ruby - możnaby napisać, że jest to Maven 2 w Ruby. Nie zastanawiając się długo obmyśliłem sobie plan zestawienia środowiska opierając jego zarządzanie na Raven. JPA nie mogło mnie zaskoczyć, więc dodanie do zestawu Ravena nie powinno było sprawić problemu. A jednak.

Czytając artykuł rozpocząłem instalację Ravena, która sprowadziła się (a w zasadzie powinna była sprowadzić się) do pobrania paczki dystrybucyjnej i rozpakowania jej do wybranego katalogu z ustawieniem zmiennych JRUBY_HOME (u mnie wskazywała na c:/apps/raven) oraz PATH. Okazało się, że nie dane mi było popracować z Raven pod Cygwin. Zazywczaj nie pracuję bezpośrednio z linii poleceń Windows, a korzystam z Cygwin, w którym wciąż otrzymywałem komunikat o błędnej ścieżce.

jlaskowski@dev ~
$ export JRUBY_HOME=`cygpath -u c:/apps/raven`

jlaskowski@dev ~
$ export PATH=$JRUBY_HOME/bin:$PATH

jlaskowski@dev ~
$ rake --version
Error opening script file: \cygdrive\c\apps\raven\bin\rake (The system cannot find the path specified)

Z linii poleceń Windows wszystko grało, więc nie tracąc czasu na rozwiązywanie problemów niezwiązanych z tematem przewodnim - JPA i Raven - pozostawiłem ich rozwiązanie na później (później okazało się, że na duużo później).

C:\jpa-raven>rake --version
rake, version 0.7.3

Doczytałem w międzyczasie, że na pomoc nieszczęśliwemu Cygwin może przyjść z pomocą RubyGems, więc po chwili miałem je zainstalowane.

jlaskowski@dev /cygdrive/c/apps/rubygems
$ ruby setup.rb
mkdir -p /usr/lib/ruby/site_ruby/1.8/rbconfig
install -c -m 0644 rbconfig/datadir.rb /usr/lib/ruby/site_ruby/1.8/rbconfig/datadir.rb
mkdir -p /usr/lib/ruby/site_ruby/1.8/rubygems
install -c -m 0644 rubygems/builder.rb /usr/lib/ruby/site_ruby/1.8/rubygems/builder.rb
install -c -m 0644 rubygems/command.rb /usr/lib/ruby/site_ruby/1.8/rubygems/command.rb
mkdir -p /usr/lib/ruby/site_ruby/1.8/rubygems/commands
...
As of RubyGems 0.8.0, library stubs are no longer needed.
Searching $LOAD_PATH for stubs to optionally delete (may take a while)...
...done.
No library stubs found.

A następnie zainstalowałem Raven zgodnie z instrukcjami na stronie Installing Raven.

jlaskowski@dev ~
$ gem install rake
Bulk updating Gem source index for: http://gems.rubyforge.org
Successfully installed rake-0.7.3
1 gem installed
Installing ri documentation for rake-0.7.3...
Installing RDoc documentation for rake-0.7.3...

jlaskowski@dev ~
$ gem install raven
ERROR: While executing gem ... (Gem::RemoteFetcher::FetchError)
OpenURI::HTTPError: 404 Not Found reading http://gems.rubyforge.org/gems/raven-1.2.4.gem

Zaczynałem się już zastanawiać, czy miałem borykać się z problemami Ravena, czy zabrać się za rozwiązanie problemu głównego - JPA i wykorzystaniu dynamicznemu wielu baz danych. Daje Ravenowi jeszcze kilka minut.

Zgodnie z dokumentem instalacyjnym Raven pobrałem raven-1.2.4.gem i zainstalowałem go ręcznie.

jlaskowski@dev ~
$ gem install raven-1.2.4.gem
Successfully installed raven-1.2.4
1 gem installed
Installing ri documentation for raven-1.2.4...
Installing RDoc documentation for raven-1.2.4...

Uff, to się nazywa krótkie wprowdzenie do Ravena, a w zasadzie do Ruby. Jak tak dalej pójdzie, to pójdę z torbami za moje pomysły zmagania się z nowym oprogramowaniem zamiast rozwiązywać właściwe problemy.

Ponownie sprawdzam działanie ruby na Cygwin z moim krótkim projektem. Z pomocą artykułu mój pierwszy Rakefile wyglądał następująco:

require "raven"
require "rake/clean"
CLEAN.include ["target", "dist"]

dependency "compile_deps" do |task|
task.deps << [ "com-oracle-toplink" ]
end

task "default" => "compile_deps"

Próba uruchomienia go kończyła się niepowodzeniem.

jlaskowski@dev /cygdrive/c/jpa-raven
$ rake compile_deps
(in /cygdrive/c/jpa-raven)
rake aborted!
Platform is not a module
/cygdrive/c/jpa-raven/rakefile:1
(See full trace by running task with --trace)

Widocznie nie dane mi było dzisiaj popracować z Raven na Cygwin. Przechodzę na konsolę Windows.

C:\jpa-raven>rake
C:/apps/raven/lib/ruby/site_ruby/1.8/rubygems/version.rb:116:in `initialize':
Malformed version number string toplink (ArgumentError)
from C:/apps/raven/lib/ruby/site_ruby/1.8/rubygems/version.rb:106:in `new'
from C:/apps/raven/lib/ruby/site_ruby/1.8/rubygems/version.rb:106:in `create'
from C:/apps/raven/lib/ruby/site_ruby/1.8/rubygems/specification.rb:288:in `version='
from C:/apps/raven/lib/ruby/site_ruby/1.8/rubygems.rb:505:in `version='
from (eval):4:in `load_specification'
from C:/apps/raven/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:128:in `initialize'
from (eval):2:in `new'
from (eval):2:in `load_specification'
... 9 levels...
from C:/apps/raven/lib/ruby/site_ruby/1.8/rubygems.rb:76:in `active_gem_with_options'
from C:/apps/raven/lib/ruby/site_ruby/1.8/rubygems.rb:50:in `gem'
from :1

Tutaj niestety nie jest przyjemniej, wręcz powiem, że beznadziejnie, ale biorąc pod uwagę mój brak doświadczenia z Raven wierzę, że wynika to właśnie z...braku doświadczenia.

Na dzisiaj mam dosyć Ravena. Może i jest fajny, ale zaczyna mnie irytować. Odpuszczam. Kończę artykuł, a tam na koniec wzmianka o innym narzędziu do budowania projektów - Buildr. Popróbujmy jego możliwości i zobaczmy, co to cudeńko potrafi. Może z nim jestem w stanie posunąć się dalej?!

Podobnie do Raven, Buildr oparty jest o Ruby. Zaczynam od dokumentu Getting Started. Na konsoli sprowadziło się do wydania kilku poleceń (znowu jestem pod Cygwin).

jlaskowski@dev ~
$ gem install buildr
Updating metadata for 6 gems from http://gems.rubyforge.org
......
complete
Building native extensions. This could take a while...
Successfully installed facets-1.8.54
Successfully installed builder-2.1.2
Successfully installed needle-1.3.0
Successfully installed net-ssh-1.1.2
Successfully installed net-sftp-1.1.0
Successfully installed rubyzip-0.9.1
Successfully installed highline-1.4.0
Successfully installed rjb-1.0.11
Successfully installed Antwrap-0.6.0
Successfully installed rspec-1.0.8
Successfully installed xml-simple-1.0.11
Successfully installed archive-tar-minitar-0.5.1
Successfully installed buildr-1.2.10
13 gems installed
Installing ri documentation for facets-1.8.54...
Installing ri documentation for builder-2.1.2...
ERROR: While generating documentation for builder-2.1.2
... MESSAGE: Unhandled special: Special: type=17, text=""
... RDOC args: --ri --op /usr/lib/ruby/gems/1.8/doc/builder-2.1.2/ri
--title Builder -- Easy XML Building --main README --line-numbers --quiet lib
CHANGES Rakefile README doc/releases/builder-1.2.4.rdoc
doc/releases/builder-2.0.0.rdoc doc/releases/builder-2.1.1.rdoc
(continuing with the rest of the installation)
Installing ri documentation for needle-1.3.0...
Installing ri documentation for net-ssh-1.1.2...
Installing ri documentation for net-sftp-1.1.0...
Installing ri documentation for highline-1.4.0...
Installing ri documentation for Antwrap-0.6.0...
Installing ri documentation for rspec-1.0.8...
Installing ri documentation for archive-tar-minitar-0.5.1...
Installing ri documentation for buildr-1.2.10...
Installing RDoc documentation for facets-1.8.54...
Installing RDoc documentation for builder-2.1.2...
Installing RDoc documentation for needle-1.3.0...
Installing RDoc documentation for net-ssh-1.1.2...
Installing RDoc documentation for net-sftp-1.1.0...
Installing RDoc documentation for highline-1.4.0...
Installing RDoc documentation for Antwrap-0.6.0...
Installing RDoc documentation for rspec-1.0.8...
Installing RDoc documentation for archive-tar-minitar-0.5.1...
Installing RDoc documentation for buildr-1.2.10...

jlaskowski@dev /cygdrive/c/jpa-buildr
$ buildr
To use Buildr you need a buildfile. Do you want me to create one?:
1. From directory structure
2. Skip
? 1
Created /cygdrive/c/jpa-buildr/buildfile

Stworzony buildfile prezentuje się następująco.

jlaskowski@dev /cygdrive/c/jpa-buildr
$ cat buildfile
# Generated by Buildr 1.2.10, change to your liking
# Version number for this release
VERSION_NUMBER = "1.0.0"
# Version number for the next release
NEXT_VERSION = "1.0.1"
# Group identifier for your projects
GROUP = "jpa-buildr"
COPYRIGHT = ""

# Specify Maven 2.0 remote repositories here, like this:
repositories.remote << "http://www.ibiblio.org/maven2/"

desc "The Jpa-buildr project"
define "jpa-buildr" do

project.version = VERSION_NUMBER
project.group = GROUP
manifest["Implementation-Vendor"] = COPYRIGHT
end

Po kilku zmianach plik wyglądał już nieco inaczej.

jlaskowski@dev /cygdrive/c/jpa-buildr
$ cat buildfile
VERSION_NUMBER = "1.0.0"

GROUP = "pl.jaceklaskowski.jpa-buildr"

OPENJPA = ["org.apache.openjpa:openjpa:jar:1.0.1"]

# Specify Maven 2.0 remote repositories here, like this:
repositories.remote << "http://www.ibiblio.org/maven2/"

desc "The JPA-Buildr project"
define "jpa-buildr" do

project.version = VERSION_NUMBER
project.group = GROUP
manifest["Implementation-Vendor"] = "Jacek Laskowski - http://www.JacekLaskowski.pl"

compile.options.target = "1.5"

end

I faktycznie coś robił, ale nie byłem nawet na początku drogi zestawiania projektu.

jlaskowski@dev /cygdrive/c/jpa-buildr
$ buildr
(in /cygdrive/c/jpa-buildr)
Downloading org.apache.ant:ant:jar:1.7.0
Downloading http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/ant/ant/1.7.0/ant-1.7.0.jar
100% |.........................................| 1.2MB/ 1.2MB Time: 00:00:23
Downloading org.apache.ant:ant:pom:1.7.0
Downloading http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/ant/ant/1.7.0/ant-1.7.0.pom
100% |.........................................| 9.5KB/ 9.5KB Time: 00:00:00
Downloading org.apache.ant:ant-launcher:jar:1.7.0
Downloading http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/ant/ant-launcher/1.7.0/ant-launcher-1.7.0.jar
100% |.........................................| 11.5KB/ 11.5KB Time: 00:00:00
Downloading org.apache.ant:ant-launcher:pom:1.7.0
Downloading http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/ant/ant-launcher/1.7.0/ant-launcher-1.7.0.pom
100% |.........................................| 2.3KB/ 2.3KB Time: 00:00:00
Downloading xerces:xercesImpl:jar:2.6.2
Downloading http://mirrors.ibiblio.org/pub/mirrors/maven2/xerces/xercesImpl/2.6.2/xercesImpl-2.6.2.jar
100% |.........................................| 987.0KB/987.0KB Time: 00:00:16
Downloading xerces:xercesImpl:pom:2.6.2
Downloading http://mirrors.ibiblio.org/pub/mirrors/maven2/xerces/xercesImpl/2.6.2/xercesImpl-2.6.2.pom
100% |.........................................| 150B/ 150B Time: 00:00:00
Downloading org.apache.ant:ant-trax:jar:1.7.0
Downloading http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/ant/ant-trax/1.7.0/ant-trax-1.7.0.jar
100% |.........................................| 6.7KB/ 6.7KB Time: 00:00:00
Downloading org.apache.ant:ant-trax:pom:1.7.0
Downloading http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/ant/ant-trax/1.7.0/ant-trax-1.7.0.pom
100% |.........................................| 3.8KB/ 3.8KB Time: 00:00:00
Downloading org.apache.ant:ant-junit:jar:1.7.0
Downloading http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/ant/ant-junit/1.7.0/ant-junit-1.7.0.jar
100% |.........................................| 90.6KB/ 90.6KB Time: 00:00:02
Downloading org.apache.ant:ant-junit:pom:1.7.0
Downloading http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/ant/ant-junit/1.7.0/ant-junit-1.7.0.pom
100% |.........................................| 3.7KB/ 3.7KB Time: 00:00:00
Building jpa-buildr
Testing jpa-buildr
Downloading junit:junit:jar:4.3.1
Downloading http://mirrors.ibiblio.org/pub/mirrors/maven2/junit/junit/4.3.1/junit-4.3.1.jar
100% |.........................................| 104.0KB/104.0KB Time: 00:00:02
Downloading junit:junit:pom:4.3.1
Downloading http://mirrors.ibiblio.org/pub/mirrors/maven2/junit/junit/4.3.1/junit-4.3.1.pom
100% |.........................................| 998B/ 998B Time: 00:00:00
Downloading jmock:jmock:jar:1.2.0
Downloading http://mirrors.ibiblio.org/pub/mirrors/maven2/jmock/jmock/1.2.0/jmock-1.2.0.jar
100% |.........................................| 104.2KB/104.2KB Time: 00:00:02
Downloading jmock:jmock:pom:1.2.0
Downloading http://mirrors.ibiblio.org/pub/mirrors/maven2/jmock/jmock/1.2.0/jmock-1.2.0.pom
100% |.........................................| 895B/ 895B Time: 00:00:00

Ale moment! Przecież potrzebuję struktury projektu (!) Wydaje mi się, że Raven oraz Buildr są dobre, ale w momencie istnienia struktury projektowej ze wszystkimi plikami. Ja jednak potrzebuję narzędzia do stworzenia struktury projektowej oraz jego integracji z narzędziem IDE (Eclipse lub NetBeans). Na chwilę obecną nie sądzę, aby jakiekolwiek narzędzie IDE wspierało projekty zarządzane przez Raven czy Buildr, więc na dzisiaj odpuszczam i wracam do sprawdzonego Maven 2.

jlaskowski@dev /cygdrive/c
$ mvn archetype:create -DgroupId=pl.jaceklaskowski.jpa -DartifactId=jpa-multidb-buildr -Dversion=1.0
[INFO] Scanning for projects...
...
[INFO] Archetype created in dir: c:\jpa-multidb-buildr
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------

Mam już strukturę projektową, jednakże pozostaje problem związany z IDE. Który pozwoli mi na import projektu w tej postaci?! Eclipse i NetBeans pozwolą mi ostatecznie zaimportować projekt, jednakże wprowadzanie zależności projektowych w IDE nie będzie odzwierciedlone w konfiguracji Raven i Buildr. Pomysł utrzymywania dwu światów (IDE vs Raven/Buildr) na dzisiaj jest zbytnim wyzwaniem. Pozostaję przy Maven 2.

Na koniec mojej przygody z Buildr przekopiowałem plik buildfile zdefiniowany wyżej i wykonałem polecenie buildr help:projects, aby dowiedzieć się o zdefiniowanych projektach.

jlaskowski@dev /cygdrive/c/jpa-multidb-buildr
$ buildr help:projects
(in /cygdrive/c/jpa-multidb-buildr)
jpa-multidb-buildr # The JPA-MultiDB-Buildr project

Na razie odpuszczam Ravena i Buildr. Zacznę śledzić ich rozwój, ale na dzisiaj koniec z nimi. Wracam do przygotowania środowiska dla zobrazowania tematu obsługi wielu baz danych w JPA. To wydaje się bezproblemowe.

09 grudnia 2007

Tworzenie wtyczek Maven 2 w Groovy

3 komentarzy
Jakiś czas temu planowałem stworzenie wtyczki Apache Maven 2 dla wzbogacenia możliwości Apache OpenEJB. W międzyczasie zainteresowałem się językami skryptowymi, szczególnie Groovy oraz JRuby, więc kiedy natrafiłem na wtyczkę Maven 2 wspomagającą tworzenie wtyczek Maven 2 w Groovy - groovy-maven-plugin wiedziałem, że to jest właśnie ten moment. I nie myliłem się. Prostota tworzenia wtyczek w Groovy uwidacznia się już przy bardzo trywialnych wtyczkach, jaką będzie nasza, kiedy to nie jest konieczne deklarowanie wyjątków czy typów parametrów (chociaż jest to zalecane).

Moje dotychczasowe doświadczenia spisałem w kolejnym artykule Tworzenie wtyczek Maven 2 w Groovy.

08 grudnia 2007

Wrażenia po wykładzie o EJB3/JPA na Politechnice Poznańskiej

1 komentarzy
Jak to ze mną bywa i tym razem nie starczyło czasu, aby treściwie przedstawić EJB3/JPA i jednocześnie w pełni zaangażować audytorium do dyskusji. Starałem się jak mogłem, obiecywałem sobie, że nie będzie wycieczek myślowych, dywagacji, żartów, itp., ale nie mogłem się opanować...a wszystko za sprawą dobrej atmosfery podczas prezentacji, w której dało się odczuć zainteresowanie tematem.

Chciałbym tym samym gorąco podziękować dr Dawidowi Weissowi za zaproszenie mnie na Politechnikę Poznańską celem przedstawienia tematu EJB3/JPA dla tak wspaniałego audytorium. Bawiłem się dobrze i wierzę, że inni również.

Zaczęliśmy o 13:30 po tym, jak widząc więcej, niż przewidywaną liczbę, osób zdecydowaliśmy się na zmianę sali na większą. Sala pierwsza klasa. Nie liczyłem ile osób przyszło, ale możnaby naliczyć około 80 osób (w tym kilka kobiet!). I muszę przyznać, że audytorium nie zawiodło. Tak mi się świetnie dyskutowało na tematy EJB3 i (pobieżnie) o JPA, że czas minął tak szybko, że nie mogłem uwierzyć, że prezentacja dobiegła końca - wybiła 16:15, a o 16:44 miałem pociąg powrotny do Warszawy. Ledwie zdążyłem na pociąg. Ech, szkoda, że to tak szybko minęło. Zaprezentowałem około 20 slajdów (z 60 dostępnych!) i widząc wlepione we mnie oczy błagające o coś ciekawszego na moje pytanie o prezentację tematu za pomocą przykładów - jakby publikę coś trafiło. Wszyscy się ożywili i na prawdę było widać duże zainteresowanie. Zanim zacząłem zabawę zapytałem o użycie narzędzi. Przeczuwając, że NetBeans może nie cieszyć się dużą popularnością, zapytałem o jego użycie. Naliczyłem około 6 osób. Po tym zapytałem o vi (tak przypadkiem dla poprawy nastroju) i okazało się, że więcej osób podniosło ręce niż przy NetBeans (!). Kiedy w końcu zapytałem o Eclipse miałem wrażenie, że wszyscy podnieśli ręce. Było to jedyne pytanie tak licznie przyjęte z aprobatą wszystkich. Kiedy, więc oznajmiłem, że przykłady będą prezentowane z użyciem...NetBeans powiało grozą. Nie trwało to jednak długo, bo wsparcie dla tworzenia aplikacji korporacyjnych w Javie to jedna z cech wiodących NetBeans. Pojawiła się nawet sugestia, aby nie korzystać ze skrótów klawiszowych, aby można było śledzić poszczególne kroki dokładniej. Podobnie z przyjęciem było w przypadku serwerów aplikacyjnych - wielu miało do czynienia z JBoss AS, niektórzy pracowali z Glassfish, ale nikt nie zgłosił się przy pytaniu o użycie Apache Geronimo (musiałem wywołać kogoś z tłumu dla poprawienia sobie samopoczucia ;-)). Zaprezentowałem kilka przykładowych aplikacji z użyciem NetBeans 6 oraz Glassfish v2 i dopiero, co zacząłem, a już musiałem kończyć. Szkoda.

Głosy jakie mnie dochodzą mogą świadczyć, że moja prezentacja o EJB3/JPA mogła się podobać, ale są też takie, które wskazują na pewne niedopracowanie tematu od strony samego prowadzenia prezentacji. Jak zwykle górę wzięła moja chęć przedstawienia tematu o EJB3/JPA w 2,5 godziny z najdrobniejszymi szczegółami (co wydaje mi się teraz za zadanie niemożliwe do wykonania, gdyż nawet przy 5 dniach warsztatów możnaby spodziewać się, że nie wszystkich mogłoby to satysfakcjonować pod względem dostępnego czasu).

Były takie głosy (od Darka):

feedback po wykładzie.

Generalnie super! Ale...

Było ciężko, skakanie po tematach, wchodzenie w szczegóły nie zawsze potrzebnie :/ Zrzuciłeś odpowiedzialność za przebieg wykładu na publiczność, kiepski pomysł. To wykładowca wie lepiej w jakiej kolejności i o czym mówić na temat danej technologii. (ludzie nie znający EJB nie mogli podpowiadać na jaki tamt mówić bo nie wiedzieli, ci znający pytali o szczegóły :/)

Generalnie udało mi się połapać, jednak przez to zamieszanie, pozostał niedosyt i wątpliwość, czy aby na pewno wiem już o co chodzi w EJB3 :/

Mimo tego, wykład bardzo mi się podobał! Dzięki, że przyjechałeś, że podzieliłeś się z nami swoją pasją! Super!


ale też i takie (to już z mojej skrzynki od Marcina):

Chciałbym podziękować za prelekcje na Politechnice Poznańskiej, która odbyła się w dniu wczorajszym.
Muszę przyznać, że przeżyłem 6 lat wykładów na Politechnice Gdańskiej oraz kilkanaście szkoleń w pracy zawodowej jednak muszę przyznać, że Twój wykład był poprowadzony w sposób fenomenalny i nie zdarzyło mi się być na żadnej inne prelekcji, która nie znudziła by mnie w ciągu 30 min.
Gratuluje podejścia do tematu. Myślałem, że w Polsce nie ma osoby, która byłaby wstanie podejść do tematu w sposób, który od wielu lat prezentują anglojęzyczni autorzy w swoich publikacjach (podejście do tematu w sposób luźny, a jednak bardzo merytoryczny).

Pozdrawiam i życze wielu sukcesów!!!


Mogę więc wnioskować, że jest jeszcze wiele do poprawienia, ale przy kilku dokładnych szlifach możnaby stworzyć jakąś serię wykładów poświęconych EJB3/JPA i na jej bazie stworzyć profesjonalne 5-dniowe szkolenie z przykładami i dokładnym omówieniem tematu. Pomysł mi się podoba. Są chętni, aby zagwarantować sobie (darmowe) miejsce przez zaproponowanie potencjalnych tematów? Jeśli męczy Cię jakikolwiek temat związany z EJB3/JPA już kolejny dzień i nie widać potencjalnego rozwiązania może wartoby zrzuć to na moje barki? Po co męczyć się samemu, jak ten czas możnaby poświęcić czemuś bardziej reklaksującego, np. siedzenie przed telewizorem z chipsami/paluszkami i napojem ;-)

Prezentacja dostępna jest do pobrania jako JacekLaskowski-PolitechnikaPoznanska-EJB3-07.12.2007.pdf.

Nota bene, pojawiły się głosy o moim potencjalnym wystąpieniu nt. Korporacyjnej Javy (może właśnie o EJB3/JPA) na Uniwersytecie Gdańskim. Kuba Neumann z Uniwersytetu Gdańskiego organizuje w semestrze letnim wykład poświęcony zaawansowanym technologiom w Javie. Spora część wykładów będzie poświęcona Korporacyjnej Javie (JSF, EJB, JPA, Web Services) i towarzyszącym nowoczesnym technologiom np. AJAX. Niektóre specjalistyczne wykłady wygłoszą zaproszeni goście.
Jeśli są chętni spoza Uniwersytetu Gdańskiego, którzy byliby zainteresowani w przedsięwzięciu oraz dyskusjach (w trakcie i po wykładach oraz na forum) sugeruje się kierowanie sugesti i wniosków bezpośrednio na jego ręce.

06 grudnia 2007

NetCAT 6.0 zakończony - Jacek Laskowski, Poland (513 CAT points)

7 komentarzy
Otwieram wiadomość od Jirki na grupie NetBeans IDE 6.0 Community Acceptance Testing program (NetCAT) (grupa zajmująca się sprawdzeniem przydatności NetBeans IDE 6.0 do publicznej "konsumpcji"), a tam, ku mojemu ogólnemu zdumieniu, napisano:

I am glad to announce that final CAT points were counted and published [1]. I apologize for the delay but I had to resolve several urgent Update Center publishing requests first.

Now, let me announce our winners! :-) I think it's actually not any surprise for those of you who monitored NetCAT communication channels regularly. So, I am happy to congratulate to the following 3 NetCAT participants:

1. Jacek Laskowski, Poland (513 CAT points)
2. Daniel Sheppard, United Kingdom (326 CAT points)
3. Tetsu Soh, Japan (317 CAT points)

Really good job guys! You deserve some extra award and I will contact you privately later this week.

[1] http://qa.netbeans.org/processes/cat/60/participants.html

Wciąż nie mogę uwierzyć w różnicę w punktach między pierwszym miejscem, a kolejnymi. Czułem, że liczba zgłoszonych przeze mnie usterek do NetBeans IDE 6.0 oraz liczba recenzji artykułów była duża, ale żeby było ich aż tyle?! Wręcz niemożliwe (!) Najlepiej przyjrzeć się punktacji u dołu strony NetCAT 6.0 - Participants of NetCAT 6.0 program i...samemu przeliczyć ;-)

Pora zająć się czymś firmowym - wracam do ewaluacji IBM Rational Application Developer v7.5 Open Beta i specyfikacji EJB 3.0. A jutro do Poznania!

05 grudnia 2007

RAD 7.5 zainstalowany - prosta aplikacja Java EE 5 działa bez zarzutu na WAS 6.1

7 komentarzy
Właśnie zakończyłem instalację IBM Rational Application Developer v7.5 Open Beta (dalej po prostu RAD), o którym pisałem kilka dni temu (IBM Rational Application Developer for WebSphere v7.5 Open Beta). Zapoznałem się z dokumentacją, której muszę przyznać, że nie ma wiele odnośnie nowych funkcjonalności RADa i zabrałem się za stworzenie prostej aplikacji Java EE 5 z bezstanowym ziarnem sesyjnym oraz servletem, który za pomocą adnotacji @EJB wywołuje go. Bez specjalnej znajomości IBM WebSphere Application Server 6.1 (z poprawką 6.1.0.13 i dodatkami dla EJB 3.0 i Web Services), który jest domyślnym środowiskiem uruchomieniowym w RADzie dla aplikacji korporacyjnych, aplikacja uruchomiła się poprawnie. Jak tak dalej pójdzie, będzie to moje podstawowe narzędzie podczas mojego piątkowego wykładu o EJB3 na Politechnice Poznańskiej.

Więcej o zmianach i samym produkcie w dokumencie IBM Rational Application Developer for WebSphere Software, Version 7.5 beta Release Notes.

Dla zainteresowanych szczegółami instalacji i funkcjonalności RADa załączam kilka zrzutów ekranu. Mogą się przydać przed podjęciem decyzji o jego instalacji i popróbowaniu się z nim.

Po rozpakowaniu 11 paczek instalacyjnych, postąpiłem zgodnie z dokumentacją instalacji i uruchomiłem instalatora.



Początkowo napotkałem na błąd związany albo ze zbyt długą nazwą (znany błąd w Windows), albo z użyciem znaku wykrzyknika w nazwie katalogu - C:\!Rational Application Developer v7.5.



Przeniosłem katalogi disk do katalogu C:\rad75 i rozpocząłem instalację jeszcze raz. Tym razem było w porządku.



Kilka klik, klik, klik i skończyłem na ekranie, gdzie mogłem dokonać wyboru interesujących mnie funkcjonalności (u dołu znajduje się informacja ile to cacko zajmuje).



Jeszcze rzut oka na ekran podsumowujący mój wybór



i po bodajże 30 minutach, RAD 7.5 był już zainstalowany.



Wciśnięcie przycisku Zakończ i jestem uRADowany.

Najpierw rzut oka na wersje RADa



a później samego Eclipse. Czy ja dobrze widzę, że korzystam ze świeżutkiego Eclipse 3.3.2?! To jest bardziej świeże niż to, co aktualnie używam - 3.3.1 (!).



Rozejrzyjmy się w możliwościach RADa. Zacznę od What's New w narzędziach wspierających dla Java EE 5



a następnie EJB 3.0



aż w końcu przechodzę do narzędzi dla JPA



Wygląda interesująco. Przez kilka kolejnych dni zapewne będzie to moje podstawowe narzędzie pracy.

04 grudnia 2007

Recenzja książki "Hibernate. Od Nowicjusza do Profesjonalisty"

3 komentarzy
Zebrałem się w sobie i udało mi się zrecenzować moją pierwszą, techniczną książkę Hibernate. Od Nowicjusza do Profesjonalisty wydawnictwa Power Net. Przez długi okres czasu nie mogłem się do tego zabrać, ciągle odkładając recenzję na później. A bo to specyfikacja JPA ciekawsza, a bo to EJB3 i tak w kółko. Książka leżała i czekała. I się w końcu doczekała. Czym więcej czytałem o JPA i EJB3, tym mniej miałem ochoty przeczytać tę książkę. W dodatku, w międzyczasie nadchodziły inne książki i ta po prostu traciła na ważności. Ostatecznie jednak, okazało się, że należało przeczytać książkę zaraz po jej otrzymaniu, gdyż ciekawostki jakie znalazłem o Hibernate przeszły moje najśmielsze oczekiwania. Nie zamierzam ich tutaj przedstawiać, gdyż książka robi to w specyficzny acz przyjemny sposób. Bez żadnych oporów mogę śmiało napisać, że książka warta była poświęconego jej czasu. Zdarzyło mi się już kilkakrotnie do niej zaglądać w poszukiwaniu informacji, więc nadal wypełnia swoją misję. I treść książki, jak i jej polskie tłumaczenie, sprawiają, że książka należy do obowiązkowych lektur każdego programisty Java. Polecam!

Pełna recenzja znajduje się w moim Wiki - Recenzja książki "Hibernate. Od Nowicjusza do Profesjonalisty".

03 grudnia 2007

XIX spotkanie Warszawskiej Grupy Użytkowników Technologii Java (Warszawa JUG)

0 komentarzy
Warszawska Grupa Użytkowników Technologii Java (Warszawa JUG) zaprasza na XIX spotkanie, które odbędzie się we wtorek 4.12.2007 o godzinie 18:30 w sali 4420 Wydziału MIMUW przy ul. Banacha 2 w Warszawie.

Temat prezentacji: EJB 3.0 z JPA 1.0 w POPie (Pytania i Odpowiedzi z Przykładami)
Prowadzący: Jacek Laskowski

UWAGA: Spotkanie rozpoczyna się wyjątkowo o godzinie 18:30.

Specyfikacja Enterprise JavaBeans 3.0 (EJB3), której integralną częścią jest Java Persistence API (JPA), to jedna z kluczowych elementów specyfikacji Korporacyjnej Javy 5 (Java EE 5). Jeszcze do niedawna wielu z przyjemnością zapomniałoby całkowicie o istnieniu EJB zastępując ją alternatywnymi rozwiązaniami i dopiero czynny udział osób związanych z projektami otartymi, m.in. Hibernate, czy Spring Framework sprawił, że EJB3 stał się ciekawym rozwiązaniem, po które można sięgnąć z przyjemnością podczas tworzenia rozwiązań korporacyjnych opartych o platformę Java EE 5. Biorąc pod uwagę ścisłą integrację EJB3 z pozostałymi elementami Java EE 5, nie sposób nie korzystać z jego dobrodziejstw, a jest ich wiele, z czego na szczególną uwagę zasługują - deklaratywne określanie wykorzystania usług serwera aplikacji Java EE 5 jak bezpieczeństwo, transakcje, trwałość, utrzymywanie sesji, czy udostępnianie ziaren EJB jako usług sieciowych, a skończywszy na elementach AOP w postaci mechanizmów przechwytywania zdarzeń rozwojowych ziaren.

Spotkanie będzie prowadzone w formie warsztatu. Rozpoczniemy od stworzenia wszystkich typów ziaren EJB, następnie zostanie zaprezentowana integracja z warstwą servletów, po czym przejdziemy do mechanizmu przechwytywania zdarzeń (interceptorów), aby skończyć na sesji pytań i odpowiedzi, które sprawią, że pozostały czas spędzimy na dyskusji, czy w ogóle warto się zajmować EJB3, w kontekście istnienia technologicznie zaawansowanych rozwiązań alternatywnych (jeśli takowe w ogóle istnieją). Właśnie pojawiła się najnowsza wersja NetBeans IDE 6, której ideą przewodnią było uproszczenie tworzenia aplikacji korporacyjnych w Javie, więc w połączeniu z serwerem GlassFish będzie to nasza platforma programistyczna. Spotkanie będzie kontynuacją doświadczenia polegającym na prowadzeniu prezentacji z minimalną porcją slajdów, gdzie motorem napędowym będą sami uczestnicy spotkania.

Jacek Laskowski zajmuje się Korporacyjną Javą od pierwszego dnia jej opublikowania. Jest członkiem zespołów rozwojowych Apache Geronimo, Apache OpenEJB, Apache ServiceMix, Apache XBean oraz Apache ActiveMQ. Zajmuje się rozpoznawaniem technologii upraszczających tworzenie aplikacji korporacyjnych z Java EE 5, a swoje spostrzeżenia publikuje w Notatniku Projektanta Java EE oraz na swoim Notatniku-Wiki. Jest założycielem i liderem Warszawskiej Grupy Użytkowników Javy (Warszawa JUG). Jacek jest członkiem zespołu NetBeans 6.0 Community Acceptance Test (poprzednio w NetCAT 5.0 oraz 5.5). Ideę dzielenia się wiedzą wprowadza w życie poprzez wystąpienia na konferencjach krajowych i zagranicznych. Służbowo związany z firmą IBM jako konsultant oprogramowania.

Planowany czas prezentacji to 1,5 godziny. Na zakończenie (około 15 minut) planowana jest dyskusja o wrażeniach z minionej konferencji Warsjava organizowanej przez Warszawa JUG w dniu 17.11.2007 oraz o kolejnych planach konferencyjnych wokół Javarsovia.

Wstęp wolny!

Zapraszam w imieniu Warszawa JUG!

02 grudnia 2007

IBM Rational Application Developer for WebSphere v7.5 Open Beta

3 komentarzy
W końcu się pojawił - IBM® Rational® Application Developer for WebSphere® v7.5 (w skrócie RAD 7.5), chociaż na razie wyłącznie w wersji OPEN BETA. Zgodnie z zapowiedziami wersji oficjalnej, produkcyjnej można oczekiwać jeszcze w tym miesiącu. Wszyscy, którzy zainteresowani są tworzeniem aplikacji zgodnych z Korporacyjną Javą 5 i związanych z platformą Eclipse mogą wreszcie odetchnąć i skorzystać z narzędzia, które odpowiada możliwościom NetBeans IDE 6. Jeśli wszystko pójdzie zgodnie z planem, to i NetBeans IDE 6, i RAD 7.5 będą dostępne produkcyjnie w tym miesiącu - grudzień 2007 (!) Zapowiada się dużo pracy przy ewaluacji oprogramowania przed Nowym Rokiem 2008.

Zgodnie z opisem produktu na stronie programu IBM® Rational® Application Developer for WebSphere® v7.5 Open Beta:

Rational Application Developer for WebSphere software extends Eclipse with visual construction development tools that improve Java™ developers productivity and shortens development and test lifecycle by helping them rapidly design, develop, assemble, test, profile and deploy high quality Java/J2EE™, Portal, Web, Web services and SOA applications.

a dalej napisano:

Delivering New & Emerging Programming models & Applications: Enhanced capabilities to deliver modern applications in emerging programming models using tools that help create EJB 3.0, JPA, Web Services with JAX-WS 2.0/JAX-B 2.0 and reliable secure profile applications. Additional support for the new JSF 1.2, JSP 2.1 and Servlet 2.5 standards is provided.

oraz

Latest Standards support: Includes latest standards, such as JEE5, RSP 1.0, WS-Policy Assertions for Web Services, WS-Reliable Messaging, WS-Addressing, MTOM, SOAP 1.2, WS-Secure Conversation and SIP (JSR 289).

Z mojego punktu widzenia produkt warty ewaluacji. Skończyłem jego pobieranie i zaraz przystępuję do instalacji. Ciekawe z jaką wersją Eclipse pracuje RAD 7.5? I w końcu jakie serwery aplikacyjne wspiera? Spodziewam się WAS 6.1 z rozszerzeniem dla EJB 3.0 (IBM® WebSphere® Application Server Version 6.1 Feature Pack for EJB 3.0) oraz Web Services (Feature Pack for Web Services for WebSphere Application Server V6.1), ale przede wszystkim Apache Geronimo 2. Już nie mogę się doczekać, aby się przekonać samodzielnie o możliwościach RAD 7.5 względem NetBeans 6.

30 listopada 2007

Dzień Geronimo - Running JBoss Seam 2.0.0.GA on Geronimo 2.1

1 komentarzy
Borykałem się z tym tematem od dobrych kilku tygodni. Zawsze coś mi krzyżowało szyki i tym razem, walcząc z katarem, udało mi się przygotować, jak sądzę, ciekawy zestaw kilku dokumentów "Jak To Zrobić" (ang. how-to). Pamiętam, jeszcze w Toruniu, kiedy próbowałem organizować spotkania Toruńskiej Grupy Użytkowników Linuksa w akademiku małżeńskim nr 10, uczestniczyła w nich osoba (bodajże Tomek), która prowadziła projekt JTZ, który miał na celu tłumaczenie dokumentacji linuksowej. Stare dzieje, ale nazwa projektu odpowiada formie dzisiejszych dokumentów i tak mi się jakoś przypomniało.

Mamy więc długo oczekiwany dokument o uruchomieniu przykładowej aplikacji booking projektu JBoss Seam 2.0.0.GA - Running JBoss Seam 2.0.0.GA on Geronimo 2.1. Nie jest to dokument dla ludzi słabego serca, ale Ci, którzy są gotowi na "jazdę po bandzie" na pewno znajdą dla siebie coś ciekawego. Bez względu na stan Twojego serca, ważna informacja jaka płynie z dokumentu to fakt poprawnego uruchomienia JBoss Seam 2.0.0.GA wraz z Hibernate JPA na Apache Geronimo 2.1.

Kolejne dwa dokumentu już są mniejszego kalibru, ale równie ciekawe. Pierwszy z nich How to disable Geronimo services to avoid port conflicts dotyczy sposobu wyłączania usług Geronimo w celu zapobieżenia konfliktom związanym z portami usług, a drugi How to change port numbers for Geronimo services dotyczy zmiany portów usług Geronimo. Oba mają przybliżyć możliwości Geronimo, co może być szczególnie przydatne podczas uruchamiania kilku instancji Geronimo na jednej maszynie.

Trzy nieduże dokumenty o Geronimo zdejmuje długooczekujące zadania z mojej listy "Do Zrobienia" i śmiało mogę powiedzieć, że 30.11 (piątek) jest dniem dokumentacji Geronimo.

Wracam do lektury Learning Ruby Michaela Fitzgeralda wydawnictwa O'Reilly. Zaczynam dostrzegać zalety języków skryptowych i teraz mam kolejny problem do rozwiązania JRuby vs Groovy. Jestem na 4 rozdziale i już mnie nosi, aby wszystkie następne projekty tworzyć z JRuby/Groovy ;-)

29 listopada 2007

Testowanie złączeń FETCH JOIN w JPA

0 komentarzy
Miało być prosto i szybko, bo planowałem to na nie więcej niż 30 minut. Skończyło się na kolejnym artykule i 1,5 dnia poszło w zapomnienie. Na szczęście wiedza pozostała i może się nawet okazać, że znalazłem błąd w OpenJPA w kontekście złączenia INNER JOIN. Na ostateczną ocenę przyjdzie mi jeszcze poczekać, a tym którzy nie mają zamiaru tego robić polecam lekturę mojego artykułu o złączeniach JPA - Testowanie złączeń FETCH JOIN w JPA.

A zaczęło się całkiem niewinnie, kiedy na grupie użytkowników Geronimo Tomasz Mazan (aka Beniamin) zadał pytanie Force to load subobjects in OpenJPA o wymuszenie wczytywania danych relacji w Java Persistence API (JPA). Domyślnie JPA wczytuje pola relacyjne z opóźnieniem, jednakże istnieje kilka możliwości zmiany tego zachowania. Tak się złożyło, że wcześniej badałem temat złączeń (ang. joins), więc krótka odpowiedź, uściślenie i ostatecznie problem został rozwiązany. Jest kilka możliwości zaprezentowania tematu, z czego ja wybrałem sposób praktyczny z kilkoma wspierającymi narzędziami. Będzie OpenJPA, Maven, JUnit 4 i Derby wszystko, aby zestawić środowisko do potwierdzenie działania złączeń w JPA. Miłej lektury!

25 listopada 2007

SCEA 5 Part 2 assignment - kolejny etap do 12 grudnia

2 komentarzy
Kolejna wiadomość wyjaśnia zasady drugiego etapu w certyfikacji SCEA 5 BETA (Sun Certified Enterprise Architect). Czas zakończenia etapu to 12 grudzień 2007. Zadania dotyczą znajomości UML, więc, w połączeniu z moimi zawodowymi obowiązkami, zamierzam wykorzystać do tego IBM Rational Software Architect 7. Niech się przekonam na własnej skórze, co to cacko potrafi i jak pomocne może być w kontekście mojej certyfikacji.

Jest też element polski w zadaniu - You will be graded on correctly solving the technical and performance requirements, not on the "polish" of the finished product. Czyżby przypuszczali, że będę wysyłał mój esej po polsku?! To oni jeszcze się nie nauczyli polskiego?! ;-)

Zainteresowanych tematem certyfikacji SCEA 5 BETA oraz wyników innych zapraszam na forum Architect Certification (SCEA) na JavaRanch.

Congratulations! You have passed the Multiple Choice - Part I, of the SCEA 5 free beta exam.
Part II and Part II Beta Dates:

Assignment (Part II) Beta Dates: November 21st - December 12th, 2007
Short Essay (Part III) Beta Dates: November 28th - December 26th, 2007

Below you will find the instructions on what you must accomplish in the free assignment beta exam 311-301A and how to submit for grading.

Assignment Instructions:

You will have three weeks to complete the assignment part. If you feel you cannot do this free beta assignment in three weeks, please do not start it, as December 12th is the last day to submit your assignment in order for it to be valid and graded. If you do not submit your assignment, please delete this assignment as it is obsolete once the submission deadline is reached. If you do NOT complete Part II, you do not have to do Part III as you must complete all three parts of the SCEA beta exam in order to receive your certification.

The assignment requires that you architect a solution using the JEE platform for a well-defined set of business requirements. You have been given a business scenario with a business domain model, use case diagram and use case narrative. You will be graded on correctly solving the technical and performance requirements, not on the "polish" of the finished product. However your submission should be easy to read, understand and follow.

We have designed the complexity of the assignment so that it should take between 40-60 hours. If you find yourself spending more than 60 hours, then you are probably providing more detail than is necessary or you are lacking some of the skills necessary to complete the assignment. In order to help us validate the complexity, please provide the number of hours it took you to complete the assignment. This will not have any impact on your grade.

Your submission will be evaluated on a large number of objective criteria that fall into five categories:

1) Class Diagram: This category covers how well your class diagram(s) address the object model needed to satisfy the requirements.

2) Component Diagram: This category covers how well your component diagram(s) convey the structure of the architecture in satisfying the requirements.

3) Deployment Diagram: This category covers how well your deployment diagram conveys the production environment in satisfying the requirements.

4) Sequence/Collaboration Diagrams: This category covers how well your sequence or collaboration diagrams satisfy the requirements of the assignment.

5) Risk and Mitigation List: This category covers how well you have identified and mitigated risks that are involved in architecting the solution.

Additionally, categories 1-4 are evaluated on UML compliance.

Attached is your assignment.

Submitting Assignment for Grade

When you have completed the 311-301A Free Assignment - Part II beta, please zip it up, attach it to an email with the subject line "311-301A Part II Beta", and send it to sunbeta@prometric.com with your:

Name:
Last Name:
Prometric Id Number:
Email:
Country:
Number of hours it took you to complete the assignment:

You will have until December 12 to submit your final assignment, after this date, we will no longer accept submissions and the assignment you have is obsolete.

Essay Beta Instructions

If you did not submit your assignment – Part II, please disregard this section.

You will receive a 3rd and final email which will contain your voucher number for the SCEA Part 3 Beta exam. This email will be sent within 24 hours.

Registration for the Essay - Part III will start on November 24th.

To register for the Sun Certified Enterprise Architect for the Java Platform, Enterprise Edition 5 Essay beta exam, exam number: 311-062, you may register online at www.prometric.com/Sun/default.htm, and follow the prompts. Or, you may register by phone, by calling your regional Prometric registration office, listed at www.prometric.com/ContactUs/TestTakers.

Asia/Australia - 61-2-96405830

Europe - 31-320-239-800

Japan - 81-0120-107737

Latin America - Contact your local Prometric testing center, listed at www.2test.com

USA/Canada - 1-800-795-3926

You will have until December 26th to complete the Essay beta Part III at a worldwide Prometric testing center.

Thank you for your participation and Good Luck.

Please note: The attached assignment is property of SUN Microsystems

22 listopada 2007

Wykład o EJB 3.0 na Politechnice Poznańskiej

7 komentarzy
Dzięki uprzejmości dr Dawida Weissa z Politechniki Poznańskiej 7 grudnia 2007 roku w godzinach 13:15-16:00 na Centrum Wykładowym Politechniki Poznańskiej, ul. Piotrowo 2 sala 6 zaprezentuję specyfikację Enterprise JavaBeans 3.0 (EJB3).

3 godziny wydają się być wystarczające, aby poruszyć większość (jeśli nie wszystkie) ważniejsze elementy specyfikacji i jej implementację w wykonaniu Apache OpenEJB, Apache Geronimo i potencjalnie GlassFish. Zgodnie z zaproszeniem wysłanym przez Dawida, obecność osób spoza specjalności TWO będzie mile widziana i nie będzie nikomu przeszkadzać.

Zachęcam do nadsyłania (np. jako komentarze do tej notatki) propozycji tematów dotyczących EJB 3.0 jakie powinienem poruszyć podczas prezentacji oraz sposobu jej prowadzenia - warsztaty, prezentacja, czy mikstura obu.

21 listopada 2007

SCEA 5 Beta results - przechodzę dalej!

3 komentarzy
Właśnie miałem kończyć na dzisiaj, kiedy ostatnie spojrzenie do skrzyki pocztowej i co widzę - SCEA Beta results, a tam:

Dear Jacek Laskowski,

Congratulations! You passed the SCEA Part 1 Beta exam. Passing score is 57%, your score is 69%. We will be sending a separate email containing your Part 2 assignment (which is a PDF file), complete with instructions, within the next 8 hours. If you do not receive the second email containing the assignment within the next 8 hours, please notify us at SunBeta@prometric.com. Thank you.

Sincerely,
SunBeta@prometric.com

Jeśli to kawał, to strasznie nieśmieszny. Czekam do rana na kolejne instrukcje. W końcu jak kawał to może rano będzie śmieszniej ;-) I jak tu zasnąć?!

Dla przypomnienia - FREE: SCEA 5 Beta Certification Exam (Three Parts).

Czy ktoś jeszcze podszedł do egzaminu? Jaki wynik? Jak tam wrażenia?

Relacja z WarsJava 2007 w Warszawie

2 komentarzy
O konferencji WarsJava 2007 (czytamy: warsdżawa) możnaby pisać wiele, jednakże jako, że należałem do ścisłego grona współorganizatorów pozwolę sobie na relację zdjęciową okraszoną kilkoma komentarzami. Mówi się, że zdjęcie, obrazek może wyrazić często więcej niż 1000 słów, a mając na uwadze nasze ogólne zarobienie, skrócę relację do niezbędnych szczegółów.

Proszę o namiary na osoby, których relacje z WarsJava ukazały się gdzieś w sieci. Najlepiej umieścić je jako komentarze do tej notatki.

Oczywiście jak to bywa przy organizowaniu tego typu przedsięwzięć przy 2-osobowej grupie organizatorów wszystko domykane było na ostatnią chwilę. Pewnie, że można było wcześniej, ale skoro zespół czynnych organizatorów składał się wyłącznie z 2 osób, a obowiązki nie pozwalały o sobie zapomnieć, nie dało się inaczej. Wspólnie z Łukaszem Świerczyńskim domykaliśmy sprawę wydatków do ostatniego dnia przed warsztatami, co ostatecznie zakończyło się decyzją, że koszulki będą dostępne na kolejnym spotkaniu Warszawa JUG w dniu 4.12.


Firma BLStream zdecydowała się pokryć koszty koszulek i tym samym konferencja miała swojego pierwszego (i jak się później okazało jedynego) sponsora. Jeszcze raz oficjalnie dziękuję w imieniu grupy Warszawa JUG za podjęcie decyzji o sponsorowaniu WarsJava 2007. W ten sposób nasze fundusze wzrosły i w ogóle nadzieje, że coś ciekawego może na tej konferencji się wydarzyć,np. rozdanie koszulek. Okazało się później, że nie było potrzeby się martwić zawczasu, gdyż ogólna ocena konferencji jaka dociera do mnie to 5+ (!)

Pewnie, że było kilka niedociągnięć, ale właśnie to był urok warsztatów - pełen luz okraszony dużą dawką technologii. Udało nam się stworzyć konferencję-warsztaty, które spełniły oczekiwania dużej rzeszy uczestników, którzy już zadeklarowali przybycie na kolejną edycję, a co istotne, że zostały zorganizowane dzięki pomocy Wydziału MIMUW oraz nas samych - grupy Warszawa JUG.


I tutaj należą się podziękowania dla p. dr Janusza Jabłonowskiego z MIMUW, który zasypywany moimi ciągłymi prośbami o sale i rzutniki sprawił, że strona nietechniczna nie stanowiła problemu, Łukasza Świerczyńskiego, który wspomógł mnie w organizacji (logo konferencji autorstwa jego brata Rafała Świerczyńskiego, koszulki, sponsorzy) oraz szanowne grono prelegentów WarsJava 2007 (w kolejności ich występowania): Łukasza Dywickiego, Wiktora Gworka, Sebastiana Pietrowskiego oraz Andrzeja Wisłowskiego.


Kiedy już nadszedł 17 października 2007 rozpoczęło się typowo - zadziałało prawo Murphy'ego i rzutnik odmówił współpracy. Na szczęście godzina 9:00 nie była typowa jak na sobotę (co widać na zdjęciu po początkowej ilości uczestników), więc mieliśmy mieszankę rzeczy typowych i nietypowych. To pozwoliło nam wszystkim dotrzeć się i potraktować problemy z rzutnikiem jako zaprawę do dalszych wspólnych bojów, tym razem technologicznych.


Pierwszym prelegentem był Łukasz Dywicki z tematem Praca z użyciem JAXB 2.0. Poszło sprawnie i rzeczowo, a jako, że Łukasz rozpoczynał i jeszcze te problemy rzutnikowe tym bardziej należą się brawa. Prezentacja pokazała nie tylko obycie Łukasza z JAXB, ale również jego znajomość klawiszologi Eclipse IDE. Po tej prezentacji już nikt nie miał złudzeń, że będzie ostra jazda i WarsJava to nie kolejna lajtowa imprezka. Gratulacje Łukasz!


Na chwilę przed kolejnym prelegentem zaczęło się zaludniać. Zbliżała się godzina 11:00, więc przy sobocie była to właściwa godzina, aby rozpocząć funkcjonowanie w społeczeństwie. Pojawili się nowi uczestnicy i czekając na naszą salę (która zajęta była na rzecz egzaminów z analizy różniczkowej do 11:00) na korytarzu zrobiło się tłoczno i gwarno.


Kolejnym prelegentem był Wiktor Gworek z tematem JRuby on Rails, czyli łączenie Javy i Rubiego. Nikt nie miał złudzeń, że nie tylko temat przyciągnie tłumy, ale również godzina (zaczynał o 11:00) i, a może przede wszystkim, ostatnie, dopracowane do perfekcji, jego prezentacje. Tym razem miało być jeszcze lepiej, bo to w końcu warsztaty, nieprawdaż? I nikt się nie zawiódł. Na początku rozgrzewka w postaci pewnej pracy manualnej.


Po robórkach ręcznych nadeszła pora wystąpienia Wiktora. Gość wiedział o czym mówi i z czym to się je. Dało się odczuć na sali ogólne zainteresowanie technologią i tylko możnaby się zastanawiać, czy to sposób prezentacji Wiktora, czy sama technologia była tego przyczyną.

Byli też tacy, którzy dojeżdżali na warsjava nie z okolic Warszawy, ale jeszcze dalej. Po ciężkich nocnych bojach z nowym podręcznikiem do NetBeans 6 zawitał również Radek Holewa. Widać było zmęczenie technologiczne materiału ;-)


O 12:30 nadeszła przerwa obiadowa i kolejna zmiana sali. To była dodatkowa atrakcja warsztatów - migracja z piętra na piętro, co miało niebagatelny wpływ na kondycję fizyczną polskiej społeczności javowej, która uczestniczyła w warsjava. Dla wielu zapewne było zbawienne, że zaczęliśmy na 5 piętrze, aby później zejść na piętro niżej, aż w końcu skończyliśmy na piętrze 2.

Przed kolejnym prelegentem - Sebastianem Pietrowskim, który przedstawiał temat W jedności siła: Spring-OSGi pojawili się dodatkowi niezidentyfikowani goście - czyżby w tej sali straszyło, czy tematami wzbudziliśmy moce piekielne?! ;-)


Po obiedzie i przy sobotniej aurze dawało się odczuć potrzebę ożywienia sali. Seba robił co mógł, ale niechybnie nie udało się. OSGi to nie JRuby, czy JAXB, więc mimo, że miało być również coś o Spring Framework to jego rola sprowadziła się do udostępnienia środowiska uruchomieniowego, a całość prezentacji poświęcona została OSGi. Jeszcze dużo wody w Wiśle upłynie zanim ta technologia zdobędzie sobie uznanie programistów, więc chylę czoła przez karkołomnym przedsięwzięciem demonstracji tej technologii przy niesprzyjających warunkach czasowych (godzina 13:30 w sobotę po obiedzie i to nie wszyscy) i lokalowych (sala okazała się trochę za mała).


Kolejne warsztaty o 15:15 poprowadził Andrzej Wisłowski z tematem Spring MVC + Freemarker - Budowa aplikacji webowej. Możnaby powiedzieć, że znowu Spring, ale podobnie jak poprzednio Spring sprowadził się do warstwy mediacji między modułami i udostępniał inne możliwości, z których można byłoby skorzystać przy tworzeniu aplikacji z Freemarkerem (nie mylić z FreeMakerem - brakuje 'r').


Andrzej nie miał łatwego zadania - temat ze względu na Springa mógł przyciągnąć tłumy, jednakże z mojego punktu widzenia sam Freemarker już niekoniecznie. Pojawiło się wiele pytań o sposób działania, więc należy potraktować to tylko i wyłącznie jako mój punkt widzenia.


Bardzo się ucieszyłem, kiedy na zakończenie warsztatów Warsjava okazało się, że wiele osób wyraziło chęć uczestniczenia w kolejnej edycji warsztatów i deklarowała potrzebę kontynuowania tematu organizacji tego typu imprez, z pewnymi udoskonaleniami. Jakimi? W okolicy MIMUW brakuje miejsca na dobry obiad, a i sale wydawały się być zbyt małe. Konieczne będą usprawnienia, ale do tego potrzeba ochotników, którzy w wolnym czasie chcieliby współorganizować kolejną konferencję Javarsovia 2008. A jest wiele do zrobienia - począwszy od utworzenia agendy, nagłośnieniu imprezy (plakaty, fora, serwisy internetowe), zorganizowaniu miejsca, w którym przyszłoby nam prowadzić konferencję (potencjalnie byłby to MIMUW, jednakże problemy lokalowe w sobotę ze względu na zajęcia mogą być nie do przezwyciężenia), a skończywszy na sponsorach (powinienem raczej odwrócić kolejność). To są jedynie podstawowe elementy organizacji warsztatów, a jest wiele innych, które mogłyby przyczynić się do ich urozmaicenia - rzutniki o dobrej rozdzielczości, dwa ekrany na salę, aby publiczność nie musiała nadwyrężać swoich, i tak nadwyrężonych, oczu (a jedynie umysły), napoje, poczęstunek, ulotki, oceny wystąpień i w ogóle stronę konferencji. A to i tak nie wszystko, jeśliby pomyśleć o konferencji podobnej do JavaPolis, czy Jazoon. Wszystko to może być, ale wyłącznie, jeśli zechcesz nam pomóc. Do tej pory zgłosiło się 3 chętnych przy organizacji konferencji Javarsovia (w tym 2 dotychczasowych organizatorów). Ja należę do nielicznego grona ssaków ginących - optymistów, którzy wierzą, że takie przedsięwzięcie można i w pojedynkę zestawić, jednakże biorąc pod uwagę komentarze napływające od społeczności javowej należałoby już zapomnieć o prototypowaniu. Należałoby zebrać uwagi od uczestników, obserwatorów i innych zainteresowanych, aby ostatecznie stworzyć coś doskonalszego. Wtedy 3 osoby to zdecydowanie za mało.

Zainteresowany? Zainteresowana? Przyłącz się do grupy Warszawa JUG i zorganizujmy to wspólnie. Będzie tylko tak, jak zrobimy to sami. Nikt nie zrobi tego za nas, a jeśli nawet, to będzie to tylko i wyłącznie tyle, ile uda się im poświęcić na to czasu, a to może być zdecydowanie za mało w porównaniu z Twoimi oczekiwaniami.

Następna konferencja Javarsovia 2008 już niebawem. Więcej informacji o działalności grupy na jej stronach - Warszawa JUG.

18 listopada 2007

Tworzenie usługi sieciowej z JAX-WS, Apache Geronimo 2 i NetBeans 6

0 komentarzy
Aby otrząsnąć się z wrażeń związanych z minionymi warsztatami javowymi WarsJava, które odbyły się w zeszłą sobotę, 17.11, na Wydziale MIMUW w Warszawie postanowiłem opisać sposób tworzenia usługi sieciowej JAX-WS z wykorzystaniem wersji rozwojowej Apache Geronimo 2.1 oraz NetBeans IDE 6. Tytuł artykułu Tworzenie usługi sieciowej z JAX-WS, Apache Geronimo 2 i NetBeans 6 mówi sam za siebie. Ciekawostką Geronimo jest możliwość uruchomienia usługi w ramach aplikacji internetowej bez deskryptora web.xml. Poza wykorzystaniem adnotacji @WebService oraz @WebMethod użyłem dwóch kolejnych @PostCreate oraz @PreDestroy znanych z EJB3. Na zakończenie prezentuję tworzenie klienta usługi jako samodzielną aplikację.
Artykuł można traktować jako moje rozpoczęcie lektury specyfikacji JAX-WS, do której przymierzałem się od dobrych kilku miesięcy.

16 listopada 2007

JBoss Seam 2.0.0.GA na Geronimo 2.1 - aplikacja booking działa!

7 komentarzy
Niemożliwe stało się możliwe! ;-) Wystarczyło zarwać kilka nocek i mam. Udało mi się w końcu uruchomić przykład booking projektu JBoss Seam 2.0.0.GA na wersji rozwojowej Apache Geronimo 2.1.

Przykład booking traktowany jest przez programistów Seama jako aplikacja referencyjna wykorzystująca wiele z funkcjonalności Seama oraz Korporacyjnej Javy 5, która prezentuje również możliwość uruchomienia Seama na Glassfish czy OC4J. Aplikacja jest de facto gwarantem, że Seam to szkielet programistyczny niezależny od środowiska uruchomieniowego, a co za tym idzie i JBoss AS, byle było to środowisko serwera aplikacji Java EE 5 (i tu też nie do końca, ale to już nie ma większego znaczenia). Brakowało jedynie uruchomić Seama na Geronimo i lista zrobiłaby się całkiem ciekawa. Teraz już taka jest.


Kiedy kilka dni temu jakimś dziwnym trafem zacząłem próbować się z Seamem i Geronimo nie przypuszczałem, że zajmie mi to prawie tydzień. Postanowiłem uruchomić Seama na Geronimo, aby połączyć przyjemne z pożytecznym, tj. podszkolić się z JSF 1.2 (wraz z dodatkowymi projektami jak facelets i RichFaces) oraz kontynuować potyczki z EJB3 i już myślałem, że będzie konieczna niezła modyfikacja trójki Geronimo/OpenEJB/OpenJPA, kiedy okazało się, że wystarczyło jedynie odpowiednie skonfigurowanie aplikacji dla Geronimo i voila - zaczęło działać. Bardzo ważny podkreślenia jest fakt, że nie zmodyfikowałem żadnego elementu przykładu booking, a wszelkie możliwe modyfikacje umieściłem w planie (plik wspomagający rozmieszczenie aplikacji na serwerze Geronimo), co jedynie przesłania domyślną konfigurację aplikacji. Dla zwrócenia uwagi napiszę, że uruchomienie przykładu na Glassfish, czy OC4J wymaga zmiany w persistence.xml i przebudowania aplikacji. Geronimo pozostawia przykład nietknięty.

Dodatkową ciekawostką jest uruchomienie przykładu z domyślnym dostawcą JPA w Geronimo - Apache OpenJPA, ale również z Hibernate JPA. Jak się okazało Hibernate również nie jest konieczny dla Seama, co wskazuje na siłę Seama jako szkieletu programistycznego niezależnego od docelowej platformy uruchomieniowej byle dostarczone były pewne usługi, z których korzysta dostarczane przez EJB3, JPA, JSF, itp.

Aby nie pozostawić tego tematu bez dodatkowego komentarza dopiszę, że aby uruchomić przykład booking z Hibernate JPA musiałem uruchomić go w trybie debugowania (ech, kiedy będzie przyjemniejsze słówko dla tego?!) i "przeskoczyć" jedną linię w org.hibernate.ejb.Ejb3Configuration po pobraniu źródeł Hibernate EntityManagera. Po zamianie wartości wywołania info.getJarFileUrls() na linii 344 na Collections.EMPTY_LIST Hibernate działał dalej bezbłędnie. Ot, takie malutkie usprawnienie. Sprawdziłem dokumentację javadoc dla javax.persistence.spi.PersistenceUnitInfo i trudno zdecydować, czy pusta lista (oczekiwanie Hibernate JPA) jest bardziej poprawna od null (zwracanego prze Geronimo) jako wynik metody getJarFileUrls().

Zamierzam spisać moje doświadczenia w artykule i opublikować na swoim Wiki. Rozejrzę się również za możliwością opublikowania go w Software Developer's Journal (jakby tak otworzyć nowy rok takim artykułem byłoby ciekawie). Teraz można spodziewać się więcej Seama u mnie ;-)

Co ciekawsze wycinki z dziennika (zdarzeń) Geronimo 2.1-SNAPSHOT, po poprawnym rozmieszczeniu aplikacji booking Seama.
02:10:11,812 DEBUG [GBeanSingleReference] Started org.jboss.seam.examples.jee5/jboss-seam-jee5/2.0.0.GA/ear?
J2EEApplication=org.jboss.seam.examples.jee5/jboss-seam-jee5/2.0.0.GA/ear,JCAConnectionFactory=jdbc/__default,
JCAResource=seam-jee5-dbpool,ResourceAdapter=seam-jee5-dbpool,ResourceAdapterModule=seam-jee5-dbpool,
j2eeType=JCAManagedConnectionFactory,name=jdbc/__default
02:10:11,828 DEBUG [GBeanInstanceState] GBeanInstanceState for: org.jboss.seam.examples.jee5/jboss-seam-jee5/2.0.0.GA/ear?
J2EEApplication=org.jboss.seam.examples.jee5/jboss-seam-jee5/2.0.0.GA/ear,JCAConnectionFactory=jdbc/__default,
JCAResource=seam-jee5-dbpool,ResourceAdapter=seam-jee5-dbpool,ResourceAdapterModule=seam-jee5-dbpool,
j2eeType=JCAManagedConnectionFactory,name=jdbc/__default State changed from starting to running
02:10:11,890 DEBUG [GBeanSingleReference] Started org.jboss.seam.examples.jee5/jboss-seam-jee5/2.0.0.GA/ear?
EJBModule=jboss-seam-jee5.jar,J2EEApplication=org.jboss.seam.examples.jee5/jboss-seam-jee5/2.0.0.GA/ear,
PersistenceUnitModule=jboss-seam-jee5.jar,j2eeType=PersistenceUnit,name=bookingDatabase
02:10:12,187 INFO [Version] Hibernate Annotations 3.3.0.GA
02:10:12,296 INFO [Environment] Hibernate 3.2.4.sp1
02:10:12,390 INFO [Environment] hibernate.properties not found
02:10:12,406 INFO [Environment] Bytecode provider name : cglib
02:10:12,421 INFO [Environment] using JDK 1.4 java.sql.Timestamp handling
02:10:13,156 INFO [Version] Hibernate EntityManager 3.3.1.GA
02:10:13,546 INFO [Ejb3Configuration] Processing PersistenceUnitInfo [
name: bookingDatabase
...]
02:16:13,328 ERROR [Ejb3Configuration] Container is providing a null PersistenceUnitRootUrl: discovery impossible
02:16:13,468 WARN [Ejb3Configuration] Defining hibernate.transaction.flush_before_completion=true ignored in HEM
....
02:16:18,609 INFO [EntityBinder] Bind entity org.jboss.seam.example.booking.User on table Customer
02:16:19,250 INFO [Version] Hibernate Validator 3.0.0.GA
02:16:19,812 INFO [ConnectionProviderFactory] Initializing connection provider:
org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider
02:16:19,828 INFO [InjectedDataSourceConnectionProvider] Using provided datasource
02:16:19,843 INFO [SettingsFactory] RDBMS: Apache Derby, version: 10.3.1.4 - (561794)
02:16:19,843 INFO [SettingsFactory] JDBC driver: Apache Derby Embedded JDBC Driver, version: 10.3.1.4 - (561794)
02:16:20,093 INFO [Dialect] Using dialect: org.hibernate.dialect.DerbyDialect
02:16:20,156 INFO [TransactionFactoryFactory] Transaction strategy: org.hibernate.ejb.transaction.JoinableCMTTransactionFactory
02:16:20,171 INFO [TransactionManagerLookupFactory] instantiating TransactionManagerLookup:
org.apache.geronimo.hibernate.transaction.GeronimoTransactionManagerLookup
02:16:20,187 INFO [TransactionManagerLookupFactory] instantiated TransactionManagerLookup
....
02:16:28,625 INFO [ServletContextListener] Welcome to Seam 2.0.0.GA
...

13 listopada 2007

5-minute Tutorial on Enterprise Application Development with Eclipse and Geronimo

8 komentarzy
Temat tworzenia aplikacji korporacyjnych z Korporacyjną Javą 5, Geronimo i Eclipse pojawiał się na grupie użytkowników Geronimo kilkakrotnie. W końcu zebrałem się w sobie i stworzyłem krótki, 5-minutowy artykuł na ten temat, który opublikowałem na stronach dokumentacji Geronimo - 5-minute Tutorial on Enterprise Application Development with Eclipse and Geronimo. Artykuł jest w języku angielskim, więc nie każdemu przypadnie do gustu, ale jest tam wystarczająca ilość wspomagających zrzutów ekranu, ażeby nawet bez znajomości angielskiego można było poradzić sobie z tematyką. Wyprzedzając krytyczne uwagi w stylu: Taki 5-minutowy Hello World to zawsze będzie działał, napiszę, że artykuł miał zająć wyłącznie 5 minut i miał zaprezentować, że się da, a nie, że da się wszystko. Zachęcam wszystkich do popróbowania się z tematem i nadsyłanie komentarzy (szczególnie tych krytycznych, bo co dzisiaj jest czyimś problemem, jutro może być Twoim ;-)).

12 listopada 2007

Warsjava - I Warszawskie Warsztaty Javowe organizowane przez Warszawa JUG

5 komentarzy
Już w tę sobotę, 17 listopada od godziny 9:00 do 17:00 w Warszawie, w budynku Wydziału MIM UW przy ul. Banacha 2, w salach 3180, 4420 i 5440 odbędzie się Warsjava - I Warsztaty Javowe organizowane przez Warszawa JUG.

Pomysł zorganizowania Warsjava polega na przeprowadzeniu prezentacji wyłącznie w formie warsztatów, podczas których tworzona będzie aplikacja z wybranym oprogramowaniem czy technologią, z aktywnym udziałem publiczności, która "kieruje" rozwojem aplikacji. Jest to tworzenie aplikacji "na żywo".
Jeśli masz pytania odnośnie prezentowanej technologii, czy rozwiązania jest to idealny moment, aby skorzystać z okazji i odpytać prezentującego o szczegóły, a może i o kompletne rozwiązanie. Proponujemy doładować baterie w laptopach i spróbować się zmierzyć z tematyką warsztatów samodzielnie. Dobra zabawa gwarantowana!

Patronem imprezy są władze Wydziału MIM UW, podczas gdy pałeczkę głównego sponsora dzierży firma BLStream.

Koszty wstępu na warsztaty pokrywają organizatorzy!

Więcej na stronie warsztatów Warsjava. Serdecznie zapraszam w imieniu organizatorów.

07 listopada 2007

JavaServer Faces i Spring Framework w parze z Apache Maven i Apache Geronimo

6 komentarzy
Do tej pory dużo rozpisywałem się o Korporacyjnej Javie 5 (Java EE 5) i tym razem...nie będzie inaczej (bo jak nie skorzystać z czegoś, co jest do wzięcia na wyciągnięcie ręki?!). Różnicą będzie wykorzystanie możliwości usług serwera aplikacji i rozszerzenie ich o możliwości Spring Framework. A skąd pomysł na skorzystanie ze Springa? Tym, co skłania do użycia Spring Framework jest jego zaawansowany mechanizm wstrzeliwania zależności (ang. DI - dependency injection), który w korporacyjnej javie jest stosunkowo mocno okrojony, powiedziałbym zawężony do niezbędnego minimum. Skoro siłą Springa jest mechanizm wstrzeliwania zależności, a serwera aplikacji Java EE 5 usługi, jak transakcyjność, utrwalanie danych, bezpieczeństwo, współbieżność, czy możliwość ich rozproszenia, to dlaczegóżby nie połączyć obu, aby mieć doskonalsze środowisko do tworzenia aplikacji korporacyjnych? Zawsze mnie korciło, aby bliżej przyjrzeć się Springowi, więc nadeszła pora upiec dwie pieczenie na jednym ogniu - rozpoznawać Springa w kontekście rozpoznawania kolejnej technologii Java EE 5 - JavaServer Faces (JSF) 1.2. W JSF istnieje pewien wycinek wsparcia dla DI, który oferuje Spring, więc mając zintegrowane oba rozwiązania spodziewam się, że wszelkie braki w JSF zostaną uzupełnione. Pozostaje pytanie o dalsze elementy środowiska, które pomogą w realizacji celu. Do programowania w Javie wykorzystam Eclipse IDE 3.3.1.1 z wtyczką Geronimo Eclipse Plugin, podczas gdy zarządzanie zależnościami aplikacyjnymi pozostawię projektowi, który spisuje się w tej roli bezsprzecznie najlepiej Apache Maven 2. Nie, nie chciałbym tym razem uskuteczniać akrobacji z linii poleceń, więc integrację między Eclipse IDE i Maven oprę na wtyczce M2Eclipse (Tycho). Środowiskiem uruchomieniowym tworzonej aplikacji internetowej będzie Apache Geronimo 2.0.2.

Całe środowisko będzie przyczółkiem do dalszych integracji w celu wykorzystania najlepszych cech poszczególnych projektów i technologii upraszczając proces tworzenia aplikacji korporacyjnych Java EE 5, gdzie głównym rozgrywającym będzie JSF 1.2.

Zapraszam do lektury artykułu JavaServer Faces i Spring Framework w parze z Apache Maven i Apache Geronimo. Co mnie bardziej interesuje to komentarze dotyczące sposobu przedstawienia tematu i dalsze ścieżki jego rozwoju. Generalnie doskwiera mi brak krytycznych komentarzy ;-)