W dniach 19 i 20 kwietnia w Gdańsku odbywała się konferencja infoShare, której Kainos był srebrnym sponsorem. Ja miałem okazję uczestniczyć w drugim dniu wydarzenia, podczas którego najbardziej zainteresowały mnie prezentacje dotyczące platformy Java EE. Prowadził je Adam Bien.

Moje dotychczasowe doświadczenia z Java EE były zdecydowanie negatywne. Ponad pięć lat temu brałem udział w projekcie bazującym na J2EE 2 i przytłoczony tonami XMLa oraz masą interfejsów stwierdziłem, że w miarę możliwości będę unikać tej platformy. Tego po prostu nie dało się używać – ilość zbędnego kodu (niemającego nic wspólnego z logiką biznesową), który musiał zostać napisany, była przerażająca.

Nietrudno więc sobie wyobrazić, że na wykłady Adama udałem się bez większego entuzjazmu, zastanawiając się, na jaką potworność Oracle tym razem skaże biednych programistów…

Na szczęście nic z tego! Java EE6 prezentuje się na prawdę bardzo dobrze. Myślą przewodnią prezentacji Adama było powstrzymanie się od tworzenia rozbuchanej architektury aplikacji i skupienie się na pragmatycznej realizacji logiki biznesowej. Jeżeli nie potrzebujesz interfejsu, to go nie twórz. Jeżeli nie musisz tworzyć fabryki – nie twórz jej. Skupmy się na na rozwiązywaniu problemów, a nie tworzeniu nowych. Java EE 6 daje programistom narzędzia, dzięki którym mogą się skoncentrować na tym, co istotne i nie zmuszają ich do produkowania metadanych opisujących problem, który mają rozwiązać.

Podczas wykładów zostały omówione następujące tematy:

  • Wstrzykiwanie zależności przez CDI (Contexts and Dependency Injection) – w jaki sposób konfigurować zależności obiektów przez anotacje @Inject, @Produces i @Specializes. Wszystko bez grama XMLa!
  • Przechwytywanie wywołać funkcji (programowanie aspektowe) – anotacje @Interceptors i @AroundInvoke, użycie obiektu typu InvocationContext.
  • Mechanizm zdarzeń (eventy) – anotacja @Observes i klasa Event. Różnicowanie reakcji na zdarzenie ze względu na status transakcji.
  • Mechanizm pluginów – proxy Instance pozwalające uzyskać implementacje zadanego interfejsu.
  • Metody działające asynchronicznie – anotacja @Asynchronous i jej konsekwencje. Sprawdzanie wyników przez proxy AsyncResult i Future.
  • Cykliczne uruchamiania zadań (scheduling) – statyczna (@Schedule) oraz dynamiczna (ScheduleExpression, Timer) konfiguracja.
  • Budowa usług RESTowych — podstawowa konfiguracja zasobów (@ApplicationPath, @Path), mapowanie akcji (@GET, @POST, etc.), negocjacja content-type (@Produces).

Oczywiście powyższe tematy zostały przedstawione hasłowo, bez zbytniego zagłębiania się w szczegóły – to jednak wystarczyło, aby pokazać platformy i podejście do tworzenia aplikacji. Wszystkie te rozwiązania, które prezentował Adam po prostu działy, nie wymagając większej gimnastyki umysłowej do ich zrozumienia, ani tracenia czasu na tworzenie tzw. boilerplate, czyli powtarzalnego kodu potrzebnego do uruchomienia aplikacji, który nie przybliża programisty do rozwiązania problemu. Dla mnie, to bardzo istotne zalety Java EE 6.

Kod źródłowy, który powstał, podczas prezentacji, jest dostępny pod adresem:

http://kenai.com/projects/javaee-patterns/sources/hg/show/hacks/infoshare2012

Projekty są tworzone w NetBeans, zmiany kontrolował, Git (repozytorium jest załączone).

Podsumowując, wystarczą niecałe trzy godziny demonstracji, aby przekonać mnie, że Java EE 6 jest warta uwagi. Jeżeli będę miał wpływ na wybór technologii przy tworzeniu nowego projektu, z pewnością rozważę właśnie tę platformę.

A dla tych, którzy wciąż nie są przekonani – Adam Bien na infoShare 2012: