01 kwietnia 2008

Nowości NetBeans IDE 6.1 - Spring Framework Support

Wydaje się, że teraz zapisuję swoje spostrzeżenia szybciej niż udaje mi się je opublikować (!) Piszę po prostu wszędzie - na kartkach, karteczkach, w notesie, a to plik tekstowy tutaj, a to tam. I zauważyłem pewną prawidłowość, że czym więcej piszę, tym więcej czytam, a czym więcej czytam tym mam więcej do napisania, tyle się ciekawego dzieje dookoła. Dobrze, że człowiek ma rodzinę, która potrafi sprowadzić na ziemię, bo odleciałbym w przestworza na dobre. Ciekawym podejściem do badania tematów nowych technologii jest puszczenie ich równolegle (tzn. semi-równolegle), czyli zajmuję się jednym tematem, a kiedy uda mi się coś zbadać, zostawiam go i przechodzę do całkowicie innej technologii. Zauważam, że nie czuję zmęczenia, które mógłbym doświadczać, kiedy zanurzyłbym się w pojedyńczej technologii i dłubałbym w niej, i dłubałbym. Monotonia nie sprzyja rozumieniu nowych tematów, a zadręczanie się niemożnością zrozumienia ich najlepiej rozwiązać odłożeniem na bok i zajęciem się czymś odświeżającym, np. kolejnym nowym tematem. Jak na razie u mnie się sprawdza.

Przy dziejszym pierwszo-kwietniowym dniu wypadałoby opublikować coś nietuzinkowego acz wciąż mało realnego, ale nic nie przychodzi mi do głowy, więc będzie jak zwykle, całkowicie poważnie. Może jednak niektórzy znajdą w moim wpisie coś pierwszokwietniowego ;-)

Po ostatnich zgłoszeniach błędów w IssueZilla NetBeansa w związku z funkcjonalnością tworzenia aplikacji JSF typu CRUD, którą opisywałem w Nowości NetBeans IDE 6.1 - JSF CRUD Generator, okazało się, że używałem przestarzałej wersji 6.1 BETA i jako rozwiązanie zaproponowano uaktualnienie środowiska do najnowszej wersji rozwojowej. Zatem można powiedzieć, że oficjalna beta już przestaje być warta uwagi i dla tych, którzy potrzebują wrażeń wersja rozwojowa NetBeans IDE 6.1 jest tym, czego potrzebują.

Po aktualizacji NetBeans postanowiłem przyjrzeć się wsparciu dla Spring Framework (Spring Framework Support), którą przedstawia się jako jedną z wartościowych nowości w NetBeans IDE 6.1.

Nie pamiętam dokładnie, czy najpierw postanowiłem zbadać NetBeans IDE 6.1 i jego możliwości springowe, czy było to po tym, kiedy przeczytałem Spring support in Netbeans IDE 6.1 Beta. Tak czy owak, po przeczytaniu artykułu postanowiłem sprawdzić go w działaniu i okazało się, że wiele z informacji jest dalece nieprawdziwa i NetBeans 6.1 oferuje znacznie więcej. Nie jest wprawdzie wspaniale, ale określenie lepiej pasuje doskonale. Nie ukrywam, że spodziewałem się więcej. Nowicjusze springowi (wliczam do tej grupy również siebie) na pewno nie znajdą w NetBeans znacznego uproszczenia ich czasu, który należy poświęcić na naukę Spring Framework. Oczywiście jest wsparcie dla edycji plików springowych oraz łatwiejsze tworzenie aplikacji opartych o Spring MVC, ale w/g mnie jest to zdecydowanie za mało. Coraz to nowsze wersje NetBeans IDE rozpieszczały nas ostatnio, więc apetyt i wymagania znacznie wzrosły.

Zacznijmy rekonesans po funkcjonalności NetBeans IDE 6.1 w zakresie wsparcia Spring Framework.

Rozpoczynam go od utworzenia zwykłej aplikacji desktopowej korzystającej ze Springa. Tworzę projekt Java Application, Ctrl+Shift+N i Java > Java Application. Projekt sam w sobie nie wspiera specjalnie Springa (trudno mi opisać, czego oczekuję, ale czegoś mi jednak brakuje), ale istnieje asystent tworzenia springowego pliku konfiguracyjnego xml - Other > Spring XML Configuration File.


W kolejnym kroku mamy możliwość wyboru przestrzeni nazw, które mają być uaktywnione w pliku konfiguracyjnym.


Niekwestionowane uproszczenie (pamiętam, kiedy na spotkaniu Warszawa JUG rozwiązywaliśmy problem niewidoczności elementów springowego pliku konfiguracyjnego i dopiero za sprawą Waldiego podpartego książką o Springu znaleźliśmy rozwiązanie - właśnie przez dodanie brakującej przestrzeni nazw). Każdy, kto pracuje z plikiem XML dla Spring wie, że znajomość tych przestrzeni jest niełatwa, więc to jest zdecydowany plus.

Po utworzeniu pliku konfiguracji springowej mamy możliwość skorzystania z uzupełniania klas, ich atrybutów


, czy ziaren springowych.


Natrafiłem jednakże na błąd związany z niewidocznością interfejsu dla elementu wskazującego typ listy (brakuje typu pl.jaceklaskowski.osgi.Polecenie).


Trzymając klawisz Ctrl, będąc nad nazwą klasy, przechodzimy do odpowiadającej klasy, atrybutu


bądź ziarna springowego.


Jako wadę mógłbym wskazać konieczność znajomości pliku springowego, aby w ogóle skonstruować go poprawnie. Samo wsparcie dla edycji pliku XML (mamy wskazany XSD, więc to nie powinno być traktowane w kategorii wyczynu) z pewnym wsparciem dla zrozumienia bytów springowych to zdecydowanie za mało. Tutaj odnotowuję minus.

Pojawiła się ikona pliku springowego - ów listek symbolizujący Spring Framework, który uwypukla znaczenie pliku xml. Plusik.

Podczas tworzenia pliku XML dla Springa natrafiłem na błąd związany z błędnym komunikatem błędu - Incorrect error message when spring xml config file exists. Idealna pora i czas, aby zgłaszać błędy i oczekiwać ich naprawienia w finalnej wersji. Zachęcam do zgłaszania błędów przy każdorazowym ich napotkaniu (z czego skrzętnie skorzystałem).

Ciekawą zmianą w kontekście wsparcia dla Spring Framework jest możliwość skorzystania z biblioteki Spring Framework 2.5 dostępnej bezpośrednio w NetBeans:


Kolejne otworzenie właściwości projektu ukazuje nowe menu konfiguracyjne - Spring Framework wraz z plikiem src/beans.xml, który przed chwilą utworzyłem.


Istnieje opcja wykrycia pozostałych plików springowych za pomocą Detect Files..., które mogłyby wcześniej istnieć w aplikacji, a która właśnie została zaimportowana.

Lektura Spring Framework Support w Milestones New and Noteworthy dała mi odpowiedź, na znaczenie Configuration File Groups w menu Spring Framework.


Funkcjonalność springowych grup konfiguracyjnych obejmuje grupowanie plików konfiguracyjnych i korzystanie z uzupełniania elementów plików konfiguracyjnych i przechodzenia między ich elementami a klasami/ziarnami w ramach grupy. Na razie zaliczam to grupy zaawansowanej wsparcia Spring Framework przez NetBeans, więc zostawiam to dla innych, bardziej dociekliwych. Więcej w dokumentacji pod klawiszem F1 będąc w tym panelu. Dodałem jedynie nowoutworzony plik beans.xml do własnej grupy Ewaluacja.


Dodatkowo, podczas tworzenia kolejnego, springowego pliku konfiguracyjnego istnieje możliwość dodania go do istniejącej grupy konfiguracyjnej.


Znalazłem również wzmiankę o Spring MVC i jego wsparciu w NetBeans 6.1, więc jako, że nigdy nie próbowałem się z nim pora na krótką lekcję wprowadzającą.

Tworzę aplikację webową - Ctrl+Shift+N, Web > Web Application i w panelu Frameworks mam możliwość wyboru szkieletu webowego wspieranego przez NetBeans 6.1.


Więcej informacji o wsparciu Springa w NetBeans w Spring Framework support plan for NetBeans 6.1. Tam również znalazłem artykuł Introduction to the Spring Framework in NetBeans IDE, ale niewiele dla mnie, gdyż wszystko opisane w artykule wydaje się być już dostępne w NetBeans IDE 6.1 domyślnie.

Jeszcze podgląd konfiguracji aplikacji webowej z Spring MVC.


Aplikacja działa od pierwszego uruchomienia, więc to zaliczam również na plus.


Na koniec ciekawostka - podczas wykonania polecenia Clean and Build albo po prostu Build projektu typu Java Application NetBeans poinformuje:
 To run this application from the command line without Ant, try:
java -jar "C:\Documents and Settings\jlaskowski\My Documents\NetBeansProjects\SpringDemo\dist\SpringDemo.jar"
I faktycznie działa! Wszystkie konieczne biblioteki znajdują się w katalogu lib, który wskazywany jest w MANIFEST.MF.
 Class-Path: lib/commons-logging-1.1.jar lib/spring-2.5.jar
Milutkie. Kolejny plus.

Ogólnie zadowolony, ale pewne braki powodują, że czuję niedosyt. Wierzę, że kolejne odsłony wsparcia Spring Framework w NetBeans IDE 6.1 będą doskonalsze i ich rozwój nabierze większego tempa.

Dla zainteresowanych wychwalaniem (lub wręcz przeciwnie) funkcjonalności NetBeans 6.1 zapraszam do udziału w konkursie NetBeans IDE 6.1 Beta Blogging Contest.

Pytanie dla wytrwałych: Do czego służą springowe grupy projektowe w NetBeans IDE 6.1? Nagród niet.