Česky   |  Deutsch   |  English   |  Español   |  Français   |  Indonesia   |  日本語   |  한글   |  Polski   |  Português (BR)   |  Türkçe   |  中文   |  正體中文   |  Your Language  
PlanetNetbeans
Planeta NetBeans jest agregatorem treści związanych z NetBeans IDE pochodzących z całej blogosfery.
Kanały
[RSS 1.0 Feed] [RSS 2.0 Feed]
[FOAF Subscriptions] [OPML Subscriptions]
Blogujesz na tematy związane z NetBeans? Dodaj swój blog do PlanetNetBeans!
Subskrypcja kanałów

Powered by:    Planet

Last updated:
May 09, 2012 08:42 AM
All times are UTC

Sponsored by
sponsored by Oracle

visit NetBeans website
Jacek Laskowski jawnie - October 18, 2011 06:49 AM
Podsumowanie warsztatów warsjawa 2011

O Maksymie na wstępie

Dzisiaj, o 17:24, Maksym ukończył 2 tygodnie życia i pracuje pod systemem, w którym nie wykryto jakichkolwiek "bugów". Zdrowiuteńki bobas. Na razie "uptime" optymalny i oscyluje wokół 3h - niestety, głównie w dzień. Czasami wymaga pomocy przy wejściu w stan "sleep", ale ogólne zachowanie poprawne. Wszystkie "testy zielone", a z każdym dniem użytkownicy coraz bardziej rozumieją zachowanie systemu. "Dział IT" w szpitalu na Madalińskiego wydał ocenę pozytywną i kontynuujemy zasilanie.


Wczoraj, w niedzielę, Maksym doświadczył przyjemności spaceru i po wczorajszych 20 minutach dzisiaj zaaplikowaliśmy "poprawkę" w postaci czterdziestominutowego spaceru. Wciąż bezawaryjne działanie Maksyma pozwala nam sądzić, że poprawka została wdrożona poprawnie. Jednym słowem - współpraca jest bardzo owocna. Bo to jest "Maksym i już!", czasami zwany Maksymiusz.


warsjawa 2011 - sobotnie spotkanie społeczności javowej


Kolejne wydarzenie polskiej społeczności javowej za nami. IV warszawskie warsztaty javowe warsjawa 2011 przyciągnęły 220 uczestników i udowodniły, że wciąż jest zapotrzebowanie na konferencje społecznościowe wokół Javy. Jeśli ktokolwiek wieszczy koniec jej popularności, to w Polsce nie ma to zastosowania. Tym razem zapóźnienie naszego kraju ma swoje dobre strony.

Z 4 osobami ze Szczecina i 1 z Łodzi można śmiało powiedzieć, że chociaż w części warsjawa zaoferowała ciekawą propozycję dla przyjezdnych i tym samym, nielicznie, ale zawsze, byliśmy ogólnopolscy. Chciałbym wierzyć, że było więcej osób spoza Warszawy niż wspomniane 5 osób. Żałuję, że nie mogę podzielić się bardziej precyzyjnymi danymi.

Aktualizacja z 18.10.2011: "Jak się okazało na dworcu ze Szczecina było co najmniej 6 osób." (źródło: Darek "ten od EGita" Łuksza)

Na razie pojawiły się jedynie pozytywne komentarze i, nieskromnie powiem, nie spodziewam się innych.

Poniżej wszystkie opinie, jakie udało mi się zebrać do tej pory.

Anna Małgorzata Mazińska napisała na forum WJUGa:

"Witajcie, chciałam podziękować organizatorom Warsjawy za ogarnięcie takiego fajnego eventu ;) tym razem przybyłam jako zwykły uczestnik, aby się trochę doedukować, ale udało się w przerwach między warsztatami pstryknąć trochę fotek : https://picasaweb.google.com/103530179614305430424/Warsjawa2011 (w galerii są fotki moje i Krzyśka)"

Piotr Zajączkowski na forum WJUGa:

"Dołączam się do podziękowań za zorganizowanie Warsjawy :) Było naprawdę bardzo miło i wyjątkowo merytorycznie (przynajmniej z mojego punktu widzenia ;) ). Szkoda tylko, że tak krótko - w takiej atmosferze to mogłoby trwać i kilka dni ;) hehe ;)
W każdym razie dziękuję jeszcze raz organizatorom, pomysłodawcom, prelegentom, sponsorom i uczestnikom - było super :)"


Michał Lewandowski na forum WJUGa:

"Też dołączam się do podziękowań dla tych którzy mieli swój udział w organizowaniu.
Atmosfera spotkania napawała chęcią do działania !
Żałuję tylko, że musiałem wyjść o 15:30, a dowiedziałem się potem, że pierwszy raz w życiu byłem wylosowany i wygrał bym coś pierwszy raz w życiu."


Krzysztof Nielepkowicz na forum WJUGa:

"Swietna konferencja i warsztaty! Mimo braku sieci na warsztatach GWT prowadzący (Paweł Cesar Sanjuan Szklarz) świetnie spobie poradził i repozytorium rozprowadził na gwizdkach :P Niby warsztat dla początkujących a sporo fajnych informacji o których nie piszą w książkach np kompilowanie wybranej permutacji czy pokazanie na czym naprawdę polega MVP :)"

I już w prywatnej korespondencji (dane osobowe znane redakcji):

"Dzięki za organizację eventów podczas których ludzie skupieni wokół wspólnych zainteresowań mogą się spotkać i podyskutować."

W skład komitetu organizacyjnego weszli:
  • Łukasz Lenart
  • Bartek Zdanowski
  • Marcin Zajączkowski
  • Tomasz Dziurko
  • Jacek Laskowski
  • Jakub Koperwas
  • Krzysztof Kozioł
Bardzo dziękuję za udział i zapał, aby poświęcić swój czas w kolejnej społecznościówce grupy Warszawa JUG!

Pojawiły się również zdjęcia z konferencji:
Chętnie uzupełnię galerię o kolejne zdjęcia. Proszę o przesyłanie namiarów na nie na jacek@japila.pl.

Organizator i prelegent w jednym - "Java EE 6 Web Profile z Apache TomEE"


Mój udział w konferencji polegał na jej organizacji, ale nie mogłem się oprzeć pokusie, aby nie wrócić na deski i zaprezentować niedawno ochrzczonego jako certyfikowany Apache TomEE w temacie "Java EE 6 Web Profile z Apache TomEE".

Uczestnikom mojego wystąpienia bardzo dziękuję, a wszystkim polecam zapoznanie się z moją prezentacją. Uwagi i sugestie ku usprawnieniu moich, kolejnych wystąpień w temacie Apache TomEE mile widziane.


Ze spotkania wyciągnąłem potrzebę nieutralnego przekazywania materiału na wybrany temat i mimo zaangażowania w rozwój Apache TomEE (na razie bardzo pasywnie) nie tracić z oczu celu nadrzędnego - prezentacja rozwiązania z uwypukleniem celów jego powstania. Bez tego leży każde wystąpienie, bo wiedza, jak zainstalować, czy uruchomić i stworzyć aplikację, to zdecydowanie za mało. Należy oczekiwać więcej i taki cel stawiam sobie na kolejne wystąpienia.

I tutaj kolejne postanowienie - wzbogacenie wiedzy branżowej. Nie wiem jeszcze, czy będzie to bankowość, telekomunikacja, czy ubezpieczenia, ale chociażby z jej podstawowym rozpoznaniem znacząco usprawni to nazewnictwo klas i słownictwo, którego będę używał do przedstawienia technologii. Tego typu prezentacje najbardziej lubię i bardzo mi ich brakuje w Polsce. Mam wrażenie, że można tutaj wiele zdziałać i znacząco podreperować poziom moich prezentacji. Nie mogę jednak znaleźć książek czy innych publikacji, w których mógłbym zapoznać się z jakimi problemami biznesowymi spotyka się dana branża, w których IT i jej "zabawki" mogłyby pomóc. Najbardziej interesują mnie procesy biznesowe, które są motorem napędowym systemów w branży. Coś ala sprzedaż, aktywacja, pozyskiwanie klienta i jego obsługa. Możesz coś zaproponować w temacie? Chciałbym móc nazywać moje aplikacje "Bank" zamiast "MyWebApp", albo "CustomerManagement" zamiast "HelloWorld". Zastanawiam się, czy taka publikacja w ogóle istenieje, a nie jest jedynie domeną osób, które siedzą w temacie?! W końcu i nieinformatykom udaje się w IT, więc dlaczego informatykowi nie miałoby się udać poza IT?! Pomożesz?

Na moje pytanie odnośnie mojego warsztatu prezentacyjnego i literackiego, tutaj na blogu i wiki, padły propozycje, aby na blogu prezentować tematy krótko i ze zrzutami ekranu, okraszone opisem problemów, na które napotykałem z ich rozwiązaniami (jeśli istnieją), a na Wiki publikować dłuższe wpisy, które aspirują do miana artykułów. To zgadza się z moim postrzeganiem tych narzędzi, więc wystarczy utrzymać postanowienia i będzie cacy. Dwóch zadowolonych czytelników, to w końcu lepiej niż żaden :)

Jacek Laskowski jawnie - October 15, 2011 05:09 AM
warsjawa i TomEE już jutro - Java EE 6 Web Profile z Apache TomEE o 16:15

Maksym to fajny gość. W poniedziałek stuknął mu tydzień i przeszedł pierwsze badanie kontrolne w szpitalu na Madalińskiego.


Jego poczucie humoru przerasta moje wyobrażenia i na propozycję uśmiechnięcia się do kamery zdecydował skwitować to...figą z makiem (!) No cóż, powiedzmy, że miałem zły dzień, a on dobrą zabawę (a może odwrotnie?! :))

W tę sobotę, 15 października jest warsjawa 2011, a na niej ja jako prelegent z tematem Java EE 6 Web Profile z Apache TomEE. Czym bliżej wystąpienia, tym więcej mam wątpliwości, co może zainteresować publikę. Przy takim natłoku certyfikowanych serwerów aplikacyjnych nie wystarczy jedynie pokazać, że działa, ale musi być w Apache TomEE to coś, co zachęci do jego dalszego poznania.

Możliwość użycia zestawu Java EE 6 Web Profile jest kusząca, ale tylko, jeśli idzie w parze z daleko posuniętą prostotą użycia. Podczas wystąpienia zaprezentuję działanie aplikacji demonstracyjnych dostarczanych w ramach NetBeans IDE 7.1 na TomEE.


Sprawdzimy również, jak to jest skonfigurować TomEE z bazą danych MySQL.

Ideą jest, aby zachęcić do dalszych, pewnie już samodzielnych prób z tym zestawem w zaciszu domowego kominka, a podczas wystąpienia będę miał godzinę, aby ten ogień rozpalić. Powinno być ciekawie.

Jacek Laskowski jawnie - October 10, 2011 09:01 PM
Apache TomEE w NetBeans IDE 7.1 - poprawka odnośnie nazwy serwera

Dzisiaj zarejestrowałem Maksyma w Urzędzie Stanu Cywilnego w Warszawie i już oficjalnie nazywa się Maksym Patryk Laskowski. Drugie imię ma po swoim starszym bracie, którego z kolei drugie imię to Jacek (pozostawiam jako zagadkę po kim). Za miesiąc "ukonstytuowanie" obywatela Maksyma, kiedy to zostanie mu przypisany numer PESEL. System już wie o jego istnieniu :)

Wczoraj pisałem, że jedyną możliwą nazwą dla serwera Apache Tomcat w NetBeans IDE 7.1 Beta może być "Apache Tomcat". Szczęśliwie nie musiałem długo czekać, aby przekonać się, że po prostu przeoczyłem pierwszy ekran w asystencie definiowania serwera.

Wybieramy zakładkę Services, a następnie menu Add Server... dla węzła Servers. Na pierwszym ekranie, u dołu, istnieje możliwość nadania własnej nazwy serwera.


Wystarczy nazwać ją "Apache TomEE" i wskazać na katalog, w którym rozpakowano TomEE. Proces konfiguracji nie powinien być obcy osobom pracującym wcześniej z Tomcatem, bo TomEE to z zewnątrz stary, poczciwy Tomcat (a jedynie bebechy są lekko "rozdęte" o funkcjonalność wymaganą przez Java EE 6 Web Profile, np. EJB 3.1 Lite czy JPA2).


Od tej pory mam swoje, wymarzone wsparcie narzędziowe dla TomEE (bez jakiejkolwiek zmiany w NetBeans IDE). To duża zaleta móc skorzystać z dobrodziejstw nowego narzędzia posługując się wiedzą z jego protoplasty.

Jakby na żądanie, pojawił się 13-minutowy filmik (chyba po portugalsku, ale język nie powinien przeszkadzać w zrozumieniu treści) prezentujący konfigurację i pracę z TomEE w NetBeans IDE - Apache TomEE e NetBeans 7. Dodatkowo polecam nagranie z prezentacji "Apache TomEE: Tomcat with a kick" z JAX London - Apache TomEE: Tomcat with a kick from David Blevins & Jonathan Gallimore @ JAX London part 1 of 2 oraz Apache TomEE: Tomcat with a kick from David Blevins & Jonathan Gallimore @ JAX London part 2 of 2.

Podczas nadchodzącej konferencji warsjawa 2011 w nadchodzącą sobotę, 15.10 w Warszawie będę miał możliwość zaprezentowania Apache TomEE w całej okazałości. Zapraszam!

Jacek Laskowski jawnie - October 09, 2011 05:30 PM
Apache TomEE w NetBeans IDE 7.1 - 2:1 dla błędów

Nie trzeba wielkiego umysłu, żeby wiedzieć, że w życiu kilkudniowego dziecka wszystko, co robi, określane jest jako pierwsze. Pierwszy raz pojawił się grymas na twarzy, który przypominał uśmiech, pierwsza noc w domu (i nadzieja, że będzie ją przesypiał spokojnie z 3 przerwami na jedzenie - nota bene, mimo, że dzieciak mógłby spać całą noc, to i tak po 3h będzie wybudzany na jedzenie!), pierwsza kąpiel w domu, pierwsze coś jeszcze innego i tak lista rośnie. Jak na razie Maksym dostarcza nam całą masę wrażeń. Jest ich tyle, że przy nadchodzącej zimie żadne mrozy nie są nam straszne. Maksym śpi regularnie, je i nie wpływa specjalnie na domowników swoją obecnością, a mimo to wszyscy chodzą jak nakręceni, szczególnie podekscytowani. Cudo dzieciaczek.

W sobotę, a chyba już i w piątek, postanowiłem popróbować się z Apache TomEE i NetBeans IDE 7.1. Oba produkty wciąż w fazie aktywnego rozwoju, więc można spodziewać się kilku, może nawet kilkunastu czknięć. Tych zawirowań jest o tyle mniej w przypadku Apache TomEE, na ile pozwala certyfikacja Java EE 6 Web Profile. Dla zwrócenia uwagi napiszę, że pod względem zgodności z Java EE 6 nie ustępuje miejsca JBoss AS 7.0.1 (!), a to uważam za niemałe osiągnięcie.

NetBeans IDE wspiera Apache Tomcat jako środowisko uruchomieniowe dla Java EE 6, a więc i Apache TomEE - w końcu to wzbogacony Apache Tomcat. Przy odrobinie szczęścia można pozwolić sobie na zestawienie środowiska programistycznego z oboma produktami. I tak faktycznie jest.

Wystarczy postępować zgodnie z wytycznymi asystenta do konfiguracji Apache Tomcat z tą różnicą, że katalogi wskazują na Apache TomEE i wszystko gra! Szkoda tylko, że nie można zmienić nazwy serwera na wybraną przez użytkownika, np. Apache TomEE lub podobnie.

Nie wiem, co mnie podkusiło, ale postanowiłem spróbować się ze zmiennymi środowiskowymi (ang. environment entries) i ich dostępem z servletu. To chyba było z powodu tego zdania na stronie TomEE:

"Any Tomcat provided resources, say from a context.xml, can be looked up or injected."

Tak, na pewno to było to. Stworzenie servletu w NetBeans to chwila. W międzyczasie pytanie o rejestrację servletu w web.xml, na które odpowiedziałem stanowczym nie, tj. zatwierdziłem domyślne ustawienie "Add information to deployment descriptor (web.xml)". Od wersji Servlet 3.0 deskryptor web.xml jest opcjonalny, więc po co mi to?!


I tu się zaczęło.

Najpierw trafiłem na brak wsparcia przez TomEE dla aplikacji webowych bez deskryptora web.xml. Zgłosiłem błąd TOMEE-27 UnknownModuleTypeException thrown when no-web.xml webapp deployed. Nie dawało mi to jednak spokoju i w trakcie sobotniego przesiadywania przed kompem, poprawiłem go. Taa, sam jestem pod niemałym wrażeniem, że zebrałem się w sobie i zrobiłem to.

Z poprawką uruchomienie servletu z adnotacją @WebServlet i bez deskryptora web.xml stało się możliwe. Ciekawe, jak mogło się stać, że nie wyłapał tego zestaw certyfikacyjny Java EE 6 Web Profile TCK?!

Na tym jednak nie koniec, bo głównym celem było dostanie się do zmiennej z context.xml (plik konfiguracyjny Tomcata, a tym samym i TomEE). Tutaj niestety nie mam dobrych wieści, bo wciąż nie ma wsparcia dla niej i pracuję nad TOMEE-28 Support for global environment entries (defined as in server.xml). Tym samym wynik niekorzystny dla poprawek na rzecz 2 błędów. Na dzisiaj 2:1 w starciu błędy kontra poprawki.

Całkiem przy okazji, natrafiłem na możliwość edycji server.xml z poziomu NetBeans - menu kontekstowe Edit server.xml dla serwera.


Jak dla mnie całkiem użyteczna rzecz i przydała się już kilkakrotnie.

Jacek Laskowski jawnie - October 05, 2011 10:28 PM
Java EE 6 Web Profile z Apache TomEE na warsjawie 2011

Nie masz czasami uczucia, jakby wszystko, co czynisz w swoim życiu było już wcześniej ustalone? Mnie czasami nachodzi taka myśl.

Wczoraj pisałem o moich wątpliwościach czytelniczych i jakby na dokładkę dostałem dzisiaj elektroniczne wydanie Pro Android 2 z Apress. Nie ma więc już mowy o siedmiuset stronicowej cegle, którą muszę taszczyć ze sobą, aby móc ją czytać bez względu na miejsce i porę. Temat się rozwiązał, jakby za dotknięciem czarodziejskiej różdżki - wystarczyło napisać do wydawnictwa z prośbą o kopię i nie trzeba było długo czekać na odpowiedź. Ten temat mam rozwiązany.

To jednak nie koniec moich kłopotów z terminarzem na najbliższe dni.

Mogłem się przecież spodziewać, że konferencja JavaOne, która właśnie trwa w San Francisco, może zmienić moje plany na najbliższe 2 tygodnie z łatwością. A może to jednak nasza, lokalna warsjawa, która odbędzie się za 2 tygodnie, 15 października w Warszawie? Sądzę, że obie miały wpływ, ale to warsjawa faktycznie zmusiła mnie do zmian. Zaproponowałem temat "Java EE 6 Web Profile z Apache TomEE" na warsjawę i zostałem przyjęty (wierzę, że to merytoryczne przygotowanie prelegenta, a nie jego urok czy udział w zespole organizatorów konferencji sprawiło, że tak się stało).

Dla tych, którzy jeszcze nie doświadczyli Java EE 6 w okrojonej wersji profilu webowego będzie to doskonała okazja poznać temat, a głównym graczem będzie Apache TomEE, czyli stary, ale wciąż jary i powszechnie wykorzystywany do tworzenia aplikacji korporacyjnych Apache Tomcat wzbogacony o elementy wymagane przez Java EE 6 Web Profile, czyli:

  • Apache OpenEJB - kontener EJB 3.1
  • Apache OpenWebBeans - kontener CDI 1.0
  • Apache MyFaces - kontener JSF 2.0
  • Apache OpenJPA - kontener JPA 2.0
Wszystkie z wymienionych dostarczają składników potrzebnych do zbudowania korporacyjnej wersji Apache Tomcat i przejścia przez rygorystyczne wymogi TCK dla Java EE 6 Web Profile. Właśnie wczoraj Apache Software Foundation (ASF) ogłosiło w The Apache Software Foundation Announces Apache TomEE Certified as Java EE 6 Web Profile Compatible, że:
Apache TomEE has obtained certification as Java EE 6 Web Profile Compatible Implementation.
Po około roku wytężonej pracy zespołowi programistów z projektu Apache OpenEJB udało się przejść przez TCK i stanąć dumnie w szpalerze certyfikowanych środowisk spełniających wymagania stawiane przez specyfikację, obok takich tuzów jak Oracle GlassFish Server 3.x, Caucho Resin 4.0.17 i JBoss Application Server 7.

Podczas warsjawy 2011 zamierzam przedstawić cele i zalety użycia Apache TomEE z NetBeans IDE 7.1. Tym samym nie powinno być już żadnych złudzeń, o czym będę się rozpisywał na tym blogu przez kolejne 2 tygodnie - Java EE 6 Web Profile, Apache TomEE i NetBeans IDE.

Zachęcam do dzielenia się uwagami w komentarzach poniżej. Gdyby nękały Cię pytania związane z tematem, życzyłbym sobie poznać je już teraz, aby podczas konferencji być przygotowanym i odpowiedzieć na kilka. Przez godzinę i kwadrans mojej prezentacji należy oczekiwać kwadransu wprowadzenia, aby później przejść przez kilka przykładów demonstracyjnych. Do zobaczenia w sobotę w Warszawie.

Jacek Laskowski jawnie - March 18, 2011 10:57 AM
Po wykładzie na PWSZ w Tarnowie

O planach związanych z wykładem pisałem w poprzednim wpisie - Wykład akademicki na PWSZ w Tarnowie - 29.11 od 9:30 do 18:00 i jak to w życiu bywa - plany swoje, a życie swoje.

Mając niemałe obawy o zakres merytoryczny wykładu, postanowiłem przelecieć większość z tego, co nazwałbym interesującym wycinkiem mojej wiedzy technicznej, aby choć na moment móc podzielić się czymś nowym z uczestnikami. Sądziłem, że uczestnicy większość tematów mają już za sobą, więc pojawiły się produkty IBM, o których, jeśli słyszano, to niewiele praktycznie i choć one gwarantowały mi możliwość przekazania czegoś niezbadanego. Po ostatnich szkoleniach z IBM WebSphere BPM z programowania i administracji nie miałem złudzeń, że w ostateczności wejdę na niskopoziomowe "rozbieranie" trzewi WPS V7 czy WAS V8. Sądziłem, że coś w końcu będzie wartościowe, aby spędzić kilka chwil i wziąć udział w wykładzie.

Do ostatniej chwili nie byłem pewien, czy dobrze dopasowałem tematykę. Czym bliżej wystąpienia, tym nachodziła mnie większa ochota, aby w niej pomajstrować. Wziąłem kilka książek, aby tam znaleźć coś unikatowego, a jednocześnie wartościowego, zabrałem się za lekturę podręczników, itp. Zacząłem odczuwać tremę przed niewstrzeleniem się w oczekiwania (które mogły być podkręcone moimi wycieczkami w różne strony rozwiązań javowych).

Zaplanowałem całkiem pokaźny bagaż tematyczny (vide poprzedni wpis z harmonogramem) i wszystko miało odbyć się bez nawet najdrobniejszego slajdu, aby ostatecznie okazać się, że z grupy około 50 osób niewiele ponad 3 osoby miały styczność z Javą (!) To było chyba najbardziej dla mnie szokujące. Ja tu zmagałem się z JEE6 i poziomy wyżej, przy SCA i BPEL, a okazało się, że należało zacząć od samego początku - samego poznawania języka Java. Trafiłem do mekki programistów C!

Jako, że przygotowany byłem na wprowadzenie do dostępu do bazy danych, przez JDBC, Hibernate, Spring Framework, Hibernate+Spring Framework, JPA i EJB, w zasadzie byłem gotowy zacząć pierwsze kilka kwadransów na wprowadzenie do Javy - bez wycieczek w programowanie OO. Pozostałem przy prostych konstrukcjach typu wyświetl na ekran, pobierz z ekranu i na tym się skończyło wprowadzenie.

Zabrałem się za dostęp do bazy danych. MySQL sprawowało się znakomicie, a NetBeans IDE (wersja rozwojowa z dnia poprzedniego) całkiem sprawnie uwijała się przy składaniu kolejnych części aplikacji. Tutaj i Java Tutorial się przydał, aby pokazać, w jaki sposób można przejść podobną ścieżkę, którą właśnie przechodziliśmy (gdyby komuś przyszło do głowy odtworzyć nasze wspólne poczyniania samodzielnie). Od czasu do czasu NetBeans IDE czkał zamrażając się na dobre kilkadziesiąt sekund, co złożyłem na braku dostępu do Sieci i jego młodzieńczego wieku (w końcu to wersja rozwojowa). Na moment przełączyłem się do Eclipse IDE, ale i jemy przypomniało się, aby zaktualizować/sprawdzić coś w Sieci i zamarzł. Wróciłem do NetBeans IDE.

Na zakończenie pierwszego bloku wykładów pokazałem coś, co określiłbym - impress me. Skąd wzięło się to cudo? Chcąc dopasować się do oczekiwań uczestników, zapytałem, co jeszcze mógłbym im pokazać i padło "Zaimponuj nam czymś w Javie, co sprawiłoby, że zechcielibyśmy się nią zająć". Od razu zabrałem się za...Clojure.

Pewnie pomyślisz sobie, zwłaszcza jeśli znasz mój poziom znajomości tego języka, że to był najgorszy z możliwych wyborów. Co to, to nie. Zdecydowanie NIE. Ja wręcz uważam, że właśnie tym najbardziej ująłem ich za serce i przy tym właśnie temacie miałem wrażenie zdobyłem ich największą uwagę. Takie odniosłem wrażenie i jeśli jakikolwiek temat miał swoje komentarze, to Clojure był zdecydowanym liderem. Dlaczego? Kwintesencją dobrej prezentacji jest dopasowanie przykładu do tematu. I tak właśnie było z Clojure.

Podczas sesji z Clojure pokazałem, jak interaktywie tworzyć aplikację okienkową, gdzie rozpoczynam od "gołej" aplikacji na bazie JFrame i dodaję kolejne elementy graficzne. Kiedy pierwszy raz wpadłem na ten pomysł, wiedziałem, że to będzie cudo. Na dole miałem terminal z Clojure REPL, na górze właśnie otworzone okienko przyszłej aplikacji okienkowej, a pod nimi Eclipse z odtwarzanym skryptem, w którym widać było wpisywane linie kodu w Clojure. Zamierzam, to nagrać w postaci skrinkastu, więc chwila i sam przekonasz się, o czym się tutaj pisze.

Clojure nie jest tutaj jakimś specjalnym czymś, co sprawiłoby, że jest to możliwe. Po prostu, jako język skryptowy - podobnie jak Groovy, JRuby, Rhino, Scala, Jython - daje możliwość nauki API przez wprowadzanie kolejnych wywołań w czymś ala Clojure REPL i natychmiastowego otrzymywania rezultatów z ich uruchomienia. Możnaby to przyrównać do środowiska ciągłej nauki API. Bajka!

Po przerwie, przeszliśmy przez Hibernate, Spring Framework i tworzenie aplikacji z servletami (obsługa formularza) z niewielkim EJB uruchamianym w ramach aplikacji webowej (nowość JEE6). W zasadzie 7 osobom udało się wytrwać do 18:00, kiedy to punktualnie zakończyłem wykład.

Bardzo pomocny okazał się stoper firmy Apimac, który odmierzał równe 40-tominutówki i późniejsze 10-ciominutowe przerwy. Super rozwiązanie, aby zagwarantować pewność utrzymania czasu przez prowadzącego. Polecam!

Czego mi brakowało podczas tego wykładu, to większego udziału publiczności. Znalazło się kilku bardziej aktywnych, ale ogólnie panowała cisza i trudno było zorientować się, czy temat ciekawił, czy warto byłoby poruszyć inne aspekty i w ogóle sprawić, aby spędzony czas był wartościowy merytorycznie. Nieskromnie powiem, że bardzo ucieszyła mnie moja lekkość w zmianie tematu, tempa i dopasowanie do poziomu, ale wolałbym bardziej skrupulatne zajęcie się pojedynczym tematem, np. JEE6 niż przejściem od Java, Clojure, Hibernate, Spring, servlety i EJB. Trochę przypominało groch z kapustą, aczkolwiek zagwarantowało, że wykład spędziłem nie nudząc się ani na chwilę. Liczę, że uczestnicy również.

Sam Tarnów bardzo spokojny. Akurat dzisiaj spadło sporo śniegu, więc wszystko zasypane, ale i tak udało mi się dostrzec tlące się piękno tego miejsca. Po 18:00 w zasadzie zero otwartych sklepów i niepokojąca cisza na ulicy. Może poza Rynkiem jest inaczej?! Ach, zastanawiam się, dlaczego zegar na Ratuszu wybija połówki, kwadrans przed pełną i pełną godzinę?

p.s. Wykład prowadzony był w ramach programu Unii Europejskiej wspierającej wymianę doświadczeń między praktykami i firmy a uczelniami, z korzyścią dla nowej kadry informatycznej - studentów. Pewnie i na Twojej uczelni jest to możliwe. Wystarczy zapytać. Resztą się zajmę. Pisz na priv z prośbą o szczegóły. Na prawdę warto.

Jacek Laskowski jawnie - January 03, 2011 08:51 PM
NetBeans 7 i Add Embeddable EJB Container, Create JUnit Tests oraz Code Generation in pom.xml

W Java EE 5 udostępniono możliwość uruchamiania Java Persistence (JPA) 1.0 poza środowiskiem serwera aplikacyjnego - można przeczytać o tym w moim artykule Java Persistence API w samodzielnej aplikacji.

W Java EE 6, poza JPA 2.0, można jeszcze uruchomić kontener Enterprise JavaBeans (EJB) 3.1 oraz kontener Contexts and Dependency Injection (CDI) 1.0. O tym pierwszym - EJB 3.1 - pisałem w Embeddable EJB 3.1 z GlassFish 3.1 i NetBeans IDE 7.0, a o drugim - CDI - w Contexts and Dependency Injection (CDI) praktycznie - zestawienie środowiska z JBoss Weld, Arquillian i Apache Maven 2.

Zacząłem drążyć temat EJB 3.1 z NetBeans 7 i całkiem przypadkiem doszukałem się dwóch użytecznych funkcji - Add Embeddable EJB Container oraz Create JUnit Tests. Sprawdźmy je w działaniu zamiast rozwodzić się nad ich użytecznością (albo ich brakiem).

Cmd+Shift+N - Maven > EJB Module, podaj Project Name, np. aaa i Finish. Mamy projekt EJB zarządzany przez Apache Maven.

Cmd+N - Enterprise JavaBeans > Session Bean, wciśnij Next >, wybierz pakiet z listy w Package i Finish. I mamy komponent EJB.

Otworzy się nowa klasa ziarna EJB 3.1. W jej ciele, Ctrl+i i wybierz Add Business Method... i OK. Pojawi się nowa metoda public void businessMethod(). W jej ciele, wpisz sout i wciśnij TAB. Wpisz Witaj! W ten sposób masz gotowe do uruchomienia ziarno EJB z metodą biznesową, której zadaniem jest wyświetlenie Witaj!

Wybierz nowoutworzoną klasę NewSessionBean i z menu pod prawym klawiszem myszki wybierz Tools > Create JUnit Tests.

Pojawi się panel konfiguracyjny klasy testowej.

Zatwierdź przyciskiem ENTER.

Zaraz po tym powinien otworzyć się edytor z właśnie stworzoną klasą testującą z metodą testBusinessMethod(). Usuń linię fail("The test case is a prototype.");, np. przez Cmd+x. Test gotowy.

Uruchomienie testu - Cmd+F6.
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running pl.jaceklaskowski.jee6.abc.NewSessionBeanTest
businessMethod
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.396 sec <<< FAILURE!

Results :

Tests in error:
testBusinessMethod(pl.jaceklaskowski.jee6.abc.NewSessionBeanTest)

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0

------------------------------------------------------------------------
BUILD FAILURE
------------------------------------------------------------------------
Pojawił się błąd? Jak najbardziej oczekiwany (zajrzyj do What's the cause of this exception: java.lang.ClassFormatError: Absent Code? po więcej wyjaśnień).

Nie wiem, co informuje NetBeans 7 o konieczności pojawienia się pomocy, albo jak długo należy czekać na jej pojawienie się, ale dłuższa chwila, dwie i na projekcie pojawi się ikona z żółtym wykrzyknikiem.

Kiedy najedzie się na katalog projektu pojawi się chmurka z wyjaśnieniem powodu, dla którego pojawił się wykrzyknik - Missing Embeddable EJB Container.

Wtedy, pod prawy przyciskiem myszki znajdziemy menu Show and Resolve Problems...

Pojawi się okienko dialogowe, w którym pojawi się Missing Embeddable EJB Container z przyciskiem Add Embeddable EJB Container.
Kiedy wciśniesz przycisk, do projektu dodana zostanie zależność i repozytorium, gdzie się znajduje. Spróbuj.

org.glassfish.extras
glassfish-embedded-all
3.0
test



http://download.java.net/maven/glassfish/
http://download.java.net/maven/glassfish/
default

Warto dodać, że zapoznanie się z pom.xml dla tego projektu, to wyzwanie same w sobie. Tyle kombinacji, aby uruchomić wbudowany kontener EJB 3.1 z GlassFish 3.0. Warto dla kogoś, kto chciałby poznać Mavena od podszewki (co w tym przypadku lepiej wykonałby Maven podpierając się Apache Ant przez wtyczkę maven-antrun-plugin).

A tak całkiem przy okazji mojej nauki uruchamiania wbudowanego kontenera EJB 3.1, wyczytałem w STS 70 Maven :: Test Specification: Maven Support Test Specification, że edytor pom.xml ma specjalizowany system podpowiedzi Code Generation in pom.xml. W pom.xml wciskamy kombinację klawiszy Alt+Insert i możemy wybrać jedną z kilku opcji utworzenia sekcji XMLowej.

Dla początkujących, jak znalazł.

Jacek Laskowski jawnie - December 30, 2010 11:25 AM
Embeddable EJB 3.1 z GlassFish 3.1 i NetBeans IDE 7.0

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 :-)

Jacek Laskowski jawnie - December 20, 2010 08:44 PM
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.

Jacek Laskowski jawnie - December 01, 2010 09:48 PM
Java EE 6 webapp development with CDI, GlassFish and NetBeans 7

Próbowałem się z NetBeans IDE 7.0 (wersja rozwojowa z dzisiaj) i kiedy sprawdzałem możliwości CDI z przekazywaniem (aka wstrzykiwaniem) zależności do servletu przyszło mi do głowy, aby nagrać moje doświadczenia. Nie są one wyrafinowane, ale chodziło mi raczej o popróbowanie się ze skrinkastami w kwadrans, aby nabrać większej umiejętności w tego typu przekazie niż na samej oprawie czy treści. Chciałem również sprawdzić, czy uda mi się opublikować nagranie na YouTube w formacie 1080p.

Zero podkładu głosowego, zero muzyni, niewiele treści merytorycznej, ale nagranie w Full HD jest. Tym samym 3-minutówka znalazła się na YouTube do oceny publiczności.

Teraz kolej na Ciebie. Zadanie na dziś to obejrzenie filmiku i ocena jego przydatności, a właściwie wskazanie niedoskonałości i tym samym zagwarantowanie sobie bardziej przyzwoitej treści w kolejnych odsłonach.

Zapraszam na swój kanał na YouTube do obejrzenia Java EE 6 webapp development with CDI, GlassFish and NetBeans 7.

p.s. Uruchomiłem ankietę "Temat przewodni na grudzień", której celem jest określenie tematyki, którą chciał(a)byś, abym rozpracowywał w ostatnim miesiącu tego roku - grudniu 2010. Zainteresowanych wyrażeniem swojego zdania zapraszam na blog, gdzie po prawej u góry znajduje się ankieta. Sugestie w postaci odpowiedzi "Inne?!" proszę o rozwinięcie na priv, albo w komentarzu do tego wpisu.

Jacek Laskowski jawnie - November 27, 2010 01:00 PM
Wykład akademicki na PWSZ w Tarnowie - 29.11 od 9:30 do 18:00

W nadchodzący poniedziałek, 29.11 będę na Wydziale Informatyki Państwowej Wyższej Szkoły Zawodowej (PWSZ) w Tarnowie (ul. Eljasza Goldhammera) u Tomasza Potempy i jego studentów, z którym zorganizowaliśmy mój wykład dotyczący tematu Java i okolice. Głównymi odbiorcami mają być studenci 4 roku, którzy kończą semestr z końcem grudnia, aby w styczniu skupić się na pisaniu pracy inżynierskiej.

Jak to ze mną bywa przy tego typu otwartych tematach, pomysłów mam wiele i byłbym rad, o kilka wskazówek pod kątem możliwości czasowych i znaczenia rynkowego poszczególnych tematów. Celem nie jest przekazanie pełnego obrazu danego rozwiązania, ale raczej naszkicowanie możliwości, aby wybrać do dalszego rozpoznania to, co może być interesujące.

Mam do dyspozycji 2 bloki 5-godzinne (w sensie lekcyjnym nie zegarowym, czyli 45 minut). Można założyć, że w każdym bloku będzie to samo, ale to zależy od ogólnego zainteresowania uczestników oraz mojego przekonania o sensowności dalszego brnięcia w temat. Tym samym nie ma gwarancji, że drugi blok będzie odpowiadał merytorycznie pierwszemu.

Zaczynam o godzinie 9:30, aby zakończyć o 18:00 z 1-godzinną przerwą obiadową w okolicach 13:15. Okazuje się, że będzie okazja spotkać się z Tomkiem Łabuzem, którego można było poznać podczas konferencji Javarsovia 2010, podczas której prezentował temat "AOP, ThreadLocal i JPA".

Planuję przeprowadzić autorski cykl tematyczny, którego mottem byłoby "Od prostoty do większej prostoty, tj. w każdym kroku ukrywamy złożoność problemu". Nie planuję prezentować slajdów, a jedynie siedzieć przed komputerem, prezentując budowanie aplikacji i machając rekoma ze wstawkami krasomówczymi.

Konspekt

Środowiska programistyczne i uruchomieniowe, darmowe i komercyjne:

  • NetBeans IDE i Eclipse IDE
  • IBM Rational Application Developer 8 i IBM WebSphere Integration Developer 7
  • GlassFish i IBM WebSphere Application Server 8 
Klient bazodanowy - tradycyjne podłączenie do bazy danych z użyciem JDBC
  • Apache Derby (wbudowane)
  • MySQL
Hibernate - warstwa pośrednia między baza danych a aplikacja
  • ORM - zapytania bliższe programiście nie adminowi bazy danych
Hibernate + Spring Framework
  • zniesienie konieczności zarządzania bytami Hibernate
  • środowisko IoC/DI
Apache Maven - zarządzanie zależnościami projektowymi
  • zniesienie konieczności dbania o zależności poza ich deklarację
  • tworzenie projektu od zera
    • z linii poleceń
    • z IDE (NetBeans IDE)
Leiningen - Maven w Clojure
  • bez XML z językiem Clojure (wrócimy do niego niebawem)
GlassFish (w NetBeans IDE) i WAS 8 - serwer aplikacyjny JEE6 (z RAD8):
  • dostęp do bazy danych (zarządzanie transakcjami)
    • JPA
    • EJB31
  • servlet - obsługa HTTP
  • JSF - budowanie widoku
    • facelets
  • CDI
EJB 3.1
  • Apache OpenEJB
  • Serwer aplikacyjny - GlassFish i WAS8
OSGi - modularność
  • podział projektu na moduły w Apache Maven był podziałem funkcjonalnym (jak OSGi)
  • samodzielna aplikacja
Clojure - język funkcyjny
  • dynamiczne tworzenie aplikacji okienkowej
Service Component Architecture (SCA) i procesy BPEL (WID/WPS)
  • odseparowanie kontraktu (interfejsu) od implementacji
  • odseparowanie szczegółów komunikacyjnych od implementacji
Wyjeżdżam z Tarnowa dopiero we wtorek, więc jeśli ktoś reflektuje na spotkanie, proszę o kontakt.

Jacek Laskowski jawnie - July 14, 2010 12:10 PM
Tworzenie samodzielnej aplikacji ze Spring Framework i Hibernate w NetBeans IDE 6.9

Właśnie ukończyłem prace nad kolejnym, trzecim i ostatnim artykułem Tworzenie samodzielnej aplikacji ze Spring Framework i Hibernate w NetBeans IDE 6.9, który wprowadza czytelnika w arkana integracji Spring Framework z Hibernate (albo odwrotnie), aby tym samym pozwolić mi na przeprowadzenie warsztatów w bardziej składny sposób - z użyciem materiałów, które są dostępne publicznie, dla każdego. Są to bardzo wprowadzające artykuły przygotowane specjalnie dla początkujących w temacie. Bardziej zaawansowani użytkownicy tandemu Spring + Hibernate pewnie nie znajdą w nich wiele pożytecznego. Uwagi i sugestie mile widziane, a zainteresowanych warsztatami uprasza się o kontakt na priv.

Sama idea warsztatów wypływała już kilkakrotnie i zawsze problemem było właśnie przygotowanie materiałów i działających przykładów. Tradycyjnie jak co roku, Warszawa JUG organizuje konferencję warsztatową Warsjava w okolicach października/listopada i w tym roku zamarzyło mi się, aby być przygotowanym, a może nawet poprowadzić warsztaty płatne?! Jest kilku zainteresowanych pomysłem i teraz przyszło mi realizować jej część merytoryczną. Zainteresowany? Zainteresowana?

W serii warsztatowej o Spring i Hibernate, przez ostatnie tygodnie stworzyłem zapowiadane trzy artykuły:

  1. Tworzenie samodzielnej aplikacji ze Spring Framework w NetBeans IDE 6.9
  2. Tworzenie samodzielnej aplikacji z Hibernate w NetBeans IDE 6.9
  3. Tworzenie samodzielnej aplikacji ze Spring Framework i Hibernate w NetBeans IDE 6.9
W ten sposób zamknąłem pewien rozdział w mojej działalności edukacyjnej związanej ze wspomnianymi produktami - Spring i Hibernate, które wykorzystałem do stworzenia samodzielnych aplikacji w środowisku NetBeans IDE 6.9. Trochę mnie to integrowanie znużyło i coraz bardziej tęskno mi do pełniejszego środowiska serwera aplikacyjnego JEE6.

Muszę przyznać, że NetBeans 6.9 dał mi się tak we znaki (przede wszystkim ciągłe błędy z odświeżaniem zawartości w projekcie), że nie tylko, że musiałem zaktualizować go do najnowszej, rozwojowej wersji z wczorajszego dnia (co niestety zniszczyło mi wszystkie dodatki jakie przychodzą z wersjami produkcyjnymi w temacie integracji NB z systemem operacyjnym, czyli ikonę startową), ale coraz częściej pojawia mi się myśl, aby go całkowicie zakopać i już więcej nie oglądać. Stał się tak toporny w swojej obsłudze projektów, że zwykłe zamykanie/otwieranie projektów prowadziło często do tak kuriozalnych sytuacji, jak oznaczenie niektórych jako nie-NetBeans-owych! A były w nim tworzone! Gdyby nie fakt, że NetBeans i Java EE "w jednym stali domu", to już dawno zapomniałbym o istnieniu NetBeans. Rozważam przejście na Eclipse, albo IDEA. Skłaniam się ku IDEA, ale nie wszyscy ją mają i artykuły byłyby mocno zawężone pod względem grupy odbiorczej. Sugestie?

Tym samym wracam do mojej wcześniejszej aktywności wokół specyfikacji JSR 299: Contexts and Dependency Injection for the Java EE platform. Celem jest stworzenie podobnego zestawu artykułów, aby możliwe było wprowadzenia nowicjusza w tajniki CDI. Pomysły, sugestie, uwagi mile widziane. Jeśli chcesz przeczytać coś interesującego, daj mi poznać swoje potrzeby, a *może* uda mi się je spełnić?! Ku uciesze obu stron ;-)

Jacek Laskowski jawnie - July 08, 2010 08:14 AM
Tworzenie samodzielnej aplikacji z Hibernate w NetBeans IDE 6.9

Wspominałem już w poprzednim wpisie Tworzenie samodzielnej aplikacji ze Spring Framework w NetBeans IDE 6.9 o moich ostatnich doświadczeniach warsztatowych, podczas realizacji zadania "wzmocnienia technicznego" grupy osób w temacie Spring Framework i Hibernate. Zabrałem się do przygotowania materiałów, ale co mnie najbardziej męczyło, to faktyczny poziom zaawansowania uczestników. Nie trwało długo, abym zorientował się, że potrzeba mi dobrych acz krótkich artykułów wprowadzających w tematykę i, jak to zwykle bywa, nic nie mogłem znaleźć, co odpowiadałoby moim skromnym (?) oczekiwaniom.

Zabrałem się za samodzielne przygotowanie potrzebnych artykułów i po wprowadzającym do Springa nadszedł obiecywany artykuł wprowadzający w tematykę Hibernate - Tworzenie samodzielnej aplikacji z Hibernate w NetBeans IDE 6.9. Jest to artykuł z bardzo podstawową wiedzą o Hibernate i jego wykorzystaniu do budowania aplikacji javowych. Nie ma tam żadnych wodotrysków czy wzmianek o technologiach typu JPA czy wręcz zaawansowanego odwzorowywania klas w relacji jeden-do-wielu czy wiele-do-wielu, a jedynie kroki, aby przygotować grunt pod dalszą naukę Hibernate - po prostu niezbyt intensywne wprowadzenie.

Z dzisiejszym i poprzednim, pozostał mi jeszcze jeden artykuł sprzęgający oba, który będzie przedstawiał kroki użycia Springa i Hibernate w ramach samodzielnej aplikacji. Pomysły kolejnych mile widziane. Byłoby dobrze, aby udało mi się złożyć taki zestaw artykułów, aby w komplecie pozwalały na przeprowadzenie kursanta przez zaułki Springa i Hibernate, co w efekcie wprowadzi go na poziom średniozaawansowany. Czegoś brakuje? Gdybyście mogli mi pomóc zebrać taki zbiór artykułów byłoby cudnie. W ten sposób możnaby stworzyć ścieżkę warsztatową, która doprowadzi delikwenta do wymarzonego celu - gościa gotowego na udział w projekcie.

Jacek Laskowski jawnie - July 05, 2010 10:08 PM
Tworzenie samodzielnej aplikacji ze Spring Framework w NetBeans IDE 6.9

Miałem ostatnio ciekawe przedsięwzięcie (coś ala szkolenie-warsztaty) wprowadzające w arkana użycia Spring Framework oraz Hibernate. Dano mi do dyspozycji 2 dni i kiedy podjąłem się wyzwania sądziłem, że to będzie pół dnia omówienia tematu i...właśnie, co ja z nimi będę robił dalej?! Taka myśl towarzyszyła mi do pierwszego dnia, kiedy w połowie okazało się, że to, co łatwe i proste dla jednego (mnie) nie jest takim dla słuchaczy (oni). Okazało się, że należało zapoznać słuchaczy ze wspomnianą tematyką, ale czasami nawet z samym programowaniem w Javie. Można sobie wyobrazić, jak na miejscu, udoskonalałem materiały. Skończyło się na czymś niezwykle odświeżającym dla mnie i (zgodnie z ich oficjalną oceną) czymś pouczającym dla nich.

Jako, że nie mogłem znaleźć wystarczająco wprowadzających artykułów w tajniki użycia tandemu Spring Framework i Hibernate, postanowiłem stworzyć kilka na własne potrzeby. Jeden z nich już udostępniłem, a drugi się robi.

W artykule Tworzenie samodzielnej aplikacji ze Spring Framework w NetBeans IDE 6.9 przedstawiłem kroki niezbędne do stworzenia samodzielnej aplikacji korzystającej ze Spring Framework w zintegrowanym środowisku programistycznym NetBeans IDE 6.9. Starałem się wykorzystać wszystkie możliwości NetBeans, aby jak najmniejszym kosztem stworzyć pełnoprawną aplikację springową. Niestety nie ma ich wiele, ale chociaż pomoc przy tworzeniu pliku konfiguracyjnego Springa okazała się nieoceniona. Tylko dlaczego podpowiedzi w edytorze XML wymagają dostępu do Sieci?!

Kolejny będzie o użyciu Hibernate, aby skończyć na połączeniu obu. Uwagi mile widziane. Chciałbym, aby artykuł stanowił kanwę do nagrania kolejnego skrinkastu, bo skoro mam już scenariusz, to nie pozostaje nic innego, jak skręcić 5-minutówkę.

p.s. Tematyka Spring Framework i Hibernate tak mnie wkręciła, że zabrałem się za lekturę książki Spring Enterprise Recipes: A Problem-Solution Approach panów Josha Longa i Gary'ego Maka wydawnictwa Apress. Jest to moja pierwsza książka w stylu problem-rozwiązanie i bardzo mi ten sposób pisania przypadł do gustu. Czasami trochę rozwlekła i za bardzo wnikająca w pewne aspekty (dosłownie i w przenośni) użycia Springa, ale pomimo tego zdaje się być bardzo pouczająca.

Jacek Laskowski jawnie - May 22, 2010 07:18 AM
Skrinkast o Java EE 6 z @WebServlet, NetBeans IDE 6.9 i IBM WebSphere AS V8 w HD 720p na YouTube

Slajd tytułowy skrinkastaW końcu się udało! Po bodajże miesiącu przygotowań - tworzeniu scenariusza i kilkakrotnym nagrywaniu, aby później wszystko wrzucić do kosza i testowe publikacje na YouTube - mogę w końcu nagłośnić, że moja najnowsza produkcja filmowa trafiła pod strzechy YT w wersji HD 720p - Skrinkast o Java EE 6 z @WebServlet, NetBeans IDE 6.9 i IBM WebSphere AS V8!

Największym wyzwaniem było nagranie głosu, jednocześnie z wykonywanymi czynnościami podczas nagrania oraz utrzymanie czasu, który z planowanych 3-5 minut rozciągnął się do 6 minut i 4 sekund. Później postprodukcja - obróbka i nauka trików w ScreenFlow (dobrym źródłem okazała się sama dokumentacja oraz ScreenFlow's Product Demos & Tutorials, lektura o formatach do exportu i materiał był gotowy do publikacji.

Myliłby się ten, kto sądziłby, że publikacja na YT to koniec wytężonej pracy. Teraz pewnie tak będzie, ale kiedy napiszę, że skrinkast miał ujrzeć światło dzienne około 22giej wczoraj, a ujrzał dopiero po północy i jeszcze nie byłem pewien, czy wszystko jest dobrze, wszystko będzie jasne. Sam export może trać i w moim przypadku trwał około 30 minut, później zapis na YT chwila (około 5 minut), ale dopiero po tym zabawa zaczyna się na dobre - przetwarzanie filmiku przez samego YT. Do końca nie wiadomo, czy wersja skrinkastu będzie w rozdzielczości HD (próbowałem się z 1080p, ale ostatecznie skończyłem na 720p).

Co znajdziemy w skrinkaście? Jest to skrinkast-zagadka, w którym dzielę się doświadczeniami z pierwszych chwil z Java EE 6, NetBeans IDE 6.9 i IBM WebSphere Application Server V8. Utworzyłem projekt aplikacji webowej z servletem, który nie ma definicji w deskryptorze WEB-INF/web.xml oraz korzysta z adnotacji @WebServlet. Na koniec nagrania okazało się jednak, że popełniłem błąd i pomyślałem sobie, że zamiast poprawić, zostawię nagranie w postaci skrinkasta-zagadki.

I teraz najlepsze - pora rozpocząć zabawę. Zapraszam do obejrzenia mojego skrinkastu o platformie Java EE 6, NetBeans IDE 6.9 i WAS8 w akcji. Uwagi mile widziane, szczególnie o elementach nagrania, jak głos, tempo, głośność i inne takie. Szukam dobrego materiału dźwiękowego, aby podłożyć w tło, więc tutaj liczę również na Twoją pomoc. Pamiętaj, aby obejrzeć nagranie w wysokiej rozdzielczości!

Jacek Laskowski jawnie - May 13, 2010 09:06 PM
Siedzę w Turcji i przetwarzam sygnały zewsząd, trochę o NetBeans i WAS8 również

Siedzę w Turcji i mnie trochę zdusił cały ten zgiełk wokół. Pisałem o moich poprzednich wizytach w Stambule i mimo, że wiele rzeczy już doświadczyłem poprzednio, teraz nie są wcale znajome. Uczę się pilnie tureckiego i potrafię nawiązać komunikację - skorzystać z "protokołu komunikacyjnego" jakim jest język turecki. Mieszają mi się te pojęcia z IT z życiem codziennym i gdzie nie spojrzę, czego nie doświadczę, to właśnie jakby reminiscencja doświadczeń z IT :)

A działo się przez ostatni tydzień sporo. W Turcji moim zadaniem jest namierzenie problemów wydajnościowych w kodzie pisanym jeszcze na początku tego wieku, w czasach wszechobecnej Java 1.4 i z niedoświadczonym (takie odnoszę wrażenie) zespołem, który o automatycznym budowaniu aplikacji, testowaniu i całym tym "zgiełku" utrzymywania wysokiej jakości oprogramowania, obawiam się, że nawet nie słyszał. Nie jest to w żaden sposób zarzut, ale przestroga, że tworzenie czegokolwiek wymaga wiedzy, a nauka jedynie na projektach, to równia pochyła i krótkowzroczna perspektywa wolnego czasu. Wierzę, że czytelnicy tego bloga biorą sobie do serca wytyczne "Growing Object-Oriented Software, Guided by Tests". Jest wiele książek, które należą do kategorii "Obowiązkowa lektura" i ta z pewnością tam jest, ale wstrzymam się z rekomendacją do końca jej lektury, bo skończyłoby się na znanym i (nie)lubianym, strywializowanym "obowiązkowa lektura dla każdego". Potrzebuję bardziej efektownych recenzji, bo tego typu mi się przejadły. Co książka, to obowiązkowa lektura i wszystko zależy od punktu widzenia.

A skoro o nim, to mój punkt widzenia dwukrotnie w ciągu dnia sprowadza się do 30-minutowej "wycieczki" taksówką z hotelu w Taksim, aż do prawie przy lotnisku i spowrotem. Jazda przy 120 km/h na zatłoczonej otoban zderzak w zderzak daje się odczuć. Gdyby nie te widoki wokół, pewnie osiwiałbym już dawno. A tak urzeczony panoramą z zatłoczonymi parterówkami z gdzieniegdzie wystającymi meczetami z 2 minaretami i hotelami wysokimi na 30 pięter zapominam o bożym świecie. I filmuję, aby móc później pokazać rodzince. Pomyślałem sobie, czy dałoby radę przenieść ten typ jazdy do nas, do Warszawy chociażby, gdzie też czasami doświadczam podobnego uczucia, ale mimo wprawy taksówkarza, sądzę, że liczba kolizji nauczyłaby go manier, bo...jak to mówią "Do tanga trzeba dwojga" i to, że taksówkarz pędzi setką zderzak w zderzak, to tylko i dlatego, że inny kierowca robi podobnie. Tym samym nastąpiło "uwspólnienie interfejsów" i można się dopasować. W Warszawie o to trudniej.

Nauczyłem się w międzyczasie kilku sztuczek przydatnych tu i ówdzie, np. wyłączenie wszystkich katalogów z obsługi repozytorium Mercurial (hg), począwszy od katalogu bieżącego w dół, to po prostu:

$ cat .hgignore
syntax: regexp
^build.xml$
^build/
^nbproject/build-impl.xml$
^nbproject/private/platform-private.properties$
^nbproject/private/private.xml$
Włączamy sytax: regexp i bawimy się wyrażeniami regularnymi. Możemy mieszać konfigurację z wyrażeniami powłoki uniksowej przez syntax: glob. I tak naprzemiennie. Więcej można przeczytać w dokumentacji hgignore. Proste i przyjemne.

Siedząc wieczorami w hotelu, kiedy wracam ze spacerów po Taksim, zabrałem się za rozwój wtyczki NetBeans dla serwera aplikacyjnego WAS V8. Tak w ramach (samo)rozwoju programistycznego. Na razie udało mi się wyświetlić WAS V8 jako jeden z wielu serwerów w okienku Add Server..., więc idzie powoli, ale postępy zauważalne. Przydaje się znajomość skrótów klawiszowych i jak na razie przywykłem do Cmd+O (odszukanie typu) oraz Cmd+Shift+I (uprządkowanie importów). Po niedługich doświadczeniach z bardzo rozbudowanym klawiszowo edytorze javowym w Eclipse IDE, kiedykolwiek muszę usiąść przy NetBeans IDE, pod kątem skrótów klawiszowych odczuwa się jego niedojrzałość. Brakuje mi bardziej strawnych podpowiedzi i kombinacji z Eclipse. Cóż, przyzwyczajenie drugą naturą człowieka, więc przygryzam wargi i moje narzekania zrzucam na barki moich przyzwyczajeń, z którymi wiemy, że trzeba walczyć. Co też czynię sumiennie i z pokorą.

Jeju, po 4 dniach upalnych, przy temperaturze koło 30tki, zaczęło właśnie padać! Będzie znośniej, bo kiedy wychodzę z klimatyzowanego budynku do taksówki od razu daje się odczuć zmęczenie upałem i przenikliwym słońcem. Idzie się wykończyć, a to jedynie przez 30 minut w taksówce około 18tej (!)

Przeglądając kody źródłowe wtyczek do serwerów w NetBeans zauważyłem, że pewne konstrukcje są udokumentowane. Chyba zaczyna mi się udzielać "dobro" książki "Growing OO Software...", bo u mnie komentarzy niewiele, a raczej skłaniam się ku umieszczaniu ich w ramach dedykowanej metody o nazwie, która odpowiada komentarzowi, a tym samym mówi czytelnikowi, co robi. Zastanawiam się, czy to krok w dobrym kierunku? Doszło wręcz do tego, że cała metoda sprawdzająca, domyślnie wywoływana przez NetBeans IDE - valid() - jest jedynie wywołującą metodę docelową (zamiast umieszczania jej kodu bezpośrednio w ciele metody). Odnotowuję to jako krok ku mojemu, lepszemu warsztatowi programistycznemu i nie mam złudzeń, pod wpływem której książki jestem. Uzależnia. Sama metoda valid() mówi, a przynajmniej stara się wskazać swoją potrzebę istnienia, ale moja metoda mówi, co to znaczy być valid() i jakie warunki muszą zostać spełnione. Każde ze swoją metodą.

W trakcie pisania wtyczki przyszło mi stworzyć kawałek funkcjonalności wizualnej z GUI, co okazało się trywialne przez użycie asystenta New > Wizard.

Poszło gładko, aczkolwiek wizualne programowanie jakoś mnie ogranicza. Opierając się na tym asystencie, wiele jest wyłączone i zamiast dłubać w klasie muszę przestawić się na programowanie wizualnie, przez definiowanie właściwości w różnych widokach.

W pewnym momencie miałem nawet problem z zaznaczeniem komponentu, którego właściwości chciałem zmienić, ale na pomoc przyszedł mi klawisz TAB, dzięki któremu mogłem przeskakiwać między komponentami w GUI - w ten sposób dotarłem do JPanel, który był niewidoczny, bo z takimi rozmiarami na nic więcej nie mógł się porwać. Do zapamiętania: Cmd+Backspace kasuje wybrany komponent

Na zakończenie mojego tygodnia poza domem, w Turcji, zabrałem się za nagrywanie skrinkasta o NetBeans IDE 6.9, WAS V8 i @WebServlet, czyli filmiku o platformie do nauki Java EE 6. I tak się przygotowuję powolutku do niego. Mam już scenariusz i pierwsze próby już poszły do kosza. Dzisiaj spróbuję ponownie. Kupiłem nawet książkę o profesjonalnym nagrywaniu skrinkastów The Screencasting Handbook i próbuję swoich reżyserskich sił. Książka pełna rad, których wizualizację powinniście poczuć niedługo. Nagranie w trakcie realizacji. I będzie z głosem! Co mnie niezwykle przyciąga do tych nagrań, to możliwość wyuczenia się prowadzenia krótkich sesji warsztatowych, gdzie mam niewiele ponad 5-8 minut i prezentuję pewną funkcjonalność. Pozwala mi to wybrać tylko jeden element w danej sesji nagraniowej i przygotować się do ich zbiorczego odtworzenia w postaci 45minutówki podczas konferencji czy spotkania. Sama praca niełatwa, ale końcowy efekt...bezcenne! W końcu nauczę się nie przekraczać danego mi czasu antenowego i sesje będą ciekawsze, bo wyłącznie z kodem.

Ciekawe doświadczenie z przekazywaniem informacji nowoprzybyłym w postaci nagrania-skrinkastu doświadczyłem całkiem niedawno. Zostałem zaproszony do udziału w międzynarodowym przedsięwzięciu i strefy czasowe były tak rozbiegane, że jedynym sposobem na przekazanie mowy powitalnej był...skrinkast. Gość nagrał go i rozdał do zapoznania się. Zainteresowanych zaprosił do udziału w sesji jeden-na-jeden. Cel zrealizowany i w jaki nowatorski sposób. Ach, powinienem był napisać, że celem projektu jest właśnie stworzenie kursu do samodzielnego prowadzenia przez uczestników, tj. self-paced online course, więc była to swego rodzaju przygrywka do pracy, którą w podobnym stylu każdy będzie musiał zrealizować.

Na zakończenie, spostrzeżenie porównujące społeczności stojące za Twitterem i Facebookiem - "Facebook is the people you went to school with. Twitter is the people you wished you went to school with." ~@twittelator. Dla mnie rewelacja!

Pozdrowienia dla uczestników GeeCONa. Bawią się, a my musimy charować! Odkujemy się podczas Javarsovia 2010. Będzie rewelacyjnie. Już sama obsada sponsorska to gwarantuje, a liczba tematów z naszej, polskiej społeczności javowej jeszcze bardziej upewnia mnie w tym przekonaniu. Agenda właśnie się tworzy i z 4 ścieżkami po 6 wystąpień każda...co tu dużo pisać - 26 czerwca macie przecież już zarezerwowane i przegadamy temat w bezpośrednim starciu. Do zobaczenia!

Jacek Laskowski jawnie - April 25, 2010 08:28 PM
Nauka JEE6 z WAS8 w NetBeans 6.9 przez rozwój wtyczki j2ee.websphere?

Jak każdy użytkownik NetBeans IDE wie, albo przynajmniej wiedzieć powinien, od wersji 6.8 w grupie wspieranych serwerów aplikacyjnych brakuje IBM WebSphere Application Server (WAS). Mimo, że wtyczka do tego serwera istnieje i wspiera wersje 6.0 oraz 6.1, to jak to się wyrażono (nie pamiętam jednak źródła) ze względu na brak aktywnego rozwoju wtyczki i kilka problemów z nią związanych zdecydowano się na wstrzymanie dystrybucji wtyczki z najnowszymi wersjami NetBeans IDE, a więc NetBeans 6.9 nie ma i nie planuje się, aby miał ją dystrybuowaną domyślnie (lub chociażby dostępną w repozytorium do instalacji przez Update Installer). W ten sposób szeroka grupa użytkowników obu rozwiązań musi posiłkować się rozwiązaniami alternatywnymi - zamiast NetBeans IDE korzystać z IBM Rational Application Developer lub zrezygnować z bezpośredniego uruchamiania projektów na rzecz uruchamiania ich ręcznie. Manufaktura pamiętająca ubiegły wiek.

Nie potrafię wytłumaczyć tej sytuacji, a kiedy dopowiem, że Eclipse również nie przychodzi ze wsparciem dla WASa, to już w ogóle trudno mi ją zrozumieć. Nawet przesiadka na Eclipse nie wchodzi w rachubę. Pewnie chodzi o "zasoby", które każda ze stron chciałaby poświęcić na rozwój narzędzi, czy to NetBeans IDE, czy Eclipse. Jakkolwiek w przypadku tego pierwszego szybko to nie nastąpi (szczególnie po przejęciu przez Oracle, gdzie strategicznych serwerów przybyło - GlassFish, Oracle WebLogic Server, JBoss Application Server i Apache Tomcat), to w przypadku drugiego było to dla mnie niebywałym zaskoczeniem.

W swojej DziRze (parafrazując wymowę nazwy produktu JIRA), czyli Dzienniku Rzeczy do Zrobienia (możnaby napisać DziRzeZ, ale to pachnie bluźnierstwem i ekskomuniką) pojawiło się zadanie/projekt Nauka JEE6 z WAS8 w NetBeans 6.9. Testuję tym samym metodykę GTD (ang. Getting Things Done), gdzie każde zakończone zadanie jest początkiem kolejnego i tak zaczęło się od instalacji NB 6.9 Beta, która ukazała się kilka dni temu, później przeszukiwanie Sieci za źródłami wtyczki do obsługi WASa i w końcu mam...

W moim NetBeans 6.9 pojawiła się parka serwerów IBM WebSphere Application Server 6.0 oraz 6.1. Niestety brakuje wsparcia dla 7.0 (obsługa Java EE 5) oraz 8.0 (obsługa Java EE 6).

Już kiedyś zab(ie)rałem się za pisanie wtyczki do NetBeans IDE dla Apache Geronimo, ale jak to zwykle bywa, inne rzeczy były ważniejsze i cała para związana z rozwojem wtyczki poszła w gwizdek. Pomyślałem sobie, że warto byłoby powrócić do tematu inną ścieżką. W końcu na tapecie jest nauka JEE6 z rozpoznaniem WAS 8, co w połączeniu z nieprzeciętnym wsparciem dla tej technologii przez NetBeans IDE mogłoby być przyczynkiem do rozwoju aktualnej wtyczki dla WAS 6.0/6.1 i już po nabraniu wprawy, przejściu do wtyczki dla Apache Geronimo. Wydaje się być trochę przekombinowane, ale póki co sprawy idą gładko.

Przeszukałem Sieć i dobrałem się do źródeł wtyczki NB dla WAS, które dostępne są w repozytorium Git - http://hg.netbeans.org/main/ w podkatalogu j2ee.websphere. Wykonujemy kilka poleceń...

devmac:oss jacek$ mkdir netbeans
devmac:oss jacek$ cd netbeans
devmac:netbeans jacek$ hg clone http://hg.netbeans.org/main/ .
devmac:netbeans jacek$ export ANT_OPTS="-Xmx512m -XX:MaxPermSize=256m"
devmac:netbeans jacek$ ant
...
BUILD SUCCESSFUL
Total time: 47 minutes 10 seconds
, aby po zaimportowaniu do NetBeans...

i uruchomieniu projektu, cieszyć się wsparciem NB dla WAS. Jakby przy okazji (aczkolwiek w moim przypadku był to cel, a nie efekt uboczny) mamy gotowe środowisko do rozwoju, tj. lektury kodu źródłowego wtyczki NetBeans IDE dla WebSphere Application Server.

Jakbym tak jeszcze wiedział, jak lokalne zmiany publikować w GitHub, albo Google Code w postaci "sforkowanych" projektów byłoby na prawdę cacy. Ktoś mógłby użyczyć pomocnej dłoni? Byłbym zobowiązany.

Jacek Laskowski jawnie - January 30, 2010 12:00 PM
Niemy film(ik) na weekend - Java Persistence (JPA) 2.0 praktycznie - zestawienie środowiska z EclipseLink i Apache Maven 2

Spisałem scenariusz (artykuł Java Persistence (JPA) 2.0 praktycznie - zestawienie środowiska z EclipseLink i Apache Maven 2) i kolejnego dnia przyszło do kręcenia filmiku.

Mimo swoich wad reżyserskich, miernej gry aktorów (poza tymi technologicznymi) i jego dopadło światło dzienne. Na YouTubie pojawił się bez fanfar, nagrody Grammy, Złotych Lwów, czy Oscara, ale doświadczenie jest zdecydowanie większe. Scrinkast można podziwiać na deskach YouTube - Java Persistence (JPA) 2.0 praktycznie - zestawienie środowiska z EclipseLink i Apache Maven 2.

Wiele w nim niedoskonałych cięć, ale z samego produktu jestem niezwykle zadowolony, bo jest to pierwsza edycja, która ujrzała światło dzienne z gadżetami w stylu podświetlanie, spowalnianie, wstawki tekstowe na rozpoczęcie odpowiedniej sesji nagranionej, więc dużo było przy tym pracy edycyjnej, ponagraniowej. Teraz pozostaje zrobić ostatni krok - podłożyć głos narratora, aby poza oglądaniem było trochę życia w nagraniach. Kiedy będzie głos w skrinkastach, będzie mi bliżej do zrealizowania jeszcze jednego pomysłu - podkastów. To takie połączenie przyjemnego z pożytecznym (co jest czym pozostawiam Waszej ocenie). W przypadku skrinkastów, ja kontroluję, co będzie powiedziane, a podkast uważam za ewaluację głosową, gdzie tych rozmówców oczekuje się więcej.

Komentarze odnośnie mojej dotychczasowej pracy nagraniowej są bezcenne na tym etapie, więc śmiało! Potrzeba mi wrażeń w stylu - co było denerwujące, czego za mało/dużo, długość nagrania i sam sposób przedstawiania - wklejanie kawałków kodu zamiast ich wpisywanie. Więcej ich, to mniej Waszego cierpienia później. To tak, jakby powiedzieć "Jak sobie pościelesz, tak się wyśpisz", co oznacza, że jeśli teraz pojawią się (dobre?) rady, to ich wdrożenie na tym etapie będzie przyczynkiem do moich przyzwyczajeń później. Nie ma obawy o mój stan psychiczny. Dam sobie radę nawet z komentarzami w stylu "Do kitu! Zajmij się lepiej hotdogami.", aczkolwiek preferowałbym w takiej sytuacji więcej argumentów.

Przydałaby się jakiś akompaniament muzyczny na podkład, coś w stylu muzyki poważnej, ale delikatnie. Propozycje propozycji pozbawionych praw autorskich, tj. możliwych do użycia bezpłatnie, mile widziane. Ten sam problem będzie i przy podkastach.

A teraz do skrinkasta...

Jacek Laskowski jawnie - August 05, 2009 08:00 PM
"Włamaniowy" powrót z wakacji, nowe wydania NetBeans i SDJ 8/200!

I po urlopie! Odpoczywałem ile się dało w miłym towarzystwie rodziny i znajomych. Powrót z urlopu był niezwykle rozrywkowy - w Budapeszcie spędziliśmy wieczór i część nocy (do około 2-giej) na...komisarjacie policji, po tym, jak parkując na ulicy Lonyay "poprosiliśmy" o włam do samochodu. Podobno ulica podwyższonego ryzyka, a i akurat ta noc była obfitująca w tego typu wydarzenia. Dodając do tego całkowity brak komunikacji z węgierską policją po polsku, angielsku, czy niemiecku ubaw po pachy. Szczęściem w nieszczęściu było tylko uszkodzenie zamka w samochodzie, więc "jedynie" straciliśmy część rzeczy wakacyjnych i filmy i zdjęcia wakacyjne. Było, minęło.

Wytrzymałem bez kompa do niedzieli, do samiutkiego końca urlopu. Udało mi się przeczytać 1,5 książki (czytaj: prawie 2) i to całkiem niezwiązane z IT. Warto było. Po powrocie zostało mi wczesne chodzenie spać (przed północą), ale siedzenie przed kompem już na maksa. Nawet pierwszego dnia w pracy miałem już wyjazd do klienta na gaszenie pożaru, a po nim mini-projekt. Każdemu życzę takiego powrotu (poza kradzieżą, oczywiście). Jak gdyby ktoś dbał, abym się za bardzo nie rozleniwił ;-)

W skrzynce pocztowej znalazłem trochę wartościowej korespondencji (dobra, dobra, maili, ale korespondencja, czy wręcz wiadomość też przecież piknie). Największym zaskoczniem była dla mnie informacja o nowych wydaniach NetBeans IDE. Bodajże w poniedziałek zainstalowałem NetBeans 6.7.1 ze wsparciem dla JavaFX 1.2, aby we wtorek znaleźć kolejną o NetBeans IDE 6.8 Milestone 1 Available for Download.
Pierwszą wersję instalowałem ze względu na wsparcie dla Grails 1.1, a może przede wszystkim, aby przyjrzeć się JavaFX 1.2, ale kolejna mogłaby porwać mnie wsparciem dla Java EE v6 czy ulepszoną obsługą Groovy i Scala z Mavenem (Improved support for Groovy and Scala). Postawiłem jednak na już zainstalowaną wersję 6.7.1. Na razie wystarczy wrażeń, a porządek powinien ustawić kurs ponownie na Grails (z niewielkim wskazaniem na JavaFX). Może ktoś już miał doświadczenia z tym "Improved support for Groovy and Scala" w NetBeans 6.8m1 i mógłby pochwalić się wrażeniami?

Kolejną interesującą wiadomością była informacja o nowym wydaniu Software Developer's Journal (SDJ) na sierpień:

W salonach prasowych jest już dostępny najnowszy Software Developer's Journal nr. 8/2009. Tematem przewodnim numeru jest język Groovy i środowisko Grails. Grails jest prostym środowiskiem z ogromnymi możliwościami.

Z magazynu dowiecie się co kryje się w jego wnętrzu, jakiego rodzaju rozwiązania są stosowane i jaką rolę w tym wszystkim odgrywa język Groovy. Krok po kroku dowiecie się jak łatwo i przyjemnie jest stworzyć aplikację internetową, która w większości…stworzy się sama.Groovy z kolei to dynamiczny język dla środowiska Java, w pełni integrujący się z tym językiem, w pełni pozwalając na korzystanie z istniejących szkieletów i bibliotek. W niniejszym wydaniu SDJ znajdziecie obszerny artykuł wprowadzający do tego języka.


Po tytule numeru możnaby mniemać, że artykułów o Grails i Groovy będzie trochę. Faktycznie, możnaby powiedzieć, że jest "trochę", bo aż...2 (!) Okazało się, że artykuł przewodni napisał mój znajomy Mariusz Róg, którego miałem możliwość poznać podczas szczecińskiej konferencji javowej java4people, a później spotkać na Javarsovii. Już zaplanowałem pojawienie się w Trafficu na lekturę artykułu, kiedy to zauważyłem ten numer na biurku Marcina Molaka. Dzięki jego uprzejmości numer jest już w moich rękach i mogę się nim delektować w zaciszu domowego kominka :) Dzięki Marcin! Pewnie i tak nie kupiłbym numeru wyłącznie dla 4 artykułów - poza Grails są jeszcze o samym języku Groovy, WS-BPEL i UML. Może recenzją przyczynię się do wzrostu sprzedaży i w ten sposób zwrócę dług :) Artykuł o Grails już przeczytałem i dla śledzących moje publikacje/relacje z lektury książek o Grails nie będzie tam zupełnie nic nowego. Może poza lekkim piórem Mariusza, którego artykuł czyta się niezwykle przyjemnie. Jest to materiał dla początkujących, w którym można znaleźć co to jest Grails, na czym jest oparty, wprowadzenie do poleceń grails i kilka innych dodatków, aby wszystko scalić przez zaprezentowanie stworzenia aplikacji webowej ala blog. Znalazłem w nim również kilka chochlików, ale są niegroźne technicznie. A poza tym w numerze artykuł "Dogadajmy się – O komunikacji dla programistów" panów z łódzkiego JUGa - Mariusza Sieraczkiewicza i Michała Bartyzela - który czeka cierpliwie w kolejce do lektury. Zdecydowanie warto przeczytać (kupić?) ten numer i to nie tylko ze względu na znajomych i ich trud literacki, ale przede wszystkim, aby tym samym wskazać kierunek rozwoju gazety (być może zanim grześkowe JAVA exPress całkowicie odbierze rynek). Pożyjemy, zobaczymy.

Jacek Laskowski jawnie - June 29, 2009 10:36 PM
grails upgrade i morph-deploy, finalny NetBeans 6.7 oraz grailsowy Refcard

Jakiś czas temu zainstalowałem nową wersję Grails 1.1.1. W trakcie aktualizacji kasuję wszystkie katalogi związane z poprzednią wersją oraz te, w katalogu domowym (%userprofile%/.grails). W międzyczasie dostałem informację o braku aktywności na Morph i zamknięciu usługi, jeśli w ciągu nadchodzących 7 dni nie wykonam aktualizacji, więc naturalnie pierwszą wtyczką do instalacji stała się morph-deploy. Okazało się, że w trakcie instalacji pojawił się komunikat o konieczności uaktualnienia Grails w samej aplikacji.

 jlaskowski@work /cygdrive/c/projs/sandbox/nauczyciel
$ grails install-plugin morph-deploy
Welcome to Grails 1.1.1 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:/apps/grails

Base Directory: C:\projs\sandbox\nauczyciel
Running script c:\apps\grails\scripts\InstallPlugin.groovy
Environment set to development
Application expects grails version [1.1], but GRAILS_HOME is version [1.1.1] -
use the correct Grails version or run 'grails upgrade'
if this Grails version is newer than the version your application expects.
Jeszcze nigdy wcześniej nie spotkałem się z tym komunikatem. Wykonanie zalecanego grails upgrade zajęło tylko chwilę.
 jlaskowski@work /cygdrive/c/projs/sandbox/nauczyciel
$ grails upgrade
Welcome to Grails 1.1.1 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:/apps/grails

Base Directory: C:\projs\sandbox\nauczyciel
Running script c:\apps\grails\scripts\Upgrade.groovy
Environment set to development
NOTE: Your application currently expects grails version [1.1], this target will upgrade it to Grails 1.1.1 ...

WARNING: This target will upgrade an older Grails application to 1.1.1.
However, tag libraries provided by earlier versions of Grails found in grails-app/taglib will be removed.
The target will not, however, delete tag libraries developed by yourself.
Are you sure you want to continue?
(y, n)
y
...
Please make sure you view the README for important information about changes to your source code. ...
Project upgraded
Po tym instalacja wtyczki przebiegła już całkiem gładko.
 jlaskowski@work /cygdrive/c/projs/sandbox/nauczyciel
$ grails install-plugin morph-deploy
Welcome to Grails 1.1.1 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:/apps/grails

Base Directory: C:\projs\sandbox\nauczyciel
Running script c:\apps\grails\scripts\InstallPlugin.groovy
Environment set to development
Reading remote plugin list ...
[get] Getting: http://svn.codehaus.org/grails/trunk/grails-plugins/.plugin-meta/plugins-list.xml
[get] To: C:\Documents and Settings\jlaskowski\.grails\1.1.1\plugins-list-core.xml
.
[get] last modified = Tue Jun 09 13:03:55 CEST 2009
Reading remote plugin list ...
[get] Getting: http://plugins.grails.org/.plugin-meta/plugins-list.xml
[get] To: C:\Documents and Settings\jlaskowski\.grails\1.1.1\plugins-list-default.xml
.........................
[get] last modified = Sat Jun 13 05:45:37 CEST 2009
[get] Getting: http://plugins.grails.org/grails-morph-deploy/tags/RELEASE_0_1/grails-morph-deploy-0.1.zip
[get] To: C:\Documents and Settings\jlaskowski\.grails\1.1.1\plugins\grails-morph-deploy-0.1.zip
.....
[get] last modified = Thu Jan 22 00:21:40 CET 2009
[copy] Copying 1 file to C:\Documents and Settings\jlaskowski\.grails\1.1.1\projects\nauczyciel\plugins
Installing plug-in morph-deploy-0.1
[mkdir] Created dir: C:\Documents and Settings\jlaskowski\.grails\1.1.1\projects\nauczyciel\plugins\morph-deploy-0.1
[unzip] Expanding: C:\Documents and Settings\jlaskowski\.grails\1.1.1\plugins\grails-morph-deploy-0.1.zip into
C:\Documents and Settings\jlaskowski\.grails\1.1.1\projects\nauczyciel\plugins\morph-deploy-0.1
Executing morph-deploy-0.1 plugin post-install script ...
Plugin morph-deploy-0.1 installed
Plug-in provides the following new scripts:
------------------------------------------
grails deploy
Found events script in plugin morph-deploy
Tyle tylko, że samo uruchomienie wtyczki przypomniało mi o błędzie, który sądziłem, że został poprawiony dawno temu. Czy tylko ja korzystam z tej wtyczki?! (na pewno ja nie zgłosiłem tego błędu, więc to może być przyczyna problemu :))
 jlaskowski@work /cygdrive/c/projs/sandbox/nauczyciel
$ grails war
Welcome to Grails 1.1.1 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:/apps/grails

Base Directory: C:\projs\sandbox\nauczyciel
Running script c:\apps\grails\scripts\War.groovy
Environment set to production
Warning, target causing name overwriting of name startLogging
Removing JDBC 2 Extensions JAR from WAR for Mor.ph deployment
Error executing script War: No such property: stagingDir for class: _Events
gant.TargetMissingPropertyException: No such property: stagingDir for class: _Events
at gant.Gant$_dispatch_closure4.doCall(Gant.groovy:329)
at gant.Gant$_dispatch_closure6.doCall(Gant.groovy:334)
at gant.Gant$_dispatch_closure6.doCall(Gant.groovy)
at gant.Gant.withBuildListeners(Gant.groovy:344)
at gant.Gant.this$2$withBuildListeners(Gant.groovy)
at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source)
at gant.Gant.dispatch(Gant.groovy:334)
at gant.Gant.this$2$dispatch(Gant.groovy)
at gant.Gant.invokeMethod(Gant.groovy)
at gant.Gant.processTargets(Gant.groovy:495)
at gant.Gant.processTargets(Gant.groovy:480)
Caused by: groovy.lang.MissingPropertyException: No such property: stagingDir for class: _Events
at _Events$_run_closure1.doCall(_Events.groovy:6)
at War$_run_closure1.doCall(War.groovy:38)
at gant.Gant$_dispatch_closure4.doCall(Gant.groovy:324)
... 10 more
Wystarczy skasować skrypt _Events.groovy z katalogu wtyczki morph-deploy...
 jlaskowski@work /cygdrive/c/projs/sandbox/nauczyciel
$ rm -rf c\:/Documents\ and\ Settings/jlaskowski/.grails/1.1.1/projects/nauczyciel/plugins/morph-deploy-0.1/scripts/_Events.groovy
i ponownie uruchomić grails war.
 jlaskowski@work /cygdrive/c/projs/sandbox/nauczyciel
$ grails war
Welcome to Grails 1.1.1 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:/apps/grails

Base Directory: C:\projs\sandbox\nauczyciel
Running script c:\apps\grails\scripts\War.groovy
Environment set to production
Warning, target causing name overwriting of name startLogging
...
Done creating WAR C:\projs\sandbox\nauczyciel/nauczyciel-0.1.1.war
A później już tylko grails deploy, username/password do Morpha i można cieszyć się wdrożoną aplikacją grailsową - niewielką, ale własną!
 jlaskowski@work /cygdrive/c/projs/sandbox/nauczyciel
$ grails deploy
Welcome to Grails 1.1.1 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:/apps/grails

Base Directory: C:\projs\sandbox\nauczyciel
Running script C:\Documents and Settings\jlaskowski\.grails\1.1.1\projects\nauczyciel\plugins\morph-deploy-0.1\scripts\Deploy.groovy
Environment set to development
Warning, target causing name overwriting of name default
This will deploy the file nauczyciel-0.1.1.war
Enter your Mor.ph username:
*******
Enter your Mor.ph password:
*******
Please wait...
[java] Uploading the code...
[java] Creating new appspace version...
[java] Deploying the application...
[java] Deploy Done.
[java] For more information on the status of this deployment, you
[java] can view the Deployment Logs by clicking 'Manage' located
[java] on your subscription widget and by clicking the Logs tab.
[java] In this same page, you can also view your Production logs
[java] and Scheduled task logs.
[java] ** transaction commit **
Tym razem wszystko poszło już gładko. Nowa wersja aplikacji jest na Morphie. Pomysły, co mogłaby oferować mile widziane. Zdecydowanie za rzadko do niej zaglądam, więc mogłoby się to zmienić po kilku wskazówkach ;-)

p.s. Pojawiła się finalna wersja NetBeans IDE 6.7. Jedną z oczekiwanych funkcjonalności było wsparcie dla Grails 1.1 i to faktycznie otrzymaliśmy. Więcej o zmianach w temacie wsparcia Groovy i Grails na stronie Groovy and Grails.

p.s.II Pojawił się dokument Getting Started with Grails z serii Refcard (pisał o tym również Mateusz w Getting started with Grails refcard, więc pewnie już wiecie). W połączeniu z NetBeans 6.7 nie można już narzekać na brak narzędzi i wsparcia do nauki Grails. Teraz jedynym czynnikiem ograniczającym jest...czas. Ale z tym zawsze jest i będzie problem, jeśli się człowiek zajmuje pierdołami zamiast czymś pożytecznym. Jeszcze nie sprawdziłem zawartości, ale nie omieszkam.

p.s.III (ostatni, ale nie mniej ważny) Chciałbym tym samym nagłośnić pomysł, który chciałbym wdrożyć podczas jesiennej edycji Warsjavy i powrócić z ideą tej konferencji - warsztatami. Niech to będzie połączenie pomysłu uatrakcyjnienia spotkań Warszawa JUG, gdzie promuje się 20-30-minutowe wystąpienia, aby szybko i bez zbędnych wprowadzeń zademonstrować wybrany projekt. Myślę o pewnego rodzaju publicznej selekcji propozycji, gdzie prelegent musiałby postarać się o reklamę swojego przedsięwzięcia i tylko te wchodzą, które zdobędą największą liczbę głosów. Pewnie należałoby spodziewać się jakieś aplikacji, ale skoro jej jeszcze nie ma, a miałbym ją stworzyć, to pewnie jej w ogóle nie będzie :) Jeśli nie, to wybierze kapituła konferencji. Najlepiej byłoby, gdyby udało się uruchomić warsztaty w jakimś pubie z rzutnikiem o dobrej rozdzielczości, powiedzmy przez 4 godziny. To daje około 8 30-minutowych prezentacji z przerwami 15 minutowymi. Mottem przewodnim byłyby języki dynamiczne i ich projekty - Groovy (z Grails), Scala (z Liftem), Clojure (z ???) czy wręcz takie cuda jak F#. Może mogłoby to być wspólne przedsięwzięcie grup javowych z Warszawy i innych miast JUGowych, a także grup MS (ze względu na F#). Dlaczego nie?! Jeśli celem miałoby być łatwe i przyjemne przyswojenie wiedzy z dziedziny dynamicznych języków obiektowych z elementami funkcyjnymi (taki językowy gulasz), to widzę we współpracy jedynie same zalety. Wciąż jednak pomysł przyćmiewany nadchodzącą Javarsovią, na której będzie można przedyskutować temat z Tobą, Tobą i z Tobą również. Będzięcie, prawda? Ja siedzę w Bratysławie, więc pojawię się dopiero pod sam koniec i to pewnie dopiero na...SPOINIE spoić się z Wami ;-)

APIDesign - Blogs - May 18, 2009 05:43 PM
API Podcast #2: Reentrancy

Listen to podcast #2: to learn about our take on Swing and its poor reentrancy. Find out what it may mean for your own API design and especially Runtime_Aspects_of_APIs that you create. Learn to fight with that problem by maximizing the declarative nature of your API. --JaroslavTulach 17:43, 18 May 2009 (UTC)

APIDesign - Blogs - May 12, 2009 07:50 PM
API PodCast #1

Listen to this: ! It is almost a year since we (me and Geertjan) started our regular API Design Tips podcasts. They used to be part of larger NetBeans podcasts, however recently I needed some promotion material for TheAPIBook and I decided to extract the API Tip parts. I am glad I can offer these sketches to you. Enjoy podcast #1. --JaroslavTulach 19:50, 12 May 2009 (UTC)

Marek Kliś - różności okołojavowe i nie tylko - March 29, 2009 05:51 PM
NetBeans 6.7M2 i instalator platformowych aplikacji

Od jakiegoś czasu jest dostępna wersja M2 NetBeans 6.7 - wydanie stabilnej wersji jest planowane na czerwiec. Postanowiłem się bliżej przyjrzeć co nowa wersja będzie oferować.
Pierwsze co zwróciło moją uwagę to plugin instalatora dla aplikacji tworzonych z wykorzystaniem platformy NetBeans.



Po jego zainstalowaniu pojawia się nam nowa opcja dla projektów typu Module Suite czyli Generate Suite Installer.



Wybranie tej opcji uruchamia prostego kreatora.



W pierwszym kroku podajemy kilka informacji charakteryzujących naszą aplikację oraz podstawowe wymagania jakie musi spełniać system, na którym będzie ona instalowana.
Drugi krok to podanie treści (lub pliku) licencji, która musi być zaakceptowana podczas instalacji.



I to tyle. Po chwili instalator jest gotowy.



W katalogu dist naszej aplikacji czeka na nas archiwum zip "*-installer-image.zip". Wystarczy je przesłać do klienta, który sobie je rozpakuje i uruchomi plik installerLuncher (sh lub vbs w zależności od systemu). Instalator przeprowadzi użytkownika ukazując mu kolejne okna.

















Po przejściu tych kilku kroków aplikacja jest zainstalowana.

Wg mnie plugin będzie przydatny ale pod warunkiem, że w wersji finalnej zostanie dopracowany (nie trzeba będzie pisać własnych zadań ant'a tworzących instalatora w oparciu np o IzPack'a). Brakuje mu np wybrania w kreatorze opcji czy porobić skróty np na pulpicie czy w menu Start. No i domyślna grafika z logiem NetBeans'a 6.0 też nie jest na czasie.
Zauważyłem także, że jeśli w kreatorze użyjemy polskich znaków instalator nie uruchomi się wcale i nie informuje nas o żadnych błędach.

Jacek Laskowski jawnie - March 20, 2009 08:26 AM
Services w NetBeans IDE 6.7 i NetCAT 6.7

Jakimś cudem trafiłem do zakładki Services w najnowszej wersji rozwojowej NetBeans 6.7. Ach, to było zapewne, po przeczytaniu wpisu Adama Biena o GlassFish v3 i Equinox Interesting announcement: Glassfish V3 Can Run On Equinox, albo może po tym, kiedy zauważyłem, że dawne paczki netbeans-trunk-nightly-<data>.zip są teraz dostępne jako netbeans-trunk-nightly-<data>-ml.zip. A może po wcześniejszych zapowiedziach aktualizacji GlassFisha do wersji v2.1. Tak czy owak, znalazłem się w zakładce Services.

I tutaj zdumienie - nie zastałem tego, czego oczekiwałem, tylko całkiem nowe węzły Hudson oraz Issue Tracking. Brakuje przynajmniej Servers (pewnie zasługa nowej funkcjonalności NetBeans 6.7 - Ergonomic IDE (czytaj o tym w Ergonomic IDE == Fitness Forever == NetBeans Features on Demand ), która włącza tylko te funkcjonalności, które są w danej chwili potrzebne/wymagane).

Zobaczmy, jakie repozytoria są wspierane domyślnie przez Issue Tracking.

Szału nie ma - tylko Bugzilla?! A gdzie JIRA? Myślałem, że może to ma związek z brakującą wtyczką do niej, ale nic nie znalazłem w Tools -> Plugins.

Coś się zmienia, to dobrze, ale jak to bywa, nie wszystkich można ustatysfakcjonować. Pewnie wsparcie dla JIRA będzie niebawem.

Sprawdziłem Hudsona i skonfigurowałem go z http://deadlock.netbeans.org/hudson.

I działa. Nie pracuję na codzień z Hudson, więc nie wiem, czy to wystarczy do pracy z nim, ale właśnie dlatego, że jest, będę miał okazję nauczyć się z tego korzystać - chciał, czy nie chciał. Może nawet za chwilę stwierdzę, że nie wyobrażam sobie życia bez tego?! ;-)

Interesująca jest ta ikona w dolnym prawym rogu - ta z 5-tką. Kiedy otworzyłem NetBeans od razu rzuciła mi się w oczy ta malutka ikona obok (wciąż na szaro, nawet teraz). Wciskając tą 5-tkę dostajemy informacje o wynikach budowania, które wymagają interwencji.

To jest dobre. Nie trzeba zaglądać do poczty, RSSa, czy innego mechanizmu informowania o wpadce w systemie automatycznego budowania, aby się zorientować, że coś jest nie tak i...już idą po nas (i będzie trzeba wybierać tabletkę niebieską, albo czerwoną, i takie tam...).

A tak jeszcze w temacie, rozpoczęły się zapisy na kolejny NetBeans Community Acceptance Tests (NetCAT) 6.7, czyli program akceptacji wydania NetBeans do publicznego użycia - jako finalny produkt. Jirka, głównodowodzący programem, wysłał zaproszenie na grupę użytkowników NetBeans, w którym zachęca do udziału i że nie powinniśmy być "hesitate to contact him in case of any questions."

Hello NetBeans fans,

I am happy to announce that since today we are starting to form the NetCAT 6.7 team. If you are interested in taking your part in helping us test NetBeans 6.7 development builds please read more on the homepage [1] and sign up during this week! NetBeans 6.7 feature highlights in short:

* Connected Developer (Kenai integration)
* Maven projects integration
* Ergonomic IDE
* Unified framework for integrating additional languages to the source code editor
* Debugger improvements
* Enhanced C/C++, Groovy, PHP, Ruby support
* and much more...

[1] http://qa.netbeans.org/processes/cat/67

Don't hesitate to contact me in case of any questions.

Best regards,
--
Jiri Kovalsky
Technical Community Manager
http://www.netbeans.org

Zainteresowany/-a sprawdzeniem NetBeansa przed finalnym wydaniem? Chcesz mieć znaczący głos, czy NetBeans jest gotów, czy nie na spotkanie z rynkiem? Zapisz się i wyraź swoją opinię! W zamian można spodziewać się...koszulki..miałem napisać...lepszej funkcjonalnie wersji NetBeans ;-)

Marek Kliś - różności okołojavowe i nie tylko - March 02, 2009 05:44 PM
NetBeans Platform Certified Training - dzień 2.

Drugi dzień szkolenia przebiegał pod znakiem "wyglądu" aplikacji napisanych na platformie.



Pierwszy wykład należał do Geertjana, który opowiedział nam o systemie okien czyli Windows System API. Drugi wykład to System File System API, o którym opowiadał Karol.



Wykład Karola był przeplatany przykładami prezentowanymi przez Geertjana. W oczekiwaniu na pizzę oraz w ramach relaksu poruszone były tematy nie związane bezpośrednio z platformą czyli Groovy i Wicket.
Jak widać na zdjęciach zrobionych podczas przerwy uczestnicy czuli nie tylko głód wiedzy ;)





Po przerwie przyszedł czas na omówienie jednej z ciekawszych i efektowniejszych bibliotek platformy czyli Visual Library.



Następnie Karol opowiedział nam jak wygląda jego praca w SUNie, czyli głównie poprawianie błędów zgłoszonych przez użytkowników w Issuezilli. Przy okazji dowiedzieliśmy się, że jeśli chcemy aby znaleziony przez nas błąd został przez kogokolwiek dostrzeżony musimy mu nadać priorytet co najmniej P3 ;)
Na koniec kilka pomysłów na moduły lub aplikacje, które pozwolą uczestnikom uzyskać certyfikat NetBeans Certified Engineer.
Drugi dzień szkolenia zakończył się wcześniej niż pierwszy bo ok godziny 16.
Uwagi uczestników szkolenia można przeczytać na grupie Silesia JUG.
Jeśli bylibyście zainteresowania takim szkoleniem na swojej uczelni lub w ramach Waszego JUGu to informacje na ten temat są dostępne na oficjalnej stronie szkolenia.

Jacek Laskowski jawnie - March 02, 2009 07:47 AM
Ergonomic IDE == Fitness Forever == NetBeans Features on Demand

Już podczas zabezpieczania aplikacji webowej ze Spring Security z rozwojową wersją NetBeans 6.7 (patrz Proste uwierzytelnianie i autoryzacja w aplikacji webowej ze Spring Security w 15 minut) zaskoczyło mnie pewne zachowanie NetBeans, które polega na włączaniu jego funkcjonalności na żądanie - należy wcisnąć przycisk Activate i żądana funkcjonalność zostanie włączona. Tak było ze wsparciem dla Java EE (we wskazanym artykule), a dzisiaj zauważyłem, że podobnie jest ze wsparciem dla projektów grailsowych i w ogóle dla obsługi Groovy przez NetBeans. Kiedy tworzyłem nowy projekt na moją prezentacje Grails na nadchodzce spotkanie Warszawa JUG (to już w nadchodzący wtorek, 3 marca o 18-tej na MIMUWie!), pojawił się ponownie ekran z Activate.

Wystarczy wcisnąć Activate, aby po chwili móc dalej kontynuować pracę.

Okazuje się, że ma to swoją nazwę - Ergonomic IDE, również nazywane Fitness Forever, albo nawet NetBeans Features on Demand. Zainteresowanych odsyłam do dokumentu NetBeans 6.7M2's New and Noteworthy, w którym opisana jest ta cecha. Podobno ma być coraz szybciej i to przy zachowaniu pełnej wszechstronności NetBeans (!) Zobaczymy. Jak na razie nie zauważyłem specjalnego przyspieszenia jego działania (należę do grupy zadowolonych z aktualnej szybkości jego działania), ale ufam, że pewnie jakieś jest.

Krótkie sprawdzenie funkcjonalności wsparcia projektów z Grails i NetBeans odświeża projekty grailsowe bez problemów. Pamiętam, że właśnie to był główny powód, dlaczego przeniosłem się chwilowo do IntelliJ IDEA 8. Wracam tym samym do dziennych wersji NetBeans 6.7 i prezentacja na spotkaniu Warszawa JUG będzie właśnie z nim.

Marek Kliś - różności okołojavowe i nie tylko - February 28, 2009 08:30 PM
NetBeans Platform Certified Training - dzień 1.

Pierwszy dzień szkolenia z platformy NetBeans właśnie za nami. Plan pierwszego dnia przedstawiał się następująco:



Szkolenie zaczęło się od krótkiego wstępu Geertjana. Następnie miejsce na "mównicy" zajął Karol i opowiedział o korzyściach wynikających z używania platformy. Jego wystąpienie było przerywane przykładami pokazywanymi przez Geertjana. Po tym wszystkim przyszedł czas na pierwsze warsztaty. Uczestnicy prowadzeni przez trenera "przenieśli" zwykła Swingową aplikację (Anagram Game z przykładów dostępnych w NetBeansie) na platformę. Warsztaty zostały brutalnie przerwane przez rozwoziciela pizzy, który przywiózł nam ją o 15 minut za wcześnie. Jednak nikt nie protestował tylko w spokoju zabrał się za jedzenie szukając w głowie pomysłu na aplikację, za napisanie której możnaby dostać papierek certyfikowanego inżyniera NetBeans ;)
Po przerwie Piotr Tabor opowiedział o swoim projekcie edytora.



Jak widać momentami nawet prowadzący byli zaciekawieni ;)



Następnie przyszła kolej na omówienie mechanizmu Lookup a później ćwiczenia, na których można było bliżej się z nim poznać.
Przedostatnim punktem było moje króciutkie i nieoficjalne wystąpienie pokazujące pewne komercyjne zastosowanie platformy.
Na ostatnim wykładzie Geertjan opowiadał jak wygląda w platformie "model danych" czyli Nodes API oraz Explorer & Properties API oraz pokazywał to na praktycznym przykładzie.



Kilka słów na temat pierwszego dnia możecie także przeczytać na blogu Geertjana.

Tematyka poruszana na tym szkoleniu praktycznie nie wymagała żadnej specjalistycznej wiedzy. Podstawowa znajomość Javy była w zupełności wystarczająca oby zrozumieć o czym mowa. Pomocna mogła być również znajomość Swinga na poziomie pozwalającym określić czym różni się JPanel o JLabel ;)

PS. Na SUNowskiej stronie JUGów jest ciekawa ankieta. Pytanie: Przez kogo wg Ciebie powinna być reprezentowana społeczność JUG na JavaOne. Jedna z osób wydaje mi znajoma ;)

Jacek Laskowski jawnie - February 27, 2009 09:55 PM
Groovy 1.6, Grails 1.1 RC2, GAnt 1.6.1 i NetBeans 6.7 M2

Na grupie użytkowników Grails pojawiła się wiadomość Petra Hejla Groovy/Grails & NetBeans 6.7 M2:

For those using NetBeans IDE or considering it for Groovy/Grails - NetBeans 6.7 M2 is available. It is important step on way to 6.7 stable. Contains a lot of fixes in Groovy and Grails area and new features as well.

http://bits.netbeans.org/download/6.7/m2/
http://wiki.netbeans.org/NewAndNoteworthyMilestone2NB67
http://blogs.sun.com/phejl/entry/groovy_and_grails_in_netbeans


Właśnie pobieram ostatnią wersję rozwojową NetBeans 6.7 - netbeans-trunk-nightly-200902270313.zip, która zapewne już zawiera więcej zmian w temacie (i nowe błędy również ;-)) z zamiarem ich sprawdzenia. Jeśli informacje na stronie NewAndNoteworthyMilestone2NB67/ Groovy and Grails się potwierdzą, można przypuszczać, że NetBeans IDE 6.7 stanie się TYM wymarzonym IDE dla programistów Grails. Alternatywną może być IntelliJ IDEA 8, ale jak wieść niesie są jakieś problemy ze współpracą z Grails 1.1 RC1 (niestety nie mogę przypomnieć sobie, gdzie to wyczytałem). Ale właśnie, czy wiadomo już, że mamy Grails 1.1 RC1? A na dniach (jutro, 28.02) możemy spodziewać się RC2. Niecierpliwi mogą już zapoznać się ze szkicem Grails 1.1 RC2 Release Notes. Poza tym mamy nowiuteńkie wersje Groovy 1.6 oraz (niezmieniony funkcjonalnie, aczkolwiek przebudowany z nową wersją Groovy 1.6) GAnt 1.6.1.

We wtorek moja prezentacja o Grails na spotkaniu Warszawa JUG - teoretycznie czuję się mocny (2 książki robią swoje), ale prezentacyjnie daleko w polu :( Zdecydowanie za mało praktyki! Zaczynam się stresować?!

Jacek Laskowski jawnie - February 23, 2009 10:02 PM
NetBeans 6.7 zamiast NetBeans 7.0 i Spring Security w 15 minut

Pojawił się komunikat o nowych wersjach NetBeans IDE numerowanych...6.7. Skąd ta zmiana w numeracji? I to jeszcze na mniejszą? A pikanterii dodaje jeszcze przeskok z 6.5 na 6.7. Wyjaśnienia można szukać w komunikacie "Message from the NetBeans Team - Why NetBeans 6.7?", z czego najważniejsze to:

To get innovation and quality improvements out to the community faster, and to have the NetBeans IDE be better aligned with the release schedules of other technologies that it supports, we have decided to concentrate on a series of smaller releases rather than the traditional two big releases per year.

oraz

NetBeans 6.7 is scheduled for release in June 2009. The main features are Maven and Kenai integration, and there are many smaller features that you can read about on the New and Noteworthy page. Java EE 6 support is planned for a future release. NetBeans 6.7 Milestone 2 is due out next week. We encourage you to download the release when it becomes available and to give us your feedback.

Dzięki temu całemu "zamieszaniu" ze zmianą wersji, kilka rzeczy poukładałem sobie w głowie, bo pytanie o wersję pojawiło się po pojawieniu się zgłoszenia Change cluster nb7.0 to nb6.7. Miałem w ten sposób okazję powyjaśniać sobie wiele z pojęć NetBeans, chociażby cluster. Jeśli dobrze rozumiem, pojęcie cluster oznacza zbiór modułów (ang. NBM - NetBeans Modules) w NetBeans (potwierdza to chociażby What is a Cluster?). Już podczas instalacji modułów JavaFX zauważyłem, że w katalogu domowym NetBeans tworzony jest katalog javafx2 (nie mam niestety pojęcia skąd ta dwójka?!). Spodziewałem się jednak, że w takim klastrze nb67 znajdę moduły, a tam...niewiele. Znalazłem jednak pliki graficzne (PNG) dla ekranu powitalnego i logo NetBeans w różnych rozmiarach. Wystarczy zajrzeć do nb6.7/core/locale/core_nb.jar, a w nim do org/netbeans/core/startup, gdzie mamy (zrzut z wersji rozwojowej z 23. stycznia):

 jlaskowski@work /cygdrive/c/apps/netbeans/nb6.7/core/locale
$ jar -tf core_nb.jar org/netbeans/core/startup/
org/netbeans/core/startup/
org/netbeans/core/startup/Bundle_nb.properties
org/netbeans/core/startup/about_nb.png
org/netbeans/core/startup/frame32_nb.gif
org/netbeans/core/startup/frame48_nb.gif
org/netbeans/core/startup/frame_nb.gif
org/netbeans/core/startup/splash_nb.gif
Zamiast zrzutów ekranu, aby umieścić logo lub ekran powitalny NetBeans, można po prostu sięgnąć do odpowiedniego pliku w klastrze nb67.

Dla zainteresowanych tematyką bezpieczeństwa w aplikacjach webowych z użyciem Spring Framework, Spring Security (dawne Acegi) i rozwojowego NetBeans 6.7 zapraszam do lektury artykułu wprowadzającego Proste uwierzytelnianie i autoryzacja w aplikacji webowej ze Spring Security w 15 minut. Kolejny artykuł zaplanowałem z użyciem CAS i LDAP.

Zastanawiam się, czy tego typu wiedzę nie łatwiej byłoby przyswoić w postaci filmu (z Wink czy podobnie). Dla mnie łatwiej byłoby stworzyć film, ale z oczywistych względów nie będzie można go wydrukować. Mam wrażenie, że w tym przypadku oglądanie krótkiego filmu instruktażowego byłoby mniej męczące niż czytanie artykułu ze zrzutami ekranów. Zapraszam do ankiety Czy artykuł z dużą ilością zrzutów ekranów nie powinien być filmem?, w której zbieram głosy przez kolejny tydzień.

Jacek Laskowski jawnie - February 17, 2009 09:51 PM
JavaFX 1.1 z NetBeans 7.0 DEV

Biorę udział w bezpłatnym szkoleniu z JavaFX - "Free" 15-Week JavaFX Programming (with Passion!) Online Course (tak przy okazji, to wciąż można się zapisać) i wiele się mówi o NetBeans IDE 6.5 jako środowisku programistycznym dla JavaFX. Mnie jednak 6.5 nie wystarczy i postanowiłem spróbować JavaFX z rozwojową wersją NetBeans 7.0 DEV.

Niestety wszystkie instrukcje instalacji wtyczek (modułów) JavaFX w NetBeans IDE, jakie udało mi się znaleźć dotyczą wersji 6.5 i niestety nie mają zastosowania dla 7.0, gdyż moduły JavaFX nie istnieją w domyślnie zdefiniowanych repozytoriach modułów NetBeans 7. Okazuje się, że nie jest to wcale jakieś wyrafinowane zadanie i co więcej wszystko zdaje się działać (podkreślam słowo "zdaje", gdyż moja znajomość JavaFX sprowadziła się do popróbowania się z kilkoma niewielkimi funkcjonalnie skryptami).

Zakładam, że NetBeans IDE 7.0 DEV jest już gotowe do użycia (=rozpakowane).

Wybieramy menu Tools > Plugins.


W okienku dialogowym Plugins wybieramy zakładkę Settings, gdzie definiujemy nowe repozytorium modułów (centrum aktualizacji, ang. Update Center) - NetBeans 6.5 Updates pod adresem http://updates.netbeans.org/netbeans/updates/6.5/uc/final/stable/catalog.xml.gz. To jest dokładnie to samo repozytorium, które jest domyślnie dostępne w NetBeans 6.5.


Wciskamy przycisk OK. Na liście centrów aktualizacji powinny być teraz 3 pozycje, w tym jedna nasza.


Przechodzimy do zakładki Available Plugins i w polu Search (prawy górny róg) wpisujemy javafx.


Wybieramy wszystkie 3 moduły i wciskamy przycisk Install (dolny lewy róg).

Po (dłuższej) chwili moduły zostaną zainstalowane i zostaniemy poproszeni o ponowne uruchomienie NetBeansa. Oczywiście zgadzamy się.

Z zainstalowanymi modułami JavaFX wystarczy Ctrl+Shift+N i wybieramy odpowiedni rodzaj projektu JavaFX. Przeczytałem Lesson 1: Getting Started with JavaFX Script, sprawdziłem i działa zgodnie z oczekiwaniami. Inne skrypty również działały. Miłego JeFiXowania!

Jacek Laskowski jawnie - January 08, 2009 06:58 AM
Grails w NetBeans IDE 7.0M1

Jakby na życzenie najpierw przypomniałem sobie o darmowym GroovyMag na Developers World, aby później natrafić na dokument Introduction to Groovy, kiedy uruchomiłem NetBeans IDE 7.0M1 (a już miałem rozpocząć poznawanie Grailsów z poziomu IntelliJ IDEA 8.0.1). Chwila lektury Grails Quick Start in NetBeans IDE i nie było co dalej czekać. Pobrałem Grails 1.1-beta2 i stworzyłem swoją pierwszą aplikację grailsową w...2 minuty (!) Dlaczego zabrałem się za Grailsy? Jest to kolejny szkielet aplikacyjny, z tą różnicą, że aplikacje tworzy się w języku skryptowym Groovy. Dużo w nim zapożyczeń z Ruby on Rails (RoR), o którym mówi się, że jest niezwykle intuicyjny, więc łącząc przyjemne z pożytecznym samemu chciałem się przekonać cóż Grailsy mają do zaoferowania i czego można się nauczyć poznając jednocześnie Groovy. Nic wyniosłego poza zwykłą ciekawością.

Ctrl+Shift+N i wybieramy Groovy/Grails Application

aby po chwili mieć gotową aplikację grailsową.

Wcześniej zdefiniowałem GRAILS_HOME i PATH, aby można było wykonywać polecenie grails.

Teraz już tylko Run w menu kontekstowym (menu pod prawym klawiszem myszki)

i pojawia się okienko przeglądarki z aplikacją grailsową

Stworzyłem klasę Book oraz BookControllera zgodnie z instrukcjami w Grails Quick Start in NetBeans IDE. Niestety, nie dane mi było po prostu Run, aby uruchomić aplikację, ale musiałem ją zatrzymać w Services/Servers/Jetty (Gails 1.1-beta2) i wdrożyć ponownie (Run). W końcu pojawiły się zmiany.

a później dokładnie jak opisano w dokumentacji.

Z poziomu NetBeans IDE możemy zainstalować wtyczki grailsowe - menu kontekstowe Grails Plugins... (patrz wyżej).

Jedna jest związana z Apache Wicket, więc już wiem czym się zajmę.

Marek Kliś - różności okołojavowe i nie tylko - December 20, 2008 07:01 PM
Własny komponent na pasku statusu w NetBeans

W jaki sposób dodać coś własnego do paska statusu aplikacji napisanej przy pomocy platformy NetBeans (czyli np do NetBeans IDE)?
W tym celu musimy stworzyć klasę implementującą interfejs StatusLineElementProvider. Interfejs ten definiuje tylko jedną metodę Component getStatusLineElement(). Metoda zwraca komponent, który ma być umieszczony na pasku statusu.
Stwórzmy więc jakiś przykładowy projekt modułu z komponentem dla paska statusu.



Aplikacja ma ustawioną polską platformę dlatego nazwy bibliotek netbeansowych są po polsku. Menu aplikacji po uruchomieniu również. Należy zwrócić uwagę na biblioteki jaki są dodane do modułu MyStatusLine.

W tym przypadku komponentem jest zwykły JPanel z JLabelem (label z jakimś tekstem i ikoną). Po przejściu do źródła klasy StatusLineElement musimy dopisać implementację interfejsu StatusLineElementProvider.


package org.myorg.status;

import java.awt.Component;
import org.openide.awt.StatusLineElementProvider;

public class StatusLineElement extends javax.swing.JPanel implements StatusLineElementProvider {

public StatusLineElement() {
initComponents();
}

public Component getStatusLineElement() {
return this;
}

...

}


Aby nasza aplikacja "dowiedziała" się o nowym komponencie musimy ją o tym poinformować tworząc w katalogu META-INF/services plik o nazwie takiej jak implementowany przez nas interfejs czyli org.openide.awt.StatusLineElementProvider. Treścią tego pliku będzie pełna nazwa klasy implementującej ten interfejs czyli org.myorg.status.StatusLineElement.

Po uruchomieniu aplikacji na pasku powinien znajdować się nasz komponent.

Marek Kliś - różności okołojavowe i nie tylko - December 13, 2008 09:10 PM
Progress API

Progress API jest malutką ale użyteczną biblioteką wchodzącą w skład platformy NetBeans i oferującą programiście dostęp do paska postępu przydatnego przy długich zadaniach wykonywanych w tle.
To co nas będzie interesowało to ProgressHandleFactory oraz ProgressHandle.


public void startMyTask() {
Runnable runnable = new Runnable() {
public void run() {
ProgressHandle handle = ProgressHandleFactory.createHandle(
"Moje długie zadanie");
int count = 57;
handle.start(count);
for(int i = 0; i < count; i++){
      handle.progress(i);
        if(i > (count/2)){
          handle.progress("Połowa zadania już za nami");
          }
          try {
          Thread.sleep(200);
          } catch (InterruptedException ex) {
            Exceptions.printStackTrace(ex);
          }
        }
      handle.finish();
    }
};
(new Thread(runnable)).start();
}

Uruchomienie powyższej metody spowoduje pokazanie się paska postępu w prawym dolnym rogu aplikacji.



Po kliknięciu na pasek postępu możemy zobaczyć także informacje szczegółowe na temat wykonywanego zadania.



handle.start(count) uruchamia pasek postępu informując go z ilu kroków będzie się składać zadanie. handle.progress(i) informuje ile kroków już mamy za sobą, handle.progress("Połowa zadania już za nami") dodaje opis do widoku szczegółowego zadania, handle.finish() kończy i ukrywa pasek.

APIDesign - Blogs - December 12, 2008 09:06 AM
2009: The Year of Annotations

As I noted recently, I see the year 2009 as the year of annotations. The NetBeans project is about to rely on them more heavily. Finally! We've been waiting for that for ages, but finally we can compile with JDK 1.6 JavaC and we can use compile time annotation processors. As a result we can replace our layer based registrations with annotations and benefit from compile type checking, code completion, from having the registrations in the same place as the code that is being registered, etc. Also we can offer our API users simple looking annotations and let associated annotation processors do more advanced and more effective processing. As a result the developers have simple API to deal with, while actual registration hidden behind can be as effective as possible, even at the cost of complexity, but without compromises to reliability (as the complexity is kept in the processing infrastructure, not exposed to API users).

The other project related to annotations that we are likely to incorporate during 2009 is our extended use of Annotations for Software Defect Detection. This is heavily based on the JSR 305, yet until it is stable we do not want to expose such unstable API to users of our stable APIs (more on that in Chapter 10, in section Beware of Using Other APIs). As such we are going to create our own annotations (still recognizable by FindBugs and co.). The hope is that our annotation will stay compatible even if the underlaying JSR 305 slightly changes. Please find our current patch and comment here or in the issue 137437.

Last project that deals with annotations is developed by our editor hints guru Jan Lahoda - its aim is to bring complex refactoring to masses! How? Why? We have observed that using @Deprecated annotation is good hint to help your API users recognize that some part of your API is obsolete and shall no longer be used, however that in no way helps users of your API with converting their code to new, non-deprecated style. We have a solution: Use Code Transformation Annotations! Dear [API] writers, let's adopt these annotations and use them in your API! They are completely standalone (read more), lightweight and we are ready to incorporate feedback of everyone interested in the project. Indeed, my plan is to bring these easy to use and flexible refactorings to NetBeans soon, hopefully for version 7.0.

So these are my three annotation related projects. I find them quite exciting and I cannot wait to see them being used. Annotations are here to simplify life of API users and developers. As soon as we have them, we will have full right to call the year 2009 the year of annotations!

Listen to our podcast or download it.

Name (required):

Website:

Comment:

--JaroslavTulach 09:06, 12 December 2008 (UTC)

Marek Kliś - różności okołojavowe i nie tylko - December 03, 2008 07:47 PM
NetBeans na skróty w edytorze

Chciałbym dzisiaj przybliżyć kilka pomocnych (według mnie) skrótów klawiszowych w edytorze NetBeans.

1. Ctrl+/ dodawanie/usuwanie komentarza z linijek wchodzących w skład zaznaczonego obszaru.

2. Ctrl+E usuwanie linii kodu wchodzących w skład zaznaczonego obszaru. Bez zaznaczenia usunięcie tylko jednej linii.

3. Alt+Shift+Up/Down przesunięcie linii (lub zaznaczonego fragmentu) w górę/dół.

4. Ctrl+Shift+Up/Down skopiowanie linii (lub zaznaczonego fragmentu) powyżej/poniżej.

5. Alt+Insert Generator kodu.



6. Ctrl+R Zmiana nazwy.

7. Ctrl+F3 Szukanie wystąpień słowa.
7a. F3/Shift+F3 Następne/poprzednie wystąpienie szukanego słowa.



8. Alt+F7 Wyszukiwanie użycia metody/zmiennej.



9. Alt+Shift+F Formatowanie kodu.

10. Ctrl+Tab Przełączanie pomiędzy otwartymi edytorami.



11. Shift+Esc Przełączenie aktualnego okna pomiędzy dużym a małym rozmiarem.

12. Ctrl+O Wyszukiwanie klasy do edycji.



13. Ctrl+Q Powrót do ostatnio edytowanego miejsca.

14. Ctrl+Shift+I Dodanie brakujących importów.
14a. Alt+Enter Rozwinięcie menu dla podpowiedzi np dla "żaróweczki".



15. Ctrl+I Wyszukiwanie. Z pola wyszukiwanie mamy możliwość uruchomienia różnych akcji.



16. Ctrl+; Dodanie ";" na końcu linii. Szkoda tylko, że nie sprawdza czy linia jest już zakończona ";".
16a. Ctrl+Shift+; Dodanie ";" na końcu linii, wstawienie nowej linii i przejście na jej początek.

17. Nie jest skrótem klawiszowym. Stanięcie na deklaracji typu zwracanego przez metodę podświetla nam wszystkie możliwie punkty wyjścia z tej metody.



A według Ciebie jakie skróty powinny się jeszcze znaleźć w tym krótkim zestawieniu?

Marek Kliś - różności okołojavowe i nie tylko - November 29, 2008 02:29 PM
Polska platforma NetBeans jeszcze raz czyli problemy z lokalizacją

We wpisie opisałem pojawienie się polskiego tłumaczenia platformy. Wszystko było pięknie tak jak to opisałem do momentu aż nie spróbowałem zrobić wersji dystrybucyjnej aplikacji zbudowanej na polskiej platformie (Build ZIP Distribution). Po rozpakowaniu zipa i uruchomieniu aplikacji okazało się, że polskie menu gdzieś zniknęło. Jak się okazało jest za to odpowiedzialny błąd znany już we wcześniejszej wersji NetBeans'a. Błąd ten dotyczy wszystkich tłumaczeń platformy.
Pozostały mi więc dwie możliwości: albo przy każdym budowaniu aplikacji kopiować pliki z potrzebnymi tłumaczeniami albo napisać zadanie anta które uzupełni zipa za mnie. Wybrałem opcję drugą i okazało się, że zadanie to nie jest tak trudne jak mi się na początku wydawało. W tym celu do pliku build.xml odpowiedzialnego za zadania anta związane z naszym projektem dodałem zadanie "build-localized-zip". Zadanie to dodaje do pliku archiwum (stworzonego w zadaniu build-zip - opis tego zadania znajduje się w pliku harness/suite.xml w katalogu platformy, na której budujemy aplikację) pliki z polskimi tłumaczeniami. Minusem tego rozwiązania jest to, że zostaną dodane wszystkie "polskie" pliki a nie tylko z tych modułów, które wykorzystujemy. Biorąc pod uwagę, że na dzień dzisiejszy przetłumaczona jest tylko część modułów platformy nie powinno to stanowić problemu.


<project name="TestPlatform" basedir="."><br />
    <description>Builds the module suite TestPlatform.</description>
<import file="nbproject/build-impl.xml"/>
<target name="build-localized-zip" depends="clean,build-zip"
description="Zbudowanie polskiej dystrybucji">
        <zip destfile="${dist.dir}/${app.name}.zip" update="true">
            <zipfileset dir="${netbeans.dest.dir}" prefix="${app.name}">
                <include name="**/locale/*_pl.jar"/>
            </zipfileset>
        </zip>
   </target>

</project>


Teraz wystarczy uruchomić nasze nowe zadanie i nowa dystrybucja naszej aplikacji będzie już "uzbrojona" w polskie menu.



Jacek Laskowski jawnie - November 27, 2008 10:43 PM
Niespodzianki NetBeans IDE 6.5

Pojawiła się długooczekiwana wersja NetBeans IDE 6.5. Zawiera wiele ciekawostek, z których najbardziej intryguje mnie wsparcie dla Groovy oraz Grailsów (aczkolwiek jeszcze nie znalazłem czasu, aby się zabrać za tę parkę z jego pomocą). Okazuje się jednak, że niespodzianki NetBeans IDE 6.5 czekają na nas już przy pierwszym uruchomieniu. W prawym, dolnym rogu pojawiła się ikona z chmurką informującą o aktualizacjach. Rządny wrażeń natychmiast podjąłem się ich aplikowania.

Jakież było moje zdumienie, kiedy po zalecanym, ponownym uruchomieniu NetBeans pojawia się komunikat o niemożności uruchomienia kilku z aktualizacji (!)

I to dokładnie o Groovy, który mnie intryguje. Miałbym odpuścić? Nie. Ponowne uruchomienie NetBeans i tym razem pojawia się komunikat o błędzie instalacji kolejnych wtyczek.

Po ręcznej aktualizacji wtyczki Groovy and Grails

za pomocą Help > Check for Updates

wszystko zagrało...chyba.

Już napotkałem jeden z błędów poprawnionych w kolejnych wersjach rozwojowych NetBeans IDE (należących do wersji 7.0), więc znowu przyjdzie mi dokonać aktualizacji, ale żeby już teraz, dzisiaj?! Nie! Poczekam jeszcze chwilę. Zgoda, dłużą chwilę, bo ostatnimi czasy bliżej mi do IntelliJ IDEA 8.0, która zdumiewająco łatwo spełnia moje niewygórowane oczekiwania związane z zarządzaniem projektami mavenowymi i możliwością debuggowania pracy Spring-DM 1.2.0 M2 (właśnie co się pojawił!). Jeszcze do niedawna rozpatrywałem jedynie pracę w Eclipse IDE i NetBeans IDE. Teraz całkowicie zapominam o Eclipse na rzecz IDEA. I wcale mi nie tęskno.

Marek Kliś - różności okołojavowe i nie tylko - November 21, 2008 02:36 PM
Silesia JUG 19.11.2008 - materiały z prelekcji

No i po prelekcji. Marek Goldmann oraz Krzysztof Adamczyk napisali kilka słów na temat tego spotkania.
Jeśli ktoś jest zainteresowany to udostępniam slajdy. Przykładowy projekt postaram się udostępnić w najbliższym czasie tylko muszę go odpowiednio przygotować.
Pozwoliłem sobie również udostępnić slajdy Łukasza Lipki wprowadzające i kończące 2. spotkanie śląskiej grupy użytkowników Javy.
Do zobaczenia więc na następnym spotkaniu, które ma się odbyć w przyszłym tygodniu we wtorek tj. 25.11.2005 o 18:30 w budynku COIGu w Katowicach. Tematem będzie ESB Mule a zaprezentuje go Łukasz.

Marek Kliś - różności okołojavowe i nie tylko - November 19, 2008 11:06 AM
NetBeans w samo południe

Wg oficjalnych informacji premiera wersji 6.5 NetBeans'a ma mieć miejsce jutro tj. 20 listopada. Więc mogę powiedzieć, że zdziwiłem się trochę po wejściu na stronę Download IDE gdy zobaczyłem, że na stronie tej aktualną wersją do ściągnięcia jest właśnie 6.5. I to pomimo tego, że na stronie głównej aktualną wersją jest jeszcze 6.1. Stan ten zaobserwowałem w samo południe.
Więc ściągam czym prędzej żeby na dzisiejszej prezentacji pokazać już oficjalną wersję 6.5.

Marek Kliś - różności okołojavowe i nie tylko - November 17, 2008 08:54 PM
Silesia Java User Group - NetBeans Platform

W najbliższą środę tj. 19.11.2008 będę miał zaszczyt poprowadzić drugie już spotkanie śląskiego JUGu. Tematem będzie oczywiście platforma NetBeans. Będę chciał przedstawić główne zalety używanie platformy tworząc podczas prelekcji od podstaw prostą aplikację.
Może uda się też powiedzieć coś o nowościach w wersji 6.5 NetBeansa, która na dniach ma ujrzeć światło dzienne.
Dla uczestników są przewidziane nagrody. Oprócz licencji IntelliJ IDEA będą jeszcze nagrody niespodzianki ;) Więc jeśli nie dla prowadzącego i dla tematu to dla nagrody na pewno warto się pojawić w Katowicach na ul. Mikołowskiej 100 w budynku COIGu o godzinie 18:30.

Marek Kliś - różności okołojavowe i nie tylko - November 10, 2008 06:12 PM
NetBeans Release Candidate 2 a sprawa polska

Kilka ,a może kilkanaście dni temu (build jest z 2008.10.27) pojawiła się kolejna wersja NetBeans'a kandydująca do końcowego wydania czyli RC2. Jak zapewne Wam wiadomo, wersja 6.5 będzie dostępna także w polskiej wersji językowej. Wszystko to dzięki polskiemu zespołowi tłumaczącemu.
Chcąc zobaczyć jak to wygląda ściągnąłem polską wersję instalacyjną.
Pierwsze wrażenia:

  • niby polska wersja językowa ale cała instalacja przebiega po angielsku.
  • polska wersja NB nadpisała mi linki (na pulpicie i menu Start) do wcześniej zainstalowanej wersji angielskiej (pomimo, że wybrałem dla polskiej wersji inny katalog)
  • na dzień dzisiejszy procent spolszczenia pozostawia jeszcze dużo do życzenia (wiem, wiem... łatwiej narzekać zamiast pomóc w tłumaczeniu;) )




Ale ponoć platforma jest w całości przetłumaczona. Więc czym prędzej założyłem nowy projekt NetBeans Platform Applications. Muszę przyznać, że po uruchomieniu projektu poczułem się mile zaskoczony.



Dopóki IDE nie będzie kompleksowo przetłumaczone postanowiłem wrócić do oryginalnego NetBeans'a a dla przykładowego projektu ustawić, że ma korzystać z nowo zainstalowanej polskiej wersji platformy. W tym celu w menu Tools -> NetBeans Platforms dodałem (Add Platform) jako kolejną platformę polską i we właściwościach projektu wskazałem, że ma z niej korzystać podczas uruchamiania.



Dzięki temu mogę pracować w środowisku które ma wszystkie opcje w jednym języku (w angielskim) a jednocześnie korzystam z wyników pracy polskiej grupy tłumaczeniowej.

Więc nie pozostaje mi nic innego jak podziękować im za ich pracę.

PS. Jeśli chcecie korzystać z polskiej platformy i oryginalnego IDE to lepiej ściągnąć NetBeans'a w spakowanej wersji zip. Zaoszczędzi to nam poprawiania linków po instalacji polskiej wersji.

Jacek Laskowski jawnie - November 01, 2008 10:32 PM
Refleksje po "Poznaj JUnit 4" z Internet MAKER 5/08

Kiedy przeglądałem półkę z czasopismami informatycznymi w kiosku na dworcu Warszawa Centralna (przed podróżą na NetBeans Day 2008 w Gdańsku) niewiele czasopism dotyczyło programowania w Javie - Software Developer's Journal (SDJ) oraz Internet MAKER. Paradoksalnie nie powinienem mieć żadnych trudności z wyborem i chciałbym móc napisać, że padło na SDJ, ale wybrałem (nie pierwszy już raz) Internet MAKERa 5/08 (wrzesień-październik). Jednym z artykułów, który przykuł moją uwagę był "Poznaj JUnit 4 - Wstęp do programowania sterowanego testami" autorstwa Tomasza Gębarowskiego. Zastanawiałem się cóż można napisać nowego o jednym z najbardziej rozpowszechnionym szkielecie aplikacyjny JUnit, czego jeszcze mógłbym nie wiedzieć. W zasadzie, z niewielką nadzieją na coś nowego, zabrałem się za lekturę i...nie żałuję. Chociażby samo poznanie adnotacji @Ignore oraz asercji assertThat (wspartej projektem Hamcrest) rekompensuje "dość obszerne wprowadzenie teoretyczne" (jak raczył zauważyć sam autor!). Poza tym, bardzo podobało mi się przedstawienie projektu JUnit po polsku bez korzystania z żargonu informatycznego (bo czyż Ci, którzy wiedzą jak posługiwać się żargonem informatycznym w stylu "framework" nie zakładają, że rozmówca w ogóle wie, czym jest framework?!). Wielokrotnie jestem pytany o wyjaśnienie działania technologii javowych i jeszcze nigdy nie spotkałem się z niezrozumieniem, kiedy zamiast framework używam szkielet aplikacyjny, czy ziarno zamiast bean. Jakkolwiek użycie "ziarno" zamiast "bean" wymaga porównywalnego nakładu pracy przy wyjaśnieniu, po co i dlaczego dany byt istnieje, to już w przypadku "szkielet aplikacyjny" (zamist "framework") można liczyć na pewne skojarzenia i intuicję rozmówcy. Właśnie dlatego uważam, że tłumaczenie technologii informatycznych korzystając z języka ojczystego adresata ostatecznie bardziej procentuje niż używanie zapożyczeń angielskich (licząc na ich znajomość u niego). Są takowe, których nie da się w prosty sposób zastąpić, jak "debugger", ale jak pokazuje przykład polskiego "logowanie" nawet one wciąż mogą prowadzić do nieporozumień. Jakich?! A proszę mi powiedzieć, o czym autor miał na myśli przy "logowaniu" - uwierzytelnianie (ang. log in/authenticate) czy zapis do dziennika zdarzeń (ang. log). A wracając do artykułu, to bardzo mile zaskoczył mnie język w jakim Tomasz wyjaśniał rolę JUnita w naszym warsztacie javowym. Pojawił się "szkielet aplikacyjny" i "programowanie sterowane testami", ale do czasu. Na 3. stronie artykułu pojawiły się wyjaśnienia w dedykowanych sekcjach (boksach?), gdzie zagościł "framework" i "plugin" przemieszany z "wtyczka", czy "kreator" zamiast "asystent" (czy "pomocnik"). Jakby pisała to już inna osoba (!)
Jako wadę artykułu możnaby nadmienić brak wyjaśnienia zalet programowania opartego o testy. Brak odpowiedzi, dlaczego warto zająć się nimi, przed faktycznym programowaniem samej aplikacji (już przy tym pytaniu widać, że rozróżniam testy od samej aplikacji, co nie twierdzę, że już samo w sobie jest niepoprawne). Mimo, że i testy, i sama aplikacja to wciąż programowanie, zdaje się, że przy tym pierwszym nie mamy tyle przyjemności. A ja pytam dlaczego? Zdaje się, że mimo, że podczas programowania myślimy o tym, co aplikacja ma robić, to po chwili i tak zaczynamy budować aplikację, jak nakazuje dany szkielet aplikacyjny i skupiamy się na niuansach niego samego, zamiast na czas realizować cele projektu (a nie swoje własne, jak poznanie nowego i w danej chwili popularnego szkieletu). Sądzę, że owe skupianie się na zawiłościach środowiska, które samemu sobie nałożyliśmy (również akceptacja zastałego środowiska rozważam w kategoriach świadomego własnego wyboru) przesłania nam faktyczny celu, jakim jest stworzenie działającej aplikacji w terminie. Jest to bodaj najczęstszy powód, dla kolejnego przesunięcia terminu oddania etapu projektu, bo poznanie danego szkieletu aplikacyjnego zabiera więcej czasu niż planowaliśmy (mimo wcześniejszych zapowiedzi, że jest tak prosty, jak tylko było to możliwe) lub posiada błąd, a niestety już nie mamy możliwości wycofać się z tej decyzji projektowej. Brzmi znajomo? Niejednokrotnie przyszło mi uczestniczyć w projekcie, w którym wybierałem co bardziej popularne rozwiązanie (szkielet aplikacyjny, serwer aplikacyjny, język programowania), zamiast sprawdzone czy właściwe. Consuetude altera natura est, co? Niejednokrotnie wybieram w projekcie rozwiązanie efektowniejsze, a nie efektywne. Drobna różnica w słowach, a jakie skutki w projekcie (!) Dlatego też, brakowało mi w artykule jakiegoś scenariusza, w którym byłaby próba przedstawienia wartości płynących z podejścia "najpierw testy" i w ten sposób upewnienie się, że bez względu na inne elementy wspomagające aplikację, np. interfejs użytkownika (aplikacja desktopowa vs webowa z ajaxem czy bez), jej podwaliny biznesowe (trzon aplikacji) ma gwarancję poprawności, tj. zgodności z założeniami. Kiedy mamy poprawnie skonstruowany trzon aplikacji możemy śmiało podejść do jej rozbudowywania i opakowania wymyślnym szkieletem aplikacyjnym, który *uprości* tworzenie wyrafinowanego rodzaju aplikacji. Podkreślam słowo uprości. Wiemy, co i jak mamy działające, ale efekt końcowy, który powali klienta na kolana warto już oprzeć o gotowe rozwiązanie, które spełnia rolę nakładki na już działające "bebechy". Właśnie owa gwarancja poprawności założeń daje nam pewność, że ostatecznie aplikacja w ogóle zaistnieje. Aby dojść do tego etapu, skorzystanie z JUnita (czy innego alternatywnego rozwiązania) wydaje się być kluczem do sukcesu. Skoncentrowanie się na pojedyńczych, wyizolowanych elementach naszej aplikacji sprawia, że "odpukujemy każdą z cegiełek i sprawdzamy, że żadna nie ma wady produkcyjnej". Samemu nie mam w zwyczaju rozrysowywać aplikacji w postaci diagramów UMLowych, na których widać byłoby, co w ogóle robimy, ale dostrzegam ich zaletę (chociażby dla nowoprzybyłych w projekcie). Z zastosowaniem JUnita jest podobnie. Widzimy ich zaletę, ale niewielu z nas (mnie włączając) ma wystarczające zacięcie, aby je wdrożyć. Dlaczego?! Czyżby moda na kolejny szkielet aplikacyjny sprawiała, że zapominamy o faktycznie wartościowej inżynierii programowania, gdzie posiadanie testów jednostkowych w projekcie, znajomość algorytmów ma znaczenie? Nie poświęcam wiele czasu na analizę algorytmów, nie tworzę wielu testów jednostkowych, nie stworzyłem żadnego szkieletu aplikacyjnego, ale mam nieodparte wrażenie, że dobry szkielet aplikacyjny nie obroni się bez testów jednostkowych, odpowiednich algorytmów i dokumentacji, np. w postaci diagramów UMLowych. Chciałbym móc spełnić choć jeden z tych postulatów. Poza kilkoma uwagami odnośnie zalecenia umieszczania testów jednostkowych w dedykowanym pakiecie test, który tym samym pozbawiłby nas możliwości testowania metod package protected, oraz kilku błędach w samej klasie testowej artykuł oceniam wysoko. Na zakończenie (chociaż wydaje się, że dopiero od tego momentu rozpoczyna się) artykułu pojawia się przedstawienie integracji JUnit w środowisku Eclipse IDE. Jakby uwypukleniem niesystematycznego użycia framework vs szkielet czy test-driven development vs programowanie sterowanym testami jest rozdział "Zakończenie". Autor nadmienił, że "tematyka (...) jest niezwykle szeroka i trudno jest przedstawić jej wszystkie założenia w jednym krótkim artykule". Oczekuję kolejnych.

p.s. W trakcie czytania nasunął mi się skrót odpowiadający programowaniu sterowanego testami, aby po prostu nazywać je "testosteronem" (TESTami STEROwaNe programowanie) ;-)

Nie cichną echa zeszłotygodniowej konferencji NetBeans Day 2008 w Poznaniu i Gdańsku. Na stronie głównej java.net Communities pojawiła się zajawka o wpisie na blogu Toniego - NetBeans DreamTeam visit to Poland on the java.net Communities tab + Polish JUGs helped organize these events. Najwyraźniej jest to pierwsza tak nagłośniona międzynarodowo, konferencja javowa w Polsce. Jam tam byłem, miodu i wina nie piłem, ale prezentacje odstawiłem ;-) Więcej w Wrażenia po NetBeans Day 2008 w Gdańsku. Gratulacje dla poznańskiego i gdańskiego JUGa!

Jacek Laskowski jawnie - October 22, 2008 09:08 PM
NetBeans IDE 6.5 RC, NetBeans Decathlon oraz przyszłość Spring-DM i SpringSource dm Server

Ostatnimi dniami, a w zasadzie tygodniami, zaangażowany byłem w projekt-pilota, w którym dwa zewnętrzne systemy z własnymi mechanizmami generowania identyfikatorów zleceń synchronizowane były przez IBM WebSphere Process Server za pomocą usługi wiązania (ang. relationship service). Do tej pory taką integrację wyobrażałem sobie przez zastosowanie odpowiednich adapterów, a tu proszę, wystarczyło oprzeć się o usługi sieciowe (web services), niewielką dawkę programowania w Javie i...hula! Bajka. Ale nie o tym dziś ja (chociaż nie mogłem się opanować, aby nie skrobnąć co nieco, taki jestem zachwycony rezultatami).

Dzisiejszy dzień również obfitował w nowości, których kompletnie się nie spodziewałem. Zacząłem niewinnie od pobrania ostatniej wersji rozwojowej NetBeans IDE 6.5, którego wydanie RC właśnie się pojawiło. Jako (obecnie mniej aktywny) uczestnik programu NetBeans Community Acceptance Test (NetCAT) 6.5 przywykłem do pobierania wersji rozwojowych, ale dla mniej żądnych wrażeń proponuje się skorzystanie z wersji NetBeans IDE 6.5 Release Candidate, a w nim:

The focus of NetBeans IDE 6.5 is simplified and rapid development of web, enterprise, desktop, and mobile applications with PHP, JavaScript, Java, C/C++ , Ruby, and Groovy. New features for 6.5 include a robust IDE for PHP, JavaScript debugging for Firefox and IE, and support for Groovy and Grails. This release also offers a number of enhancements for Java, Ruby and Rails, and C/C++ development. Java feature highlights include: built-in support for Hibernate, Eclipse project import, and compile on save. The Release Candidate improves on the support offered in NetBeans 6.5 Beta.

The final NetBeans IDE 6.5 release is planned for November 2008.


Poza typowymi cechami NetBeans IDE, do których przywykłem i stosuję, moją uwagę przykuło wsparcie dla Groovy i Grails, o którym słyszałem, że jest na przywoitym poziomie (piszę bez entuzjazmu, gdyż samemu nie miałem jeszcze możliwości popróbowania się z tematem). Właśnie nieprzeciętne wsparcie dla Java EE oraz inne elementy, jak wsparcie dla Grails, powodują, że nie jest to narzędzie, koło którego można przejść obojętnie. A jeśli do tego dodać, że NetBeans IDE właśnie skończyło 10 lat i rozpoczęto ogólnoświatową imprezę NetBeans 10th Birthday (aka NetBeans Decathlon), to nie tylko można skończyć projekt krócej (korzystając z funkcjonalności NetBeans), ale również i dobrze na tym "zarobić". Więcej informacji na wspomnianej stronie NetBeans Decathlon. Cała zabawa to jedynie zebranie 50 punktów przez różnego rodzaju aktywność wokół NetBeans i "a limited edition NetBeans 10th Anniversary Shirt" jest Twoja. Moje pierwsze 15 punktów to wzmianka o mojej kolejnej, dzisiejszej niespodziance - wsparciu dla GlassFish v3 "Prelude", w którym można skorzystać z...EJB 3.1! Sądziłem, że wsparcie dla EJB 3.1 to domena Apache OpenEJB, którego wydanie 3.1 jest właśnie głosowane - [VOTE] OpenEJB 3.1 take 1, co, za sprawą NetBeans IDE, okazało się być nieprawdą. Otwieram nowiuteńką rozwojową wersję NetBeans IDE 6.5 i po chwili pojawiła się informacja o nowych aktualizacjach wtyczek.


Zaintrygowała mnie zmiana wersji GlassFish v3 "Prelude" na 1.0. To pierwsza wersja stabilna, więc zaraz zabrałem się za wyszukiwanie o tym informacji. Niedługo trwało, kiedy trafiłem na NetBeans 6.5 Beta is out - GlassFish 'Prelude' included z dnia moich urodzin (!), gdzie w komentarzach znalazłem "I got to know modules for ejb 3.1 and JSF (mojarra) available for V3. For Servlet 3.0, does it have any similar EDR modules available?". "Co?! EJB 3.1 już dostępny w GlassFish v3?!" - pomyślałem. Kolejne wyszukiwanie i trafiłem na EJB 3.1 in GlassFish V3 TP2. Nie pozostaje przyjrzeć się specyfikacji EJB 3.1, która nie tak dawno pojawiła się w wersji EJB 3.1 public review draft. Ech, nie pomyślałem o tym wcześniej, ale nadchodzące moje niedzielne wystąpienie podczas NetBeans Day 2008 w Gdańsku mogło być właśnie o EJB 3.1 i NetBeans. Następnym razem. Sądzę, że moje "Zaawansowane EJB3 z NetBeans 6.5" wciąż może być interesujące i warte rozważenia ;-)

I tak dzień mijał, kiedy trafiłem na ciekawą dyskusję o przyszłości Spring Dynamic Modules (Spring-DM) w kontekście pojawienia się SpringSource dm Server. Czytając dyskusję Spring DM Roadmap, należałoby raczej zająć się rozpoznawaniem produktu SpringSource dm Server niż Spring-DM, który:

"Firstly on a 1.2 release that will fill in the long-promised configuration administration support, making the core programming model feature complete."

oraz

"The 2.0 branch is where we are implementing the OSGi Blueprint Service (RFC 124) that will be part of OSGi R4.2. The Spring DM project will be the RI for this forthcoming specification (which is essentially a standardization of Spring DM + the core Spring beans support)."

i dalej

"So in summary, the future of Spring DM is to move towards becoming an RI for the standardization of the existing DM model, as the OSGi Blueprint Service. The Spring DM project provides an open source (and soon standards-based) programming model for use on any OSGi Service Platform."

Wydaje się, że praca przy Spring-DM wre, ale daje się odczuć kierowanie wysiłków ku SpringSource dm Server, zamiast rozbudowywać Spring-DM, który de facto jest jego składową.

"We will maintain the existing web support in Spring DM, but are not planning to take this any further in terms of significant new features etc. We're running into a law of diminishing returns there in terms of how good an experience we can deliver on a vanilla OSGi Service Platform. This was one of the motivations for creating the dm Server in the first place - to provide the best environment we could for OSGi-based enterprise applications and there are many issues that we can resolve much more easily in the dm Server world. [The SpringSource dm Server is of course also freely available in open source]."

Nie pozostaje nic innego, jak przyjrzeć się SpringSource dm Server i OSGi 4.2 - OSGi RFC 124 ("OSGi Blueprint") przygaszając działalność wokół Spring-DM do niezbędnego minimum.

Marek Kliś - różności okołojavowe i nie tylko - October 21, 2008 08:17 AM
NetBeans + Ecplise = ...

W sobotę (28.08.2008) miałem okazję uczestniczyć w Ecplise DemoCamps w Krakowie. Spotkanie zaliczam do udanych. W drodze powrotnej przypomniał mi się niedawny wpis na blogu Geertjan Wielengi opisujący jak uruchomić aplikację napisaną z wykorzystaniem NetBeans Platform z Eclipsa.
Jako, że ostatnio miałem trochę do czynienia z bardzo fajną biblioteką Visual Library, która wchodzi w skład platformy NetBeans, pomyślałem, że może by spróbować napisać prosty programik w Eclipsie wykorzystujący tą bibliotekę.
Ściągnąłem Visual Library, odpaliłem Eclipsa i zabrałem się do pracy. Okazało się, że tej pracy nie było dużo (wręcz prawie w ogóle).
Po pierwsze stworzyłem panel, na którym miał wylądować edytor graficzny.


package pl.marekklis.graph;

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import org.netbeans.api.visual.graph.GraphScene;

public class GraphTest extends JPanel{

public static void main(String[] args) {
JFrame frame = new JFrame("Graph test");
frame.setMinimumSize(new Dimension(400,300));
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new GraphTest());
frame.pack();
frame.setVisible(true);
}

public GraphTest() {
initComponents();
}

private void initComponents(){
setLayout(new BorderLayout());
JScrollPane scrollPane = new JScrollPane();
add(scrollPane,BorderLayout.CENTER);
GraphScene scene = new GraphSceneImpl();
scrollPane.setViewportView(scene.createView());
add(scene.createSatelliteView(),BorderLayout.WEST);
}

}


Po drugie stworzyłem implementacje GraphScene.


package pl.marekklis.graph;

import java.awt.Point;

import org.netbeans.api.visual.action.ActionFactory;
import org.netbeans.api.visual.action.ConnectProvider;
import org.netbeans.api.visual.action.ConnectorState;
import org.netbeans.api.visual.anchor.AnchorFactory;
import org.netbeans.api.visual.anchor.AnchorShape;
import org.netbeans.api.visual.graph.GraphScene;
import org.netbeans.api.visual.widget.ConnectionWidget;
import org.netbeans.api.visual.widget.LayerWidget;
import org.netbeans.api.visual.widget.Scene;
import org.netbeans.api.visual.widget.Widget;
import org.netbeans.api.visual.widget.general.IconNodeWidget;
import org.openide.util.Utilities;

public class GraphSceneImpl extends GraphScene {

private LayerWidget mainLayer;
private LayerWidget connectionLayer;
private LayerWidget interactionLayer;

public GraphSceneImpl() {
mainLayer = new LayerWidget(this);
connectionLayer = new LayerWidget(this);
interactionLayer = new LayerWidget(this);
addChild(mainLayer);
addChild(connectionLayer);
addChild(interactionLayer);
Widget w1 = addNode("1. węzeł");
w1.setPreferredLocation(new Point(10, 100));
Widget w2 = addNode("2. węzeł");
w2.setPreferredLocation(new Point(100, 250));
Widget w3 = addNode("Jakiś kolejny węzeł");
w3.setPreferredLocation(new Point(250, 250));
Widget w4 = addNode("Jakiś kolejny węzeł");
w4.setPreferredLocation(new Point(250, 350));
getActions().addAction(ActionFactory.createZoomAction());
}

@Override
protected Widget attachNodeWidget(String arg0) {
IconNodeWidget widget = new IconNodeWidget(this);
if (arg0.startsWith("1")) {
widget.setImage(Utilities.loadImage("pl/marekklis/graph/
resources/gr01.png"));
} else if (arg0.startsWith("2")) {
widget.setImage(Utilities.loadImage("pl/marekklis/graph/
resources/gr02.png"));
} else {
widget.setImage(Utilities.loadImage("pl/marekklis/graph/
resources/gr03.png"));
}
widget.getActions().addAction(
ActionFactory.createExtendedConnectAction(
connectionLayer,new MyConnectProvider()));
widget.getActions().addAction(
ActionFactory.createAlignWithMoveAction(
mainLayer, interactionLayer,
ActionFactory.createDefaultAlignWithMoveDecorator()));
widget.setLabel(arg0);
mainLayer.addChild(widget);
return widget;
}

@Override
protected Widget attachEdgeWidget(String arg0) {
return null;
}

@Override
protected void attachEdgeSourceAnchor(
String arg0, String arg1, String arg2) {
}

@Override
protected void attachEdgeTargetAnchor(
String arg0, String arg1, String arg2) {
}

private class MyConnectProvider implements ConnectProvider {

public boolean isSourceWidget(Widget source) {
return source instanceof IconNodeWidget && source != null
? true : false;
}

public ConnectorState isTargetWidget(Widget src, Widget trg) {
return src != trg && trg instanceof IconNodeWidget ?
ConnectorState.ACCEPT : ConnectorState.REJECT;
}

public boolean hasCustomTargetWidgetResolver(Scene arg0) {
return false;
}

public Widget resolveTargetWidget(Scene arg0, Point arg1) {
return null;
}

public void createConnection(Widget source, Widget target) {
ConnectionWidget conn = new ConnectionWidget(
GraphSceneImpl.this);
conn.setTargetAnchorShape(AnchorShape.TRIANGLE_FILLED);
conn.setTargetAnchor(AnchorFactory.
createRectangularAnchor(target));
conn.setSourceAnchor(AnchorFactory.
createRectangularAnchor(source));
connectionLayer.addChild(conn);
}
}
}


I oto efekt:


W naszym okienku mamy działający przykład wykorzystujący Visual Library.

PS. Biblioteki Visual Library nie musimy ściągać gdyż jest ona częścią Netbeansa i znajduje się w katalog_Netbeansa/platform8/modules/.

Jacek Laskowski jawnie - October 07, 2008 09:06 PM
NetBeansowy pracowniks oraz czyszczenie eclipsowego p2

Zainspirowany problemem tworzenia aplikacji ze szkieletem Visual Web JavaServer Faces (vel Woodstock) w dyskusji
Połączyć DataModel z komponentami Visual Web JSF na pl.comp.lang.java po dłuższej przerwie wróciłem do NetBeans IDE. Woodstock jest zbiorem kontrolek do budowania interfejsu użytkownika JSF i w zasadzie spodziewałem się, że wszystko, czego zasmakowałem w "czystym" JSF ma zastosowanie i w nim. Zdaje się, że pomyliłem się w stosunku do kontrolki webuijsf:tableRowGroup, której atrybut sourceData nie akceptuje komponentów typu DataModel (!) Temat opiszę niebawem, ale do napisania tego wpisu skłoniła mnie zabawna sytuacja z generowaniem nazw zmiennych w NetBeans IDE korzystając z Ctrl+SPACJA. Wystarczyło napisać private Pracownik[] i wcisnąć wspomnianą kombinację klawiszy Ctrl+SPACJA i...


Przez moment nie mogłem dojść do ładu, skąd ta nazwa zmiennej - pracowniks. Dopiero po pewnym czasie zorientowałem się, że jest to angielska liczba mnoga dla typu Pracownik z tablicy. Natychmiast pomyślałem o Asteriksie ;-) Ech, tylko do czego użyć typu Asterik?! Może inne śmieszne zmienne?

Kolejną ciekawostkę znalazłem na grupie eclipse.technology.equinox, która dotyczyła działania Equinox p2. W ogóle, ostatnimi czasy o niczym innym się tam nie rozmawia, tylko o p2. Jeśli zaczyna brakować Ci dysku (mimo jego początkowej, niewyobrażalnej wręcz objętości), to może warto zainteresować się katalogiem p2/org.eclipse.equinox.p2.engine/profileRegistry/?

 jlaskowski@work /cygdrive/c/apps/eclipse
$ du -sh p2/
249M p2/

jlaskowski@work /cygdrive/c/apps/eclipse
$ du -sh features/ plugins/
6.8M features/
215M plugins/
Dosyć dużo, nieprawdaż? Okazuje się, że Eclipse uruchamiając p2, wzbudza jakąś tam funkcjonalność, która odkłada we wspomnianym katalogu dość obszerny plik profile. Jakkolwiek planuje się ich wykorzystanie w Eclipse IDE 3.5, to w 3.4 zdają się być niepotrzebne. Zatem wystarczy pozostawić ostatnie 5 najmłodszych plików i zaoszczędzić trochę miejsca.

jlaskowski@work /cygdrive/c/apps/eclipse
$ ls p2/org.eclipse.equinox.p2.engine/profileRegistry/PlatformProfile.profile/ | wc -l
46

jlaskowski@work /cygdrive/c/apps/eclipse
$ cd p2/org.eclipse.equinox.p2.engine/profileRegistry/PlatformProfile.profile

jlaskowski@work /cygdrive/c/apps/eclipse/p2/org.eclipse.equinox.p2.engine/profileRegistry/PlatformProfile.profile
$ ls -t | tail -n +6 | xargs rm

jlaskowski@work /cygdrive/c/apps/eclipse/p2/org.eclipse.equinox.p2.engine/profileRegistry/PlatformProfile.profile
$ du -sh .
27M .
Ja już mam to za sobą.

Jacek Laskowski - Notatnik Projektanta Java EE - August 13, 2008 10:01 PM
Geronimo NetBeans Plugin bogatszy oraz NetBeans IDE 6.5 Beta

Nie powiem, żeby było lekko. Rozwój wtyczki Geronimo NetBeans Plugin (GNP) postępuje, ale idzie jak po przysłowiowej grudzie. Dzisiaj miałem przyjemność rozpoznać w jaki sposób NetBeans współpracuje z wtyczkami dla serwerów aplikacyjnych w kontekście kontekstów aplikacji webowych (powtórzenie zamierzone).

Podczas tworzenia aplikacji webowej wybieramy związany z nią serwer aplikacyjny.

Wybór serwera aplikacyjnego to między innymi związanie bibliotek Java EE dostarczanych przez serwer z projektem. Po prostu programista aplikacji nie musi dbać o ich definiowanie każdorazowo przy jej tworzeniu. Można potraktować związanie serwera z projektem jako definicję bibliotek projektowych oraz środowiska uruchomieniowego (które wyznacza, co można w IDE). Takie podejście nie jest niczym nadzwyczajnym w IDE, czy to będzie NetBeans, czy Eclipse, czy IntelliJ IDEA czy...tutaj nazwa Twojego ulubionego IDE.

Jedną z bolączek ostatnich dni podczas rozwoju wtyczki GNP był brak definicji kontekstu aplikacji webowej. Podczas definiowania projektu aplikacji pole Context Path było wypełnione, ale już po jej stworzeniu we właściwościach projektu było puste (!)

Rozwiązaniem okazało się zdefiniowanie klasy realizującej interfejs org.netbeans.modules.j2ee.deployment.plugins.spi.config.ContextRootConfiguration i stworzenie jej egzemplarzy przez fabrykę realizującą interfejs org.netbeans.modules.j2ee.deployment.plugins.spi.config.ModuleConfigurationFactory, a wskazaną przez plik konfiguracyjny wtyczki - layer.xml (plik jest wskazany przez klucz OpenIDE-Module-Layer w META-INF/MANIFEST.MF). Wystarczyło trochę poszperać w javadoc oraz kodach źródłowych wtyczek do GlassFisha, JBossa i WebSphere Application Server, i wszystko stało się jasne. Jestem bliżej pełnego uruchomienia aplikacji webowej na Geronimo z poziomu NetBeans. Już się nie mogę doczekać. Muszę się jeszcze uzbroić w cierpliwość.

Dzisiejszy dzień jest również świętem dla projektu NetBeans, który opublikował wersję beta NetBeans IDE 6.5 Beta. A w nim:

NetBeans.org is proud to announce the availability of NetBeans IDE 6.5 Beta!

* Download Now
* Learn More
* Tutorials & Documentation

NetBeans IDE 6.5 Beta introduces several new features, including a robust IDE for PHP, JavaScript debugging for Firefox and IE, and support for Groovy and Grails. This release also includes a number of enhancements for Java, Ruby and Rails, and C/C++ development. Java feature highlights include: built-in support for Hibernate, Eclipse project import, and compile on save.


Jest tego trochę, więc zainteresowanych skróceniem czasu w projektach na żmudnym konfigurowaniu szkieletów aplikacyjnych, samych aplikacji i zarządzaniu serwerami aplikacyjnymi zachęcam do popróbowania się z NetBeans IDE 6.5 Beta (skoro jest to wersja BETA należy uważać jakie projekty poddamy próbie - warto zabezpieczyć się zapisując projekt w systemie kontroli wersji, aby nie było niespodzianek).

Dla żyjących na ostrzu technologicznego noża może się przydać odpowiedź na pytanie Which daily build is this equivalent to?:

None.
Beta clone has been created on August 4th. Only imported bug fixes were fixed in the clone - http://www.netbeans.org/issues/buglist.cgi?issue_type=DEFECT&resolution=FIXED&keywords=65_HR_FIX

And the Beta was built from this Beta clone, of course. Therefore it is like build from August 4th + bugfixes + branding.
The daily builds are different. Fixing of issues continues. There were 647 bugs fixed in the trunk from the 8/4 - http://www.netbeans.org/issues/buglist.cgi?issue_type=DEFECT&chfield=resolution&chfieldfrom=2008-08-04&chfieldto=Now&chfieldvalue=FIXED


Znalezione w archiwum grupy dyskusyjnej NetBeans users.

Jacek Laskowski - Notatnik Projektanta Java EE - August 11, 2008 09:07 PM
Klawiszologia NetBeans ponownie, OSGi na JDD 2008 w Krakowie oraz NetBeans Debugger board

Każdego dnia uczestnicząc w pracach NetBeans IDE 6.5 Community Acceptance Testing program (NetCAT) mam możliwość poznawania kolejnych skrótów klawiszowych (pewnie łatwiej byłoby przejrzeć po prostu Keyboard Shortcuts Card dostępne pod głównym menu Help, ale poznawanie przez NetCAT traktuję jako efekt uboczny i nie chcę psuć sobie zabawy). Dzisiaj trafiłem na dwa skróty dotyczące operacji na pojedyńczej linii w edytorze Java - Alt+Shift + Up/Down oraz Ctrl+Shift + Up/Down. Pierwszy z nich - Alt+Shift + Up/Down - przenosi linię, na której znajduje się kursor w górę/dół, natomiast drugi - Ctrl+Shift + Up/Down - kopiuje aktualną linię na górze/dole. Z pewnością istnieją dla nich odpowiedniki eclipsowe, ale niestety nie znam ich, a chciałbym. Kto zlituje się nade mną i pozwoli mi je poznać?

Miałem wstrzymać się z ogłoszeniem tej wiadomości, aż do momentu sfinalizowania programu mojego wystąpienia na tegorocznej edycji Java Developer Day 2008 16 października w Krakowie, ale skoro już podano to do publicznej wiadomości, nie pozostaje mi nic innego, jak zaprosić czytelników Notatnika na mój wykład "Wprowadzenie do OSGi (z Apache Felix, Spring Dynamic Modules (aka Spring-OSGi) oraz GlassFish v3 i IBM WebSphere AS 6.1)", w którym przedstawię czym jest specyfikacja OSGi, jej implementacje oraz środowiska oparte o nią. Postaram się również odpowiedzieć na pytania związane z OSGi, do których zadawania gorąco zapraszam. Organizatorzy JDD przyjęli moją propozycję wystąpienia, co zawsze traktuję jako wyróżnienie. Jeśli chcesz poczuć, co mam na myśli zostało niewiele czasu, aby skorzystać z ceny promocyjnej na konferencję (15 sierpnia upływa kolejna zniżka!). Pora zaplanować 16 października i skorzystać z promocji. Rejestracja trwa.

Dzisiaj dostałem wiadomość do skrzynki o rozpoczęciu programu sprawdzenia użyteczności NetBeans Debugger. Peter Pis w Welcome on NetBeans Debugger board napisał:

Let me welcome you on NetBeans Debugger board. This is the first notification email from interest@debugger.netbeans.org mailing list that confirms you're the NetBeans Debugger Contributor. All details about this program can be found:

http://wiki.netbeans.org/NetBeansDebuggerContributors

Task 1:
Your first task is testing of redesign of multi threaded debugging that has been recently integrated into the standard distribution of the NetBeans IDE 6.5. We are also looking forward to your feedback.

The new multi threaded debugging feature set for NetBeans IDE 6.5 has already been finalized, so the main task for now is multi-threaded debugging testing and quality.

Debugger testing will be launched together with the release of NetBeans IDE 6.5 Beta. Time schedule for the first Debugger Contributor task can be found:

http://qa.netbeans.org/processes/cat/65/index.html


Jeśli jesteś zainteresowany/-a uczestniczeniem w programie zapraszam do grupy - wystarczy "send a blank e-mail to interest-subscribe@debugger.netbeans.org". Na każdego czekają liczne wyróżnienia i nagrody, wliczając:

* direct reporting issues into the IssueZilla via Exception Reporter
* new features and UI specification reviews, evaluation of prototypes
* influence on nominating issues that should be integrated into Patch
updates
* influence on nominating issues that should be fixed before releases
* closer cooperation and keeping in touch with development
* T-shirts


Rozumiem, że może nie być zbyt interesujące ocenianie pracy z NetBeans Debugger, ale posiadanie T-shirt'a jest po prostu obowiązkowe na jesień 2008 ;-)

Jacek Laskowski - Notatnik Projektanta Java EE - August 06, 2008 10:03 PM
Skróty klawiszowe w NetBeans, Geronimo 2.1.2, wolatylność i demo Hibernate Support in the NetBeans IDE

Ostatnie dni spędzam ślęcząc godzinami nad rozwojem wtyczki NetBeans dla Geronimo (GNbP - Geronimo NetBeans Plugin) i każdy dzień to jakaś "ciekawostka". Piszę w cudzysłowiu, bo praca z zarządcami klas (ang. classloader) w NetBeans to jak praca z Ajaxem normalnie "czystym relaksem" (prawdopodobnie w każdym bardziej złożonym środowisku miałbym podobne problemy, więc nie spodziewałbym się wielu ułatwień w tym obszarze, np. w Eclipse czy IntelliJ IDEA). A że nie stworzyłem sobie żadnych testów, to klepię wciąż to samo sprawdzając, czy tym razem jest lepiej. W końcu jest lepiej. Udało mi się w końcu przejść pomyślnie krok uruchomienia i zatrzymania Geronimo oraz dzisiaj uruchomiłem pierwszą aplikację webową (!) Jest jeszcze problem z automatycznym uruchomieniem przeglądarki ze względu na błąd związany z niezdefiniowaną zmienną ${url.client}, ale sama aplikacja jest już poprawnie uruchomiona. Kolejny kamień milowy zaliczony. Jeśli jesteś zainteresowany/-a kodami zapraszam do pobrania projektu z repozytorium SVN - http://svn.apache.org/repos/asf/geronimo/sandbox/geronimo-netbeans-plugin. Chętnie popracowałbym w parze, albo w ogóle w grupie równie zdeterminowanych co i ja (projekt rozpocząłem bodajże 1,5 roku temu, a postępy mierne!) ;-)

Tak sobie siedzę przed tym NetBeans i tak się złożyło, że w zasadzie Eclipse'a nie widziałem już dawno (poza jego komercyjnymi odpowiednikami, jak RAD czy WID). Czym więcej człowiek siedzi w wybranym IDE tym bardziej korci go próbowanie się z dostępnymi skrótami klawiszowymi. W którymś momencie spróbowałem skrótu psvm + TAB i jakie było moje zdumienie, kiedy w klasie pojawił się szablon metody main:

 public static void main(String[] args) {
}
Teraz już łatwo zrozumieć skąd ten skrót - psvm - public static void main. Nigdy nie udało mi się namierzyć tego w Eclipse (przyznaję, że nie poświęciłem temu wiele czasu, więc zapewne stąd nadal brak odpowiedzi). Plus dla NetBeans. Edytor javowy zawsze był domeną Eclipse, ale tym razem NetBeans rulez.

Tak sobie przeglądam kodu źródłowe wtyczek dla GF, WAS, WLS i JBAS w NetBeans i natrafiłem na taką konstrukcję (zmodyfikowaną na potrzeby wtyczki GNbP):
 static {
java.util.logging.Logger.getLogger("org.apache.geronimo.netbeans").setLevel(java.util.logging.Level.FINEST);
java.util.logging.Logger.getLogger("org.apache.geronimo.deployment.plugin.factories").setLevel(java.util.logging.Level.FINEST);
}
Bardzo spodobała mi się owa sztuczka, która polegająca na statycznej konfiguracji poziomu odnotowywanych zdarzeń aplikacji. W ten sposób zapominam o konfiguracji za pomocą jakiegoś tam pliku, gdzieś tam (świadomie podkreślam moją tymczasową niewiedzę, co musiałbym ustawić i gdzie). Po prostu mam gwarancję, że uruchomienie klasy zawierającej ten blok statyczny zapewni mi odpowiedni poziom komunikatów. Trudno mi znaleźć więcej zalet niż chwilowa niewiedza, gdzie umieścić odpowiedni plik konfiguracyjny, ale co tu dużo ukrywać, zachwyciłem się tą konstrukcją. Pewnie nie udałoby mi się odeprzeć zarzutu o braku możliwości zmiany bez kompilacji, co w dobie dynamicznych konfiguracji "w locie" (= w trakcie wykonywania aplikacji) jest nie do przecenienia, ale efekt zachwytu jest. Pomyślałem, aby odnotować tą ciekawostkę. Może się później przyda ponownie i już będę wiedział, gdzie jej szukać.

Kontynuując moją batalię z zawiłościami bardziej zaawansowanej pracy w środowisku NetBeans IDE 6.5 (przypominam, że wciąż w wersji rozwojowej) natrafiłem na kolejny skrót klawiszowy Ctrl+Shift+I, który, w przeciwieństwie do Alt+Shift+I, obsługuje dodanie brakujących importów w całej klasie/interfejsie bez konieczności ustawienia kursora na podkreślonym typie. Napotkałem również Ctrl + F12, czyli eclipsowe Ctrl+O, który otwiera widok na składowe - pola i metody - edytowanego typu (=klasa lub interfejs). A na koniec, już rozochocony moimi znaleziskami, postanowiłem sprawdzić skrót fore + TAB (wstawia szablon pętli for po Enumeration). Działa! I jest również w Eclipse, podobnie jak fori. Ciekawym, ilu z Was korzysta z takich udogodnień w swoim wybranym IDE. I ile z nich jest całkowicie nieintuicyjnych? Nie mogłem wyjść z podziwu, kiedy zobaczyłem z jakim niedowierzaniem i zdumieniem są przyjmowane te i inne sztuczki przez osobę całkowicie niezaznajomioną z nimi, a która dopiero rozpoczynała swoją działalność z Eclipse IDE. Po prostu nie mogła nadziwić się, że tak można (!) Zobaczyć rozradowaną minę kolegi...bezcenne! ;-)

Ja się zabawiam wtyczką GNbP, a tu proszę Apache Geronimo v2.1.2 - Released:

Apache Geronimo v2.1.2 have passed 100% SUN's Java Enterprise Edition 5.0 Certification Test Suite. Refer to Apache Geronimo v2.1.2 Release Notes for further details.

The Apache Geronimo project is pleased to announce the new v2.1.2 release. This release is primarily a maintenance upgrade that pulls together fixes not only for Geronimo but also other key components included in the server. Improvements have been made in the administrative console, GShell command line processing, messages, and numerous other areas. Details of the fixes included can be seen in the Release Notes. Many issues have also been resolved in newer versions of core components that have been included in this Geronimo release. Geronimo v2.1.2 component upgrades include Tomcat 6.0.16, CXF 2.0.8, JavaMail 1.5, MyFaces 1.2.3, WADI 2.0, and Yoko 1.0 among others.


Pierwszym zaskoczeniem był rozmiar paczki, gdzie poprzedni geronimo-jetty6-javaee5-2.1.1-bin.tar.gz to 71,2MB a geronimo-jetty6-javaee5-2.1.2-bin.tar.gz to 68,8MB. Czyżby Geronimo skorzystał z jakieś diety odchudzającej?! Oby nie okazało się, że w tym odchudzaniu zabrakło jakieś funkcjonalności. Okazuje się, że można dodać nowe (patrz Geronimo 2.1.2 Release Notes) i ostatecznie zmniejszyć rozmiar paczki dystrybucyjnej.

Wspominałem już o mojej analizie kodu źródłowego wtyczek NetBeans dla innych serwerów aplikacyjnych. Lektura źródeł zawsze kończy się dla mnie jakąś niespodzianką. Nikt nie mówi, że musi być ona przyjemna, ale tym razem była. Okazuje się, że raczej rzadko stosowana acz kluczowa klasa java.lang.ClassLoader udostępnia statyczną metodę getSystemClassLoader(), która zwraca systemowego zarządcę klas, który jest nadrzędny dla wszystkich nowych zarządców klas. Jest to zazwyczaj zarządca odpowiedzialny za uruchomienie aplikacji. W typowych aplikacjach desktopowych będzie to również zarządca dostępny przez Thread.currentThread().getContextClassLoader(). Co mnie jednak zdumiło w całym tym skomplikowanym świecie zarządców klas to możliwość nadpisania domyślnego zarządcy przez zmienną java.system.class.loader. Niby nic nadzwyczajnego, ale możliwość zdefiniowania własnego rozszerzenia środowiska uruchomieniowego naszych aplikacji javowych daje większe możliwości niż jego nieznajomość. Nawet jak nie wiadomo po co, to warto wiedzieć. A nuż się przyda. Największe jednak zdumienie wywołał fakt, że jest to statyczna metoda, której istnienia w ogóle nie byłem świadom. W zasadzie zaleca się korzystanie z Thread.currentThread().getContextClassLoader() do dynamicznego ładowania klas (co jest szeroko stosowane np. w OSGi), więc wiedza zdaje się być nikłej wartości praktycznej. A może komuś jednak udało się skorzystać z tej metody, albo wręcz z tej zmiennej środowiskowej? Koniecznie się tym należy pochwalić tu i teraz.

Na koniec chciałbym wyrazić swoją dezaprobatę na szastanie naszym językiem we wszystkie możliwe strony i bezkrytycznym naśladowaniem "wyuzdanych" tłumaczeń. Kilka przykładów z szerokiego świata javowego. Nie, nie wspomnę o kontrowersyjnym ziarnie jako odpowiedniku bean, czy szkielecie aplikacyjnym lub rusztowaniu, czy ostatni hit sezonu - stelażu - dla framework, ale o kilku bardziej wyuzdanych. Zacznijmy od customize. Ile to razy wokół mnie pada termin "kastomizacja". Czy nie można po prostu użyć słowa dopaso(wy)wanie?! Czyż nie ładniej brzmi i na pewno wyjaśnia co autor miał na myśli. Pewnie niejeden z nas przez moment miał zawrót głowy od "kastomizacja" czy "kastomizowalny", ale po chwili samemu rozpoczął krucjatę "kastomizacji". Proponuję zaprzestać jego używania raz na zawsze. Zgoda?

Kolejnym kandydatem na ustrzelenie, to nieszczęsne - zaadresowanie problemu jako odpowiednik angielskiej frazy address an issue, czyli obsłużyć problem. Wystarczy więc obsłużyć problem tłumaczeń, aby dopasować jeden język do drugiego i już jesteśmy bardziej rozumiani. W tym samym tonie miałem ostatnio okazję wysłuchania wypowiedzi szefa pewnego TFI na P w TVN CNBC (gość pod krawatem wyprasowany na kanty, gdzie się dało), który użył słowa, które wręcz zdusiło mnie za gardło - wolatylność. Po prostu odjęło mi mowę. Dopiero zaczynam moje potyczki ekonomiczne, ale jeśli mam doświadczać tej nowomowy znanej mi poniekąd z informatyki, to zapewne powinienem zacząć się przyzwyczajać do takich kwiatków? Pewnie Cię zaintrygowało czytelniku cóż może znaczyć owo słowo, więc zapraszam do wspaniałego wyjaśnienia słowa wolatylność w Wademekum LESZCZA !! ( Z PARKIETU). Autor wyjaśnił słowo nad wyraz wspaniale:

WOLATYLNOŚĆ (od ang. volatility) nowomowa ANALI, którzy chcą pokazać, ze obracają się w nie byle jakim towarzystwie. Normalny człowiek powie po prostu zmienność.

ANALe to analitycy rynków kapitałowych. Potrafią przyłożyć, nieprawdaż? W ten sposób zamiast zapraszać odstraszają. Czyż nie doświadczamy tego również i w naszej polskiej rzeczywistości programistycznej, z owymi frameworkami i beanami? Zgoda, szkielet aplikacyjny czy ziarno nie poprawia za bardzo sprawy, ale można liczyć na pewne skojarzenia u rozmówcy, niezaznajomionego z obowiązującą nomenklaturą. Właśnie o to chodzi. Niekoniecznie musi to wyjaśniać temat dokładnie, a wystarczy, aby sugerował znaczenie.

Na zakończenie dla spragnionych wsparcia Hibernate w NetBeans ciekawe demo Hibernate Support in the NetBeans IDE. Nie jest to bardzo wyrafinowane demo, ale pokazuje jak w prosty sposób można szybko stworzyć prototyp aplikacji wizualnie (trochę kodowania też jest, więc nie ma obawy, jeszcze nas nie pozwalniają po wdrożeniu NetBeans IDE w firmach). Pora wygodnie się rozsiąść, założyć ręce za głowę i włączyć prezentację. Warto chociażby dla samej nauki języka i trudnej sztuki prezentacji (jednoczesne kodowanie i mówienie nie należy do łatwych zadań). Zastanawiam się jakim powodzeniem cieszą się takie krótkie filmy-demo w porównaniu z artykułami ze zrzutami ekranów. Lepsze? Gorsze? Mam wrażenie, że ich odbiór jest przyjemniejszy, ale nie można ich wydrukować, i przeczytać w autobusie/metrze, więc jest trochę wad. Jeśli mniej niż zalet, to może warto wdrożyć taką formę prezentacji w Notatniku? Miłego oglądania!

Jacek Laskowski - Notatnik Projektanta Java EE - August 01, 2008 07:35 PM
Urlop na Roztoczu oraz wtyczka NetBeans dla Geronimo

"Każdy ma swój urlop, miałem i ja - na Roztoczu" mógłbym parafrazować słowa pewnej reklamy. Tak, to prawda. Po długim ślęczeniu przed komputerem w końcu nadeszła pora na wymarzony urlop. Żona zafundowała mi rodzinny wyjazd na kilka dni na Lubelszczyznę, a dokładnie na Roztocze w Roztoczańskim Parku Narodowym we wsi Rudka k/Zwierzyńca.

Pierwszy dzień - terenu rozpoznanie. Drugi dzień - od rana kajakiem spływanie (Wieprzem). Trzeciego - spływu kontynuowanie. W międzyczasie wizyta w Zamościu, w którym rodzinie obiecałem wizytę na zamku, który...nie istnieje! Skąd ja wziąłem to przekonanie o zamku?! Sądziłem, że w Zamościu jest zamek, bo to takie historyczne miasto, a tu nic, zero zamków. Mimo wszystko warto było. Odwiedziliśmy bar mleczny przy Rynku Głównym, w którym jedzenie było przepyszne, a na samym Rynku pyszne gofry. W wolnej chwili wylegiwanie na plaży nad jeziorem "Stawy Echo" w samym Parku, przy stanowisku Konika Polskiego. Wszystko okraszone piwem Zwierzyniec za bagatela 4PLN za 0,5L w knajpie (!) Trudno się dziwić skoro browar piwa Zwierzyniec to właśnie miasto Zwierzyniec. Pogoda dopisała, więc wyjazd, mimo, że jedynie 5-dniowy, udał się wspaniale. Bez dostępu do komputera, braku telewizora, ze spaniem po 9 godzin i ciągle na dworze można niesamowicie wypocząć. Polecam! Jako podsumowanie wspaniałego miejsca na wypoczynek niech wystarczy (niewyraźne) zdjęcie z miejscowej lodziarni.

Potrafią rozbawić człowieka, nieprawdaż?! Po drodze na Roztocze (z Warszawy) przejeżdża się przez miasto chrząszcza - Szczebrzeszyn. Teraz, nie tylko potrafię wskazać kolejny Park Narodowy, ale i wiem, gdzie ów słynny Szczebrzeszyn leży. Jako ciekawostkę pobytu w zajeździe "W Starym Kinie" w Rudce codzienny brak Javy rekompensowało mi śniadanie z Mocha Java na ścianie.

Chyba jestem skazany na Javę.

W drodze powrotnej zawitaliśmy do Karczmy "Bida", która mimo swojej nazwy serwowała smakowite dania w porcjach znacząco przewyższających nasze oczekiwania. Przyzwyczajeni do typowych rozmiarów potraw w przydrożnych karczmach trzeba było widzieć nasze miny, kiedy na deser zamówiliśmy placki ziemniaczane i naleśniki, a podano nam zestawy obiadowe. Jedzenie pyszne i to w okazałych ilościach.

Po powrocie przejrzenie poczty, a tam ciekawostka związana z NetBeans IDE 6.5. Co jakiś czas NetBeans 6.5 (w fazie rozwojowej) zaskakuje. A to wsparcie dla nowych typów projektów, a to znaczna poprawa wyświetlania struktury katalogowej projektów podczas ich importu/otwarcia/itp., a tu jeszcze...wsparcie Apache Geronimo przez NetBeans IDE za pomocą wtyczki Geronimo 2 Application Server. Nikt się nie chwalił, nikt nie napisał, niedobrze. Taka funkcjonalność, a tak niewiele reklamy. Czyżby autorowi nie zależało na sprawdzeniu wtyczki w ogólnym użyciu?

Jeszcze nie próbowałem się z nią, ale może ktoś z Was już to zrobił?! Jakie wrażenia? Warto się jej przyjrzeć? Jaka wersja Apache Geronimo jest wspierana? Podobno rozwojowa wersja 2.2 nie jest.

p.s. W trakcie urlopu udało mi się zebrać w sobie i przeczytałem książkę "Bogaty Ojciec, Biedny Ojciec" Roberta T. Kiyosaki'ego. Książka przedstawia prawdy oczywiste na temat naszego podejścia do pieniędzy i pracy, która jest ich głównym źródłem, w bardzo nietypowy sposób. Nawet, jeśli wciąż liczysz, że praca jest dla Ciebie wszystkim, a ZUS zapewni Ci dostatek, warto zapoznać się z nią. Teraz wszędzie wokół mnie widzę tylko pasywa ;-) Pora zabrać się za stronę aktywów. Sugestie mile widziane.

Jacek Laskowski - Notatnik Projektanta Java EE - July 24, 2008 08:07 PM
faces-config.xml podzielony z javax.faces.CONFIG_FILES

Zgodnie ze specyfikacją JavaServer Faces 1.2 (rozdział 10.4.2 Application Startup Behavior, strona 312) podczas uruchamiania aplikacji webowej korzystającej z JSF implementacja JSF wykonuje następujące kroki konfiguracyjne:

  1. (opcjonalnie) sprawdza istnienie definicji servletu javax.faces.webapp.FacesServlet w deskryptorze wdrożenia i w przypadku jego braku może w tym momencie zakończyć pracę
  2. poszukuje META-INF/faces-config.xml we wszystkich zasobach aplikacji webowej (poprzez odpytanie ServletContext o wszystkie dostępne zasoby, jak pliki jar, czy zawartość WEB-INF/classes) i wczytuje je jako plik konfiguracyjny JSF w odwrotnej kolejności do tej zwróconej przez Thread.getContextClassloader().getResources())
  3. sprawdza istnienie parametru kontekstowego javax.faces.CONFIG_FILES, który jest listą plików konfiguracyjnych oddzielonych przecinkiem, a następnie wczytuje je kolejno
  4. sprawdza istnienie pliku /WEB-INF/faces-config.xml w aplikacji webowej
Efekt kroku 2 można zauważyć w sposobie konfiguracji JBoss Seam, gdzie plik jboss-seam.jar zawiera w sobie plik META-INF/faces-config.xml z następującą konfiguracją:
 <?xml version="1.0"?>
<faces-config version="1.2"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">

<factory>
<application-factory>org.jboss.seam.jsf.SeamApplicationFactory</application-factory>
</factory>

<application>
<navigation-handler>org.jboss.seam.jsf.SeamNavigationHandler</navigation-handler>
<view-handler>org.jboss.seam.jsf.SeamViewHandler</view-handler>
<state-manager>org.jboss.seam.jsf.SeamStateManager</state-manager>
<el-resolver>org.jboss.seam.el.SeamELResolver</el-resolver>
<message-bundle>org.jboss.seam.core.SeamResourceBundle</message-bundle>
</application>

<lifecycle>
<phase-listener>org.jboss.seam.jsf.SeamPhaseListener</phase-listener>
</lifecycle>

</faces-config>
gdzie każdy z elementów wpływa na konfigurację naszej aplikacji webowej korzystającej z JBoss Seam (i niewprost z JSF). Przy okazji okazało się, że plik jboss-seam.jar zawiera również plik META-INF/ejb-jar.xml, co określa go również jako moduł EJB.

Najbardziej zaintrygował mnie krok 3, o którym już ktoś mi wcześniej wspominał, jako sposobie na podział rozrastającego się faces-config.xml na mniejsze pliki składowe. Z pewnością zarządzanie mniejszymi plikami jest prostsze, więc możliwość podziału faces-config.xml na mniejsze pliki konfiguracyjne jest wartościową informacją.

Możemy, więc posiadać wiele plików konfiguracyjnych w formacie faces-config.xml, które definiujemy w deskryptorze wdrożenia aplikacji webowej - /WEB-INF/web.xml następująco:
 <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/produkcyjny-faces-config.xml, /WEB-INF/inny-faces-config.xml</param-value>
</context-param>
</web-app>
Daje to ciekawą możliwość nadpisywania konfiguracji, np. produkcyjnej testową lub podobnie, gdzie poszczególne definicje ziaren zarządzanych JSF w produkcyjny-faces-config.xml są nadpisane przez faces-config.xml w katalogu WEB-INF. Po wykonaniu testów funkcjonalnych można po prostu usunąć plik WEB-INF/faces-config.xml i wdrożyć aplikację na właściwe środowisko testowe.

Pozostaje sprawdzenie, czy taki podział konfiguracji JSF jest wspierany przez środowiska programistyczne. Sprawdziłem NetBeans 6.5 i muszę przyznać, że mam dobrą i złą wiadomość. Zacznę od tej złej - jedynie faces-config.xml jest specjalnie traktowany jako plik konfiguracyjny JSF przez edytor PageFlow (pisałem o nim w NetBeans 6 i jego edytor PageFlow do faces-config.xml). Dobra wiadomość jest taka, że tworząc ziarno zarządzane przez asystenta JSF Managed Bean w polu Configuration File widnieją nasze pliki konfiguracyjne JSF.

Nie obyło się bez zgłoszenia kilku błędów odnośnie wsparcia javax.faces.CONFIG_FILES, jak np. Issue #141444 [65cat] Configuration Files without all javax.faces.CONFIG_FILES, gdzie w Configuration Files jedynie wymieniony jest pierwszy z listy plików w javax.faces.CONFIG_FILES oraz faces-config.xml.

Zastanawiam się, jak szeroko stosowana jest owa funkcjonalność JSF podziału pliku konfiguracyjnego faces-config.xml w projektach. Zdarzyło się u Ciebie? Chętnie zapoznałbym się z powodem takiego podziału - łatwość zarządzania, czy coś więcej?

Jacek Laskowski - Notatnik Projektanta Java EE - July 20, 2008 08:49 PM
Zmiany w NetBeans 6.5 nie tylko w harmonogramie, netbeans.keep.expansion oraz ukryte skarby JDK - jps i jstack

Przez długi okres czasu, od 10 lipca, wersja rozwojowa NetBeans IDE 6.5 była niedostępna, aż dopiero 3 dni temu - 17.07 - pojawiła się długooczekiwana nowiuteńka paczka dystrybucyjna netbeans-trunk-nightly-200807170007.zip (można zauważyć, że ponownie mamy przerwę w dziennych paczkach, bo jest 20.07, a wciąż w repozytorium najnowsza wersja to właśnie z 17.07!). Można, więc przysiąć i posprawdzać jego (nie)doskonałości, jednocześnie "zarabiając" kilka punktów w NetCAT 6.5. Tym razem obiecałem sobie, że przyjrzę się Groovy i Grails, których wsparcie jest nadzwyczaj wychwalane przez użytkowników groovy-grailsowych. Jeśli będzie można połączyć to z pracami wokół Korporacyjnej 5-tki z GlassFish v3 (w którym zagościło OSGi) to dlaczego nie poświęcić temu trochę czasu. Nie ma go wiele, więc jeśli go trwonić, to na rzeczy ciekawe, nieprawdaż?! W tym tonie udało mi się zapoznać z Mastering Grails: Build your first Grails application. Bardzo krótki acz treściwy artykuł prezentujący cechy Grailsów, które sprawiają, że programiści javowi nie muszą spoglądać w stronę Ruby on Rails (RoR). Na chwilę obecną wystarczy poznawania Grailsów, ale pytanie o możliwość integracji z innymi rozwiązaniami, np. opartymi o znaczniki JSP, pozostaje. Może ktoś rzucić trochę światła na kwestię integracji rozwiązań typu JSF z Grails? Czy to w ogóle jest porównywalne? Czy integracja ma rację bytu?

Po uruchomieniu NetBeansa pierwsze zaskoczenie - pojawiła się nowa grafika początkowa (ang. splash screen).

Ładniutki, nieprawdaż? Poza tą niefunkcjonalną zmianą, mamy domyślnie otwarty widok Tasks (Ctrl+6).

Zadania określane są przez znane i lubiane TODO, ale również kilka innych adnotacji (patrz Tools > Options > Miscellaneous > ToDo Tasks).

Przy okazji konfiguracji adnotacji dla zadań pojawiło się jedno z moich ulubionych słówek angielskich - miscellaneous. Jest ono o tyle ulubione, że wielu zapytanych nie wie, jak się poprawnie wymawia to słowo (pomijając, że wielu nie wie o jego istnieniu).

W kontekście domyślnego uruchomienia widoku Tasks, sądzę, że w końcu potraktuję swoje TODO w kodzie poważniej, bo przy każdorazowym uruchomieniu ich liczba z pewnością będzie przypominała o ich istnieniu. Zauważyłem pewną zależność między naszymi przyzwyczajeniami a domyślnymi ustawieniami narzędzi używanych na codzień. Wielu z nas zamiast dostosowywać narzędzie do siebie, dostosowuje siebie do niego. A tu proszę, NetBeans postanowił obdarzyć nas narzędziem, które dba o nasze zadania. Teraz może w końcu baczniej przyjrzę się zadaniom do wykonania (TODO) z jego pomocą. Jeszcze nie zastosowałem się do tych "zaleceń", ale już mi się podobają.

Ciekawostka z grupy NetCAT 6.5, której znajomość z pewnością daje poczucie zaawansowanego użycia NetBeans IDE podczas pracy. Jeśli potrzebujemy zachować stan rozwiniętych węzłów w drzewie (dowolnym, np. w oknie Projects będą to projekty i ich zasoby) to wystarczy...więcej w poniższej wiadomości:

On build 5.5 the Project Window remember the state of the node. while now 6.5 it will collapse to the root if we are going to restart the IDE.

This change was made intentionally (I thought earlier than 5.5, but perhaps not) - the reexpansion of the nodes was slowing down startup.

http://www.netbeans.org/issues/show_bug.cgi?id=55701

You should be able to enable the expansion by adding

-J-Dnetbeans.keep.expansion=true

to your netbeans.conf, but note that this mode is not tested.


Kolejną ciekawostką z programu NetCAT 6.5 jest narzędzie jstack, o którym nie miałem w ogóle świadomości istnienia (!) A narządko bardzo ciekawej funkcjonalności, bo prints Java stack traces of Java threads for a given Java process or core file or a remote debug server, czyli dokładnie to, czego w wielu momentach spowolnienia aplikacji javowej potrzebuję. Ni mniej, ni więcej - narzędzie umożliwia zerbanie danych do analizy prac JVM przez wypisanie sterty wywołań javy dla wybranego procesu, z pliku ze zrzutem pamięci (core) czy zdalnego serwera. Więcej o tym i podobnych narzędziach w NetBeans - How to Generate a Thread Dump. Okazuje się, że poza jstack jest również niejaki StackTrace. Teraz jakikolwiek problem wydajnościowy w Javie nie będzie mi straszny. Przy okazji, z dokumentacji jstack dowiedziałem się o kolejnym, nieznanym mi wcześniej, narzędziu jps, który wypisuje identyfikatory procesów javowych, np.:


C:\Documents and Settings\jlaskowski 2008-07-18 12:19:33,98
> C:\apps\java6\bin\jps.exe
32132 org.eclipse.equinox.launcher_1.0.100.v20080509-1800.jar
35188 NetworkServerControl
35684 Main
37884 Jps
30228 PELaunch
Teraz wystarczy podłączyć się do wybranego procesu javowego narzędziem jstack, aby rozeznać się w aktualnej sytuacji o stanie JVM (żeby tak prosto było zdiagnozować problemy w polskiej słuzbie zdrowia, o której tyle ostatnio. Gdybym wiedział numer procesu może mógłbym jakoś pomóc. ;-)):
 C:\Documents and Settings\jlaskowski 2008-07-18 12:21:39,67
> C:\apps\java6\bin\jstack.exe -l 35684
2008-07-18 12:23:57
Full thread dump Java HotSpot(TM) Client VM (10.0-b23 mixed mode):

"Inactive RequestProcessor thread [Was:Default RequestProcessor/org.netbeans.modules.xml.xam.AbstractModelFactory$1]" da
emon prio=2 tid=0x374a1400 nid=0x8100 in Object.wait() [0x3bb4f000..0x3bb4fc14]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:950)
- locked <0x09baa8a0> (a java.lang.Object)

Locked ownable synchronizers:
- None
...
"Finalizer" daemon prio=8 tid=0x31377400 nid=0x8a24 in Object.wait() [0x3184f000..0x3184fa94]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
- locked <0x0549b4e0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

Locked ownable synchronizers:
- None

"Reference Handler" daemon prio=10 tid=0x31376400 nid=0x88b8 in Object.wait() [0x3164f000..0x3164fb14]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:485)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
- locked <0x0549aef0> (a java.lang.ref.Reference$Lock)

Locked ownable synchronizers:
- None

"VM Thread" prio=10 tid=0x31373000 nid=0x7654 runnable

"VM Periodic Task Thread" prio=10 tid=0x3139b400 nid=0x8504 waiting on condition

JNI global references: 2935
Warto zapoznać się z pełną dokumentacją narzędzi dostarczanych w ramach wybranej JVM, np. dla Sun JDK będzie to JDK Tools and Utilities. Nie wszystkie jednak narzędzia dostępne są na wszystkich platformach systemowych, gdyż narzędzia są dostarczane przez dostawcę JVM dla danej platformy, więc dla IBM JDK będzie to inny zestaw narzędzi, często wykraczający poza możliwości Sun JDK.

I wiadomość z ostatniej chwili w temacie zmian w harmonogramie NetCAT 6.5. Przesunęła się data wydania finalnej wersji NetBeans 6.5. Pojawił się niewielki the two weeks slip in the schedule, o którym pisze Jirka Kovalsky (głównodowodzący programu NetCAT 6.5):

Due to postponed Feature Freeze of PHP and GlassFish v3 support and high number of bugs we are forced to update some important milestones. Accordingly I had to adjust some NetCAT 6.5 dates and the new schedule is already published on the NetCAT 6.5 homepage (http://qa.netbeans.org/processes/cat/65)

Nowa wersja NetBeans IDE 6.5 dopiero 15 października. Jest szansa na wyłapanie większości błędów w nim i nauczeniu się kilku nowych szkieletów programistycznych, których wsparcie dostarcza, np. Grails. Gdybym tak mógł poczytać o integracji Grails z usługami dostarczanymi przez serwer Korporacyjnej 5-tki byłoby wspaniale. W połączeniu z OSGi byłbym w ogóle uszczęśliwiony.

Jacek Laskowski - Notatnik Projektanta Java EE - July 18, 2008 09:22 PM
NetBeans 6 i jego edytor PageFlow do faces-config.xml

Pamiętam, że już jakiś czas tematu zastanawiałem się nad zastosowaniem edytora PageFlow do edycji faces-config.xml - główny plik konfiguracyjny aplikacji JavaServer Faces (JSF). Dzisiaj natrafiłem na wpis, który sprowokował mnie do zbadania tego tematu dokładniej. I warto było, bo kolejny temat mam z głowy. W końcu! Czy nie masz takich natarczywych tematów, które trapią Cię od wielu dni/tygodni/miesięcy, ale mimo to nie znalazłeś/-aś czasu, aby go rozwiązać?! Ja mam ich kilka i jeden właśnie zszedł z listy.

Głównym zadaniem edytora PageFlow, który służy do edycji pliku faces-config.xml, jest umożliwienie wprowadzania zmian w regułach nawigacyjnych aplikacji JSF w sposób graficzny bez konieczności grzebania się w zawiłościach pliku XML (cf. Page Flow Editor Functional Specification). Udostępnienie tej funkcjonalności po prostu zdejmuje z użytkownika obowiązek znajomości jego składni. I w zasadzie to jest jego główna i jedyna potrzeba korzystania. Skoro mniej musimy znać, aby poprawnie skonfigurować przepływ między stronami w aplikacji JSF, to właśnie to jest jego zaletą i tego oczekiwałbym od IDE.

Garść informacji o edytorze PageFlow dla faces-config.xml znajduje się w dokumencie PageFlow Editor for NetBeans 6.0 i jakkolwiek dotyczy wersji NetBeans 6.0, to niewiele zmieniło się od tego czasu. Dodatkowych informacji, a w zasadzie zrzutu ekranu, który uzmysławia możliwości PageFlow, można znaleźć we wpisie Net Beans (6.1) Page Flows, ale ponownie zbyt pobieżnie i niewiele. Dopiero podczas lektury tego wpisu zorientowałem się, czego mógłbym faktycznie oczekiwać od PageFlow. Do tej pory moje aplikacje JSF budowane w NetBeans składały się ze zwykłych stron JSP, które zawierały kontrolki JSF. Mówiąc językiem używanych szkieletów webowych, to był to jedynie JavaServer Faces.

Przy takiej konfiguracji PageFlow udostępniał jedynie 3 akcje dla stron JSP.

Zastanawiałem się wciąż po co ten plus po prawej stronie (u góry zakryty przez menu Delete). Kilkakrotnie napotykałem dyskusję dotyczącą Visual Web JavaServer Faces (w skrócie Visual Web) w kontekście budowania aplikacji JSF w NetBeans. Visual Web to zestaw kontrolek JSF, podobnie jak IceFaces, RichFaces, Tomahawk czy Tobago (pewnie jest ich znacznie więcej, ale te mi teraz przychodzą do głowy). Coś mi mówiło, że właśnie tutaj powinienem szukać odpowiedzi. Kiedy dodałem Visual Web JavaServer Faces do kategorii Frameworks we właściwościach projektu projektu JSF strony JSP stworzone jako Visual Web JSF Page były specjalnie traktowane przez NetBeans.

Nadal były stronami JSP, ale poza zmianą wizualną w widoku Projects, która polegała na zmianie ikony związanej ze stronami, do ich edycji mogłem użyć edytora Design, JSP i Java w jednym (czego nie miałem do dyspozycji przy "zwykłych" stronach JSF).

Zmiana również wpłynęła na dostępne menu w PageFlow związane ze stronami typu Visual Web.

Pojawiły się 3 nowe akcje i możliwe stało się wiązanie (tworzenie przepływu/nawigacji) między elementami strony - przycisk (ang. button) jako Add Button, odnośnik (ang. hyperlink) jako Add Hyperlink oraz odnośnik z obrazkiem (ang. image hyperlink) jako Add Image Hyperlink a innymi stronami w aplikacji. Mam wciąż pewne opory przed stosowaniem tego zestawu Visual Web, bo brakuje mi sprawdzenia na ile jest to przenośne między serwerami aplikacyjnymi (np. czy będę mógł uruchomić aplikację zbudowaną z pomocą Visual Web na Apache Geronimo czy WASie) oraz potencjalne problemy podczas integracji z innymi, wspomnianymi wcześniej, zestawami kontrolek JSF. Temat zostawiam do zbadania na później, chyba że ktoś już zna odpowiedź i zechciałby podzielić się wrażeniami.

Ostatecznie PageFlow prezentuje się następująco.

Od razu można zgadnąć, które strony są typu Visual Web, a które "zwykłymi" JSP. I to jest właśnie zagadka na weekend - rozpoznać typy stron na załączonym wyżej zrzucie ekranu. Miłej zabawy!

Jacek Laskowski - Notatnik Projektanta Java EE - July 15, 2008 09:22 PM
Słów kilka o Maven 2 w NetBeans 6.5, Sun Certified NetBeans IDE Specialist oraz "GWT w praktyce" Power Netu

Piotr Pietrzak w komentarzu do Klasyfikatory w Maven 2 oraz polonizacja NetBeans IDE odpowiedział na wczorajsze moje bolączki związane z brakiem funkcjonalności NetBeans IDE odpowiadającej eclipsowej wtyczce do obsługi projektów mavenowych - m2eclipse w postaci...filmu (!) Wspaniała forma dyskusji w Sieci. Wierzę, że będą kolejne. Tylko, dlaczego nie ma głosu?! ;-)

Temat pobrania źródeł do zależności projektu mavenowego w NetBeans sprowadza się do Add local sources pod prawym przyciskiem myszki dla wybranej zależności

bądź po prostu Download All Library Sources na węźle Libraries w projekcie.

Co ciekawe, po pobraniu wszystkich źródeł, nazwy plików udekorowane są ikonką ze słoikiem i pakunkiem.

Natrafiłem przy okazji na inną ciekawostkę związaną ze wsparciem projektów mavenowych przez NetBeans 6.5 we współpracy z wtyczką Mevenide-NetBeans - wsparcie dla edycji pom.xml. Co ja będę się rozpisywał, sam zobacz (tym razem w postaci zrzutów ekranu, ale może kolejnym razem będzie bardziej filmowo?!). W lokalnym repozytorium mam

a w edytorze jako podpowiedź otrzymuję (Ctrl+Spacja)

Miła niespodzianka, chociaż zanim mnie mile zaskoczyło nie mogłem doczekać się zaindeksowania repozytoriów mavenowych. Dobrze, że cała operacja odbyła się w tle.

Podczas moich dzisiejszych wyczynów programistycznych z NetBeans IDE 6.5M1 potrzebowałem otworzyć klasę w projekcie i jako, że nie jest to Eclipse Ctrl+Shift+T nie działa...domyślnie. W takich przypadkach wspieram się zawsze pomocą Google, ale tym razem miałem wszystko pod ręką, lokalnie. Help > Keyboard Shortcuts Card

po którym otwiera się dokument pdf ze skrótami. Wystarczyło Ctrl+F (szukaj), wpisanie ciągu type, <Enter> i mam - Ctrl-O/Alt-Shift-O Go to type/file. Nie mogłem oprzeć się, aby nie sprawdzić, czy funkcjonalność znana mi z Eclipse dostępna jest i w NetBeans - wyszukiwanie typów po ich skrótach, np. NullPointerException to NPE, albo NoClassDefFoundError to NCDFE. To również jest w NetBeans! Miło.

Tylko jedno mi doskwiera teraz - dlaczego eclipsowe Ctrl+O w edytorze Java to Ctrl+Shift+F12 w NetBeans?! Nic nie przychodzi mi do głowy, aby podmienić to jakoś sensownie, ale sądzę, że to jedno z bardziej użytecznych funkcji IDE - wyświetlenie elementów typu i możliwość przejścia do wybranego, więc należy się coś bardziej ludzkiego. Może jednak warto zmienić mapowanie klawiszy na eclipsowe? Mam takie skrzywienie uniksowe, gdzie edytuję pliki w vi, podczas gdy na linii komend korzystam z trybu Emacs. Pewnie podobnie będzie z klawiaturą w NetBeans. Jak się człowiek do czegoś przyzwyczai, to trudno mu się oderwać od tego.

Na grupie NetCAT 6.5 Jirka (głównodowodzący programem) poprosił o ocenę przygotowywanego certyfikatu Sun Certified NetBeans IDE Specialist. Czy uważacie, że istnieje faktycznie potrzeba na Sun Certified Netbeans IDE Specialist? Co ono miałoby certyfikować?! Znajomość skrótów klawiszowych? Pozycji menu? A co w przypadku pracy z tłumaczonym środowiskiem? Możesz wyrazić swój głos w ankiecie Sun Certified NetBeans IDE Specialist. Miło zostałem zaskoczony zakresem egzaminu i uważam, że będzie doskonałym sprawdzianem poprawnego użycia NetBeans IDE jako środowiska pracy. Ciekawe, kiedy można oczekiwać odpowiedzi zespołu Eclipse. Fajne takie SCeNBIS oraz ECIS ;-)

Na koniec wiadomość z ostatniej chwili - pojawiła się ciekawa oferta na półce wydawnictwa Power Net - GWT w praktyce autorstwa Roberta Coopera oraz Charles'a Collinsa. Książka została przetłumaczona przez Marcina Leszczyńskiego, który znalazł swoje miejsce w podziękowaniach w wersji angielskiej (!) I ja przyłączam się do podziękowań za podjęcie trudu przetłumaczenia książki na polski. Wbrew panującemu obyczajowi na polskim rynku wydawniczym literatury informatycznej, tłumaczenie pojawiło się 2 miesiące po premierze angielskojęzycznej. Najwyraźniej można, jak się chce. Niedawno miałem okazję ponownie powalczyć z GWT i przymierzałem się do oryginalnej wersji książki, ale skoro jest dostępne polskie tłumaczenie, dlaczego nie zacząć lektury właśnie od niej? Jako rozgrzewkę można zabrać się za lekturę przykładowego rozdziału, który jest dostępny na stronie książki. Najwyraźniej Power Net zaczyna stanowić ciekawą alternatywę dla innych wydawnictw informatycznych z coraz to znaczącymi tłumaczeniami. Gratulacje!

Jacek Laskowski - Notatnik Projektanta Java EE - July 14, 2008 09:51 PM
Klasyfikatory w Maven 2 oraz polonizacja NetBeans IDE

Już jakiś czas minął od zgłoszenia usprawnienia związanego z niedostępnością dokumentacji javadoc w dystrybucji Apache Wicket (WICKET-1587 Include javadoc in the distro). Okazało się, że właśnie dzisiaj zamknięto moje zgłoszenie jako Duplicate ze wskazaniem na kolejne zgłoszenie WICKET-543 need javadocs embedded in the Wicket 1.3 zip file. W WICKET-543 zgłoszenie kończy się wskazaniem na plik dokumentacji w publicznym repozytorium mavenowym Wicketa - http://repo1.maven.org/maven2/org/apache/wicket/wicket. Wystarczy, więc pobrać dokumentację javadoc (lub jeszcze lepiej kodów źródłowych, które są tam również umieszczone) i sprawa wydaje się zamknięta.

W/g mnie nie rozwiązuje to głównego problemu niedostępności dokumentacji w samej paczce dystrybucyjnej Wicketa, bo nie wszyscy przecież korzystają z Mavena do zarządzania projektami, a nawet pracując z nim można nie zorientować się, gdzie jest dostępna dokumentacja do pobrania. Może jest to jednak efekt "nowych" czasów, gdzie jeśli nie korzystasz z Mavena toś...i tu należałoby umieścić coś niestosownego, bo przecież każdy wie jak z niego korzystać, albo jak pobrać plik z jego repozytorium. Nieprawdaż?! Ja jednak należę do tych (nie)szczęśników, którzy zazwyczaj pracują z Mavenem, jeśli idzie o zestawianie projektów poza IDE, więc mogę przychylić się do tego rozwiązania jako satysfakcjonujące. W Eclipse dostępna jest wtyczka m2eclipse, która umożliwia pobranie źródeł dla zadanych zależności (Maven > Download Sources), ale już w NetBeans mimo, dostępności wtyczki Mavenide-NetBeans, nie znalazłem podobnej funkcjonalności. Pozostaje rozpoznać temat z poziomu linii poleceń i zdefiniować odpowiednie polecenie dla NetBeans, bądź innego IDE w użyciu, jeśli dedykowane menu nie istnieje.

Rozróżnienie artefaktów pochodzących z pojedyńczego projektu (modułu) odbywa się z użyciem klasyfikatora (ang. classifier), które jest kolejnym elementem rozróżniania artefaktów w Maven 2 zgodnie z zasadą nazewniczą przedstawioną w rozdziale POM Relationships. Najbardziej powszechnym użyciem klasyfikatora to wskazanie pliku z dokumentacją javadoc (klasyfikator: javadoc) oraz źródłami (klasyfikator: sources). Deklaracja zależności w projekcie mavenowym odbywa się w pliku pom.xml, np.:

 <dependencies>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket</artifactId>
<version>1.4-m3</version>
</dependency>
</dependencies>
i dotyczy zazwyczaj artefaktów, które są plikami jar (domyślna wartość dla elementu dependency/type to jar) z pustym klasyfikatorem. Wskazanie na zasób (artefakt) o klasyfikatorze javadoc wymaga skorzystania z elementu classifier z wartością javadoc. Pytanie, które należy w tym momencie zadać, to przypadek użycia, w którym chcielibyśmy skorzystać z możliwości zadeklarowania zależności projektu od klasyfikatora javadoc czy sources (pozostałe klasyfikatory pozostawiam do własnego przemyślenia). Dla przypadku wyłącznego pobrania javadoc czy źródeł z centralnego repozytorium Mavena korzysta się z pomocy dodatkowego parametru konfiguracyjnego wtyczki, która umożliwia skorzystanie z danego typu klasyfikatora (udostępnia rozwiązanie przypadku użycia, w którym dany klasyfikator gra znaczącą rolę).

Weźmy jako przykład pracę z javadoc. Jeśli chciałbym skorzystać z javadoc do umieszczenia jej w dystrybucji mojego projektu skorzystam z wtyczki maven-assembly-plugin, która potrafi "złożyć" plik wynikowy paczki dystrybucyjnej projektu, potencjalnie z dołączeniem dokumentacji javadoc dla wybranej zależności. W przypadku korzystania z dokumentacji javadoc czy źródeł w środowisku Eclipse wtyczka maven-eclipse-plugin generująca definicję projektu eclipsowego na podstawie pom.xml pozwala na określenie wymagania podpięcia javadoc czy źródeł do projektu - parametry -DdownloadJavadocs=true i -DdownloadSources=true, odpowiednio (patrz Attach Library Sources and Javadocs).

Wniosek jest jeden: w zależności od wymagań zazwyczaj nie przyjdzie Tobie skorzystanie z artefaktu o zadanym klasyfikatorze bezpośrednio, a raczej pośrednio, poprzez zależność w pom.xml czy konfigurację wtyczki. Jeśli jednak potrzebujemy pobrać pojedyńczy plik z repozytorium mavenowego, np. z dokumentacją javadoc, wystarczy skorzystać z wget czy podobnego narzędzia. To jednak sprowadza temat do bardzo znanej i lubianej kwestii doboru właściwego narzędzia do danego zadania. Kwesię obsługi javadoc w projekcie mavenowym zdaje się, że mam(y) rozwiązaną.

Kiedy teraz przyjdzie mi pracować z projektem mavenowym w środowisku Eclipse bez pomocy wtyczki m2eclipse wystarczy uruchomić polecenie
 mvn eclipse:eclipse -DdownloadSources=true  -DdownloadJavadocs=true
i zaimportować projekt, aby móc cieszyć się z pomocy kontekstowej javadoc oraz możliwości przejścia do kodów źródłowych dla klas zależności projektowej. Warto było zgłosić usprawnienie do Wicketa, aby w końcu rozpoznać to wszystko. Teraz już wszystko powinno być jasne.

Od kilku dobrych miesięcy trwają prace nad polonizacją NetBeans IDE 6. Prace trwają i mimo nadchodzącej wersji NetBeans IDE 6.5 (od 14-tego rozpoczynają się prace w NetCAT 6.5), wciąż nie ma produkcyjnej wersji NetBeans w języku polskim. Jeśli jesteś zainteresowany/-a posiadaniem spolszczonego NetBeansa i chciał(a)byś mieć swój udział w projekcie tłumaczenia przyłącz się do zespołu polonizującego NetBeans. Proponuję zacząć już dzisiaj.

Jacek Laskowski - Notatnik Projektanta Java EE - July 11, 2008 09:45 PM
Zaproszenie do NetCAT 6.5 oraz NetBeans Dream Team jednego dnia

Dzisiaj spędziłem czas w cieniu rozpracowania zawiłości IBM WebSphere Application Server 6.1 i przyznaję, że wymagający klient, dociekający każdej funkcjonalności serwera aplikacyjnego, to skarb, który należy pielęgnować i dbać o niego z całych sił. Jakby przeciwieństwo powszechnego przekonania, że klient to wróg numer jeden, a właśnie to, co powoduje, że owych "szkodników" (aka klientów) tak nie lubimy, jest właśnie tym, co sprawia, że zgłębiamy temat intensywniej i stajemy się technicznie bardziej zaawansowanymi. Mam przyjemność pracować z dwoma warszawskimi klientami, którzy faktycznie wykorzystują każdy element WASa i IBM WebSphere Process Server 6.0.2 w ich najdrobniejszych szczegółach i jeszcze nie było dnia, abym nie dowiedział się czegoś nowego. Zabawy co nie miara!

Tym bardziej ucieszyłem się, kiedy zaglądając do mojej skrzynki pocztowej miałem możliwość przeczytania dwóch zaproszeń z całkiem innej półki - NetBeans.

Pierwsze z nich to zaproszenie do programu NetCAT 6.5:

Welcome to the NetCAT 6.5 program!

Dear NetCAT 6.5 applicant,

Congratulations! You have been selected to participate in the NetBeans 6.5 Community Acceptance Testing program. The response to the program announcement was very high again and the selection process was difficult at best, but your experience and testing offer met our selection criteria.

On _July 14th_ you will be automatically subscribed to netcat@netbeans.org alias and receive further information regarding your testing activites. This mailing list will be the main communication channel for NetCAT 6.5 program and in this regard we would like to ask you to read and adhere to our NetCAT Etiquette [1].

[1] http://qa.netbeans.org/processes/cat/65/etiquette.html

Your feedback is important to us and we hope that you will be an active member of the NetCAT 6.5 team. Thanks again for your interest in improving NetBeans and welcome aboard!

Best regards,
--
Jiri Kovalsky
NetCAT 6.5 Program Coordinator
http://qa.netbeans.org/processes/cat/65/index.html


Drugie zaproszenie to jeszcze większa niespodzianka - zaproszenie do grupy NetBeans Dream Team.

You are formally invited to join the NetBeans Dream Team

Hello and congratulations,

You are invited to join the NetBeans Dream Team. Please read more about us at:
http://wiki.netbeans.org/NetBeansDreamTeam

You were selected using the process located at:
http://wiki.netbeans.org/NBDTNewMemberRules

You are obviously not required to become a member, but we have recognized your contributions within the NetBeans community, and would like to formally invite you to join our group.

You may read more about our mission at:
http://wiki.netbeans.org/DTMissionStatementAndProcess

and some things we would like to work on at:
http://wiki.netbeans.org/NetbeansDreamTeamIdeasAndProjects

We sincerely hope you accept this invitation and we look forward to working with you to make our NetBeans community better.

Below we have provided some preliminary introductory questions for you to provide answers to the current members. This will help us get to know you better. Please respond with the answers, and if you accept this invitation we will get you setup within our infrastructure. If you choose not to accept at this time, we do hope you'll consider us in the future, and thank you for your contributions:

1) Do you accept this invitation? (if not, then please do not feel obligated to answer the other questions, and thank you for your attention)

2) What is your name?

3) What is your netbeans user ID? This helps us see your issues in IZ and other community contributions.

4) Where do you live?

5) What are some interesting things about you: hobbies, family, etc?

6) What are your favorite NB features?

7) What are some interesting features you would like to add to the IDE?

8) Are you a NetBeans RCP/Platform developer/user?

9) What are some interesting features you would like to add to the RCP/Platform (if a user)?

10) What do you like most about the NetBeans community?

11) What are some things you would most like to change in the NetBeans community?

12) What are some other open-source communities you are involved?

13) What are your blog and home page addresses?

14) What email address should the Dream Team use to contact you? (this email address will also be used to sign you up to the Dream Team mailing list, Yahoo Tech Group, etc)

Thank you for your attention,

Wade Chandler

==================
Wade Chandler, CCE
Software Engineer and Developer, Certified Forensic Computer Examiner, NetBeans Dream Team Member, and NetBeans Board Member
http://www.certified-computer-examiner.com
http://wiki.netbeans.org/wiki/view/NetBeansDreamTeam
http://www.netbeans.org


Nic dodać, nic ująć. Dzisiejszy dzień przebiegł niezwykle interesująco. Z wyróżnieniami przychodzą obowiązki, jak stwierdził kolega Marcin, a z nowymi obowiązkami nowe doświadczenia, więc zabawa wciąż trwa. Może w końcu uda mi się zabrać ponownie za tą wtyczkę NetBeans dla Apache Geronimo?! Są chętni mi pomóc? Z wielkim entuzjazmem przyjąłbym nawet najmniejszą pomoc.

Jacek Laskowski - Notatnik Projektanta Java EE - July 09, 2008 10:17 PM
NetBeans IDE 6.5M1 dostępny i algorytmiczna oferta pracy z Mój Startup

Niektórzy mają wakacje, jeszcze niektórym zechciało się pisać wpisy na blogu, a jeszcze niektórzy robią coś pożytecznego i wytrwale programują. W zespole NetBeans praca zdaje się, że wre na całego, czego dowodem jest kolejna wersja NetBeans IDE. Jeszcze nie ostygła wersja 6.1, a już mamy NetBeans IDE 6.5 Milestone 1 (NetBeans IDE 6.5M1). Wspominałem o programie NetBeans Community Acceptance Test (NetCAT) dotyczącym wersji 6.5 w Umiędzynarodowienie w JBoss Seam, NetCAT 6.5 oraz nowa grupa oferty-pracy-java, w którym można wyrazić swoją opinię o tym wydaniu i...jeszcze zgarnąć nagrodę (poza sławą i chwałą). Nie pozostaje nic innego, jak tylko przyłączyć się do zespołu NetCAT 6.5 i wyrazić, co człowiekowi leży na sercu, w kontekście tego wydania (inne sprawy sercowe nie są obsługiwane ;-)) Pewnie nie dla wszystkich jest to The only IDE you need! (za reklamą NetBeans IDE 6.5). W ogłoszeniu napisano:

This stabilized development build contains the following new & noteworthy features:

  • PHP
    • Enhanced Code Completion
    • Database-related code snippets
    • Multiple project configurations
    • Find Usages
  • Ajax
    • JavaScript Debugger
    • JavaScript Library Manager
    • Bundled JavaScript Libraries
  • Groovy
    • Editor
    • Java SE Project Integration
    • Grails support
  • Java
    • Javadoc Anlyzer
    • Call Hierarchy
    • CamelCase code completion
  • Debugger
    • New Multithreaded Debugging Support
    • Debugging Window
    • Current Thread Chooser
  • Additional enhancements have been made to
    • Web Frameworks (Spring, Hibernate, JSF, JSF CRUD Generator, JPA)
    • Ruby
    • Database
    • Mobility
    • GUI Builder
    • Web Services
    • Improvements to XML and Schema Tools
Note: The UML feature is not available in Milestone 1, but is planned for Beta. The development team is migrating UML to the NetBeans Visual Library, to make UML completely open source. Please see UML Current Projects for additional information.

Get more details about these features and additional New and Noteworthy Features http://wiki.netbeans.org/NewAndNoteWorthy available in the release. The final NetBeans IDE 6.5 release is planned for Fall 2008. We welcome and encourage feedback about your experience using the NetBeans IDE.

Bardzo imponująca lista funkcjonalności, nieprawdaż?

Jestem stałym czytelnikiem bloga Mój Startup, w którym pojawiła się niezwykle ciekawie przedstawiona oferta pracy dla programisty java zawierająca zadanko na znajomość algorytmiki. Ciekawym Waszych rozwiązań.

Napisz funkcję (w dowolnym języku programowania), która mają tablicę o długości N zawierającą liczby z zakresu 1 do N stwierdzi, czy występują w niej duplikaty (czy da się to rozwiązać w czasie liniowym? przy stałej pamięci? bez niszczenia zawartości tablicy?)

Czas liniowy jak najbardziej (współczynniki kosztów poszczególnych algorytmów będą różne), stała pamięć jak najbardziej zakładając, że N jest dowolne acz ustalone przed uruchomieniem (tutaj może pojawić się klucz do zmniejszenia kosztu) i ostatecznie nie niszczymy zawartości tablicy, gdyż tworzymy jej kopię gwarantując, że jej rozmiar nie będzie zależny od rozmiaru danych wejściowych (gwarancja algorytmu w miejscu). Czas napisania takiego algorytmu sądzę, że udałoby się zamknąć w 15 minutach. Są chętni do podjęcia pracy? Nawet, jeśli niekoniecznie samej pracy, to może samego zadania? Bardzo spodobała mi się tak przedstawiona oferta pracy. Gratuluję pomysłu. Sądzę, że może być ich więcej na dopiero co założonej grupie oferty-pracy-java, gdzie tego typu oferty powinny być normą. Czyżby nowa jakość na polskim rynku ofert pracy?!

Jacek Laskowski - Notatnik Projektanta Java EE - July 02, 2008 10:46 PM
Umiędzynarodowienie w JBoss Seam, NetCAT 6.5 oraz nowa grupa oferty-pracy-java

W końcu natrafiłem na notkę odnośnie roli seam.properties w aplikacji w książce Beginning JBoss® Seam: From Novice to Professional wydawnictwa Apress oraz gdzieś w Sieci. Cała magia seam.properties to przede wszystkim oznaczenie archiwum WAR lub JAR jako zawierające komponenty seamowe i stąd konieczność umieszczenia go w /WEB-INF/classes w aplikacji webowej, aby Seam zechciał rozważyć przeszukiwanie aplikacji w celu "namierzenia" klas oznaczonych adnotacją @Name. Plik seam.properties może być całkowicie pusty - wystarczy jego istnienie. Trudno jednak zrozumieć, dlaczego umieszczenie definicji komponentów w components.xml działa, a już przeszukiwanie ich w archiwum nie. Czyż Seam nie dowiedział się właśnie poprzez plik components.xml, że ma do czynienia z aplikacją seamową?! Na chwilę obecną nie zamierzam zaglądać do kodu źródłowego, ale pewnie tam należałoby szukać odpowiedzi. Chętni?! ;-)

Dzisiaj na tapetę poszedł temat umiędzynarodowienia aplikacji seamowej (przypomina mi się temat Umiędzynarodowienie w Apache Wicket i trochę ckni mi się do Wicketa i możliwości jego uruchomienia na OSGi). Temat umiędzynarodowienia aplikacji korzystającej z JavaServer Faces był już przeze mnie przedstawiany w artykułach requiredMessage i resource-bundle - udoskonalona kontrola komunikatów w JSF 1.2, Uruchamiamy pierwszą aplikację w technologii JavaServer Faces, Tworzenie aplikacji z JavaServer Faces, Apache Maven i Apache Geronimo czy JavaServer Faces i Spring Framework w parze z Apache Maven i Apache Geronimo. Wszystkie dotykają tematu użycia message-bundle w faces-config.xml, kontrolki <f:loadBundle> na stronie JSF, gdzie korzysta się z tłumaczeń oraz wskazanie na niego z danego pliku tłumaczeń - #{komunikaty['wprowadz_imie']}. Jest tego trochę do zapamiętania, co Seam zauważalnie skrócił.

Pierwsza różnica między "czystą" (nieseamową) aplikacją JSF a opartą o Seama to założenie, że wszystkie pliki properties z tłumaczeniami składają się na jedną mapę messages klucz-tłumaczenie. W przypadku JSF mamy mapę per plik tłumaczeń. Kolejna zmiana to zniesienie obowiązku definiowania plików tłumaczeń w faces-config.xml - obowiązkowym pliku konfiguracyjnym każdej aplikacji opartej o JSF. I na koniec podsumowania różnic, Seam znosi obowiązek deklarowania użycia pliku tłumaczeń za pomocą <f:loadBundle>. Z Seamem wystarczy utworzyć pojedyńczy plik messages.properties dla wybranych języków i użyć konstrukcji #{messages['klucz']} w dowolnym miejscu strony JSF. Oczywiście istnieje możliwość zdefiniowania wielu plików tłumaczeń. "Gdzie?" - zapytasz. Oczywiście w opcjonalnym components.xml, który wraz z kilkoma innymi opcjonalnymi plikami xmlowymi przejął rolę obowiązkowego faces-config.xml w JSF (podkreślam użycie słów opcjonalny i obowiązkowy).

Więcej informacji ze źródła o umiędzynarodowieniu aplikacji seamowych w dokumentacji Seama - Chapter 15. Internationalization, localization and themes, a w szczególności 15.3.1. Defining labels. Podczas poznawania mechanizmu tłumaczeń w Seamie brakowało mi wiedzy, którą ostatecznie udało mi się znaleść na forum Seam Users w wątku Including a resource bundle not called messages*.

Umiędzynarodowienie mojej aplikacji seamowej, którą rozwijam od kilku dni, rozpocząłem od zmian w pliku components.xml, gdzie wskażę pliki tłumaczeń.

 <?xml version="1.0" encoding="UTF-8"?>
<components
xmlns="http://jboss.com/products/seam/components"
xmlns:core="http://jboss.com/products/seam/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.0.xsd
http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.0.xsd">
<core:init debug="true" />
<core:resource-loader>
<core:bundle-names>
<value>komunikaty</value>
<value>messages</value>
</core:bundle-names>
</core:resource-loader>
</components>
Przypomnę, że jest to krok opcjonalny i domyślnie Seam poszukuje pliku messages.properties dla danego języka, np. messages_pl.properties dla polskiego. Plik musi znajdować się w ścieżce klas aplikacji, co w moim przypadku aplikacji webowej sprowadziło się do umieszczenia go w katalogu /WEB-INF/classes. W powyższej konfiguracji w components.xml dodałem również użycie pliku komunikaty_pl.properties.

Opcjonalnie zdefiniowałem domyślny język aplikacji (polski) i inne wspierane języki (polski) w faces-config.xml:
 <?xml version='1.0' encoding='UTF-8'?>
<faces-config version="1.2"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
<application>
<locale-config>
<default-locale>pl</default-locale>
<supported-locale>pl</supported-locale>
</locale-config>
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>
</faces-config>
W ten sposób zagwarantowałem, że jedynym słusznym językiem w aplikacji będzie polski. Wyboru nie ma.

Zawartość pliku messages_pl.properties:
 kategoria.tytul=Administracja kategoriami
oraz komunikaty_pl.properties:
 kategoria.nazwa=Nazwa
kategoria.opis=Opis
Oba pliki muszą znaleźć się na ścieżce klas, np. /WEB-INF/classes w ramach archiwum war.

Mając tak zdefiniowane pliki tłumaczeń zmodyfikowałem stronę kategoria.xhtml:
 <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core">
<head>
<title>#{messages['kategoria.tytul']}</title>
</head>
<body>
<f:view>
<h:form>
<s:validateAll>
<h:panelGrid columns="2">
#{messages['kategoria.nazwa']}: <h:inputText value="#{kategoria.nazwa}" required="true" />
#{messages['kategoria.opis']}: <h:inputText value="#{kategoria.opis}" required="true" />
</h:panelGrid>
</s:validateAll>
<h:messages />
<h:commandButton value="Dodaj" action="#{kategoriaAgent.dodaj}" />
<br />
<h:outputText value="Brak kategorii" rendered="#{kategorie.rowCount==0}" />
<h:dataTable var="ktgria" value="#{kategorie}" rendered="#{kategorie.rowCount>0}">
<h:column>
<f:facet name="header">
<h:outputText value="Nazwa" />
</f:facet>
<h:commandLink value="#{ktgria.nazwa}" action="#{kategoriaAgent.wybierz}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Opis" />
</f:facet>
<h:outputText value="#{ktgria.opis}" />
</h:column>
<h:column>
<h:commandButton value="Delete" action="#{kategoriaAgent.skasuj}" />
</h:column>
</h:dataTable>
<h3><h:outputText value="#{kategoriaWybrana.nazwa}" /></h3>
<div><h:outputText value="#{kategoriaWybrana.opis}" /></div>
</h:form>
</f:view>
</body>
</html>
Na uwagę zasługuje użycie #{messages['kategoria.tytul']} w tytule poza sekcją <f:view> oraz #{messages['kategoria.nazwa']} i #{messages['kategoria.opis']} w <h:panelGrid>. Przypomnę, że wszystkie komunikaty trafiają do jednej zbiorczej mapy - messages, więc należy zagwarantować unikalność zawartych w niej kluczy tłumaczeń, np. poprzedzając nazwą strony, w której się znajdują.

Uruchomienie strony kategoria.xhtml, to jak można się domyśleć pojawienie się napisów z plików tłumaczeń. Proste, nieprawdaż?

Na zakończenie kilka słów spoza obszaru Seama. Właśnie pojawiło się zaproszenie do NetBeans IDE 6.5 Community Acceptance Testing program (NetCAT). W programie NetCAT miałem już przyjemność uczestniczyć w poprzednich edycjach i wiele mogłem się w nich nauczyć samego NetBeansa, ale również i technologiach Korporacyjnej Javy recenzując artykuły o nich i samemu sprawdzając ich działanie w NB. I tym razem nie mogłem sobie odpuścić zgłoszenia się do programu, szczególnie, że z tą wersją rokuję pewne nadzieje w kontekście znaczącego usprawnienia we wsparciu dwóch serwerów aplikacyjnych IBM WebSphere Application Server 6.1 oraz Apache Geronimo. Może się do czegoś przydam i sprawię, aby pracowało się przyjmniej z NetBeans 6.5? ;-) A Ty? Każdy może się przyłączyć, więc szkoda czasu na zbędne zastanawianie się - lepiej ten czas przeznaczyć na poznawanie błędów^H^H^Hfunkcjonalności NB 6.5.

Kilka dni temu Michał B. podjął się tematu wyjaśnienia odmiany słowa Java i jego pisowni w komentarzu do W sprawie Recenzja książki "Hibernate. Od Nowicjusza do Profesjonalisty". Odpowiedź od jego znajomego filologa trochę mnie zaskoczyła:

"wyraz 'Java' proponuję używać tylko w formie mianownikowej i odmieniać tylko wyraz 'język' - czyli np. języka Java, o/w języku Java.
To zapewni jednoznaczność terminologii w tekstach - oczywiście mówiąc nie trzymałbym się kurczowo takiej opcji - tu może być sama [dżawa] a formy [w dżawie] itp. wystarczą (o czym sam doskonale wiesz:)) "


Zaskoczeni podobnie jak ja? Jestem zdania, że można odmieniać słowo Java w dowolnym zestawieniu, czyli o javie, z javą i bez javy (chociaż to ostatnie nie przechodzi mi jakoś przez gardło ;-))

I na koniec informacja o dedykowanej grupie oferty-pracy-java, gdzie zamieszczane są wyłącznie oferty dotyczące obszaru programowania, testowania czy projektowania z użyciem technologii javowych z uwzględnieniem widełek płacowych. Jeśli uważasz, że jest coś więcej, co powinno pojawiać się w każdym ogłoszeniu o pracę, zapraszam do udziału w grupie i wprowadzenia stosownych zmian. Każdy ma prawo głosu, a celem jest stworzenie miejsca, w którym oferty będą tak profesjonalne, jak osoby, które z nich zamierzają skorzystać. My jako owa wykwalifikowana kadra możemy wpłynąć na kształt ofert i korzystania z nich dla dobra własnego. W ten sposób z pewnością uda nam się wypracować nowy styl pisania ofert z właściwymi wymaganiami, widełkami płacowymi, dodatkami, itp. Grupa jest moderowana i przy rejestracji należy określić swoją rolę - oferent/rekruter vs zainteresowany (wyłącznie dla celów...hmm...nie mam pojęcia jakich, ale pomyślałem, że dobrze wiedzieć jakie są proporcje). Dyskusje o uszczegółówienie ofert jak najbardziej wskazane. Grupa jest publiczna. Archiwum do przeglądania przez każdego, ale jedynie członkowie mogą dyskutować na grupie (po zatwierdzeniu posta przez moderatora). Sądzę, że warunki są idealne do wymagań obu stron - firm rekrutacyjnych i kadry pracowniczej. Promocja siebie jak najbardziej wskazana przez wysłanie CV na grupę. Wszystko, co sprawi, że będzie można znaleźć swoją wymarzoną pracę łatwiej mile widziane. Zapisz się i działaj!

Pytanie konkursowe: Jak nazywa się mapa tłumaczeń w Seamie? I takie bardzo zaawansowane: W jaki sposób (gdzie i jak) definiuje się wiele plików tłumaczeń w Seamie?

Marek Kliś - różności okołojavowe i nie tylko - May 19, 2008 08:21 PM
Mechanizm aktualizacji w NetBeans Platform

Przyjrzyjmy się dzisiaj w jaki sposób możemy wykorzystać Auto Update Service do rozprowadzania aktualizacji modułów w aplikacji opartej o platformę NetBeans.
W tym celu załóżmy nowy projekt typu NetBeans Platform Application



oraz projekt modułu o nazwie np UpdateModule



Po założeniu modułu okno projektów wygląda u mnie następująco:



Dodajmy do naszego modułu jakiś element, który zmieniając będzie wymagał utworzenie nowej wersji. Niech będzie to okno na którym umieścimy komponent tekstowy, którego tekst będzie się zmieniał w zależności od wersji.





Następnym krokiem jest dodanie do naszego modułu pliku typu Update Center.





W tym przykładzie jako serwer przechowujący uaktualnienia wybrałem localhost. Dokładny adres serwera z aktualizacjami (a konkretnie do pliku updates.xml opisującego aktualne moduły) znajduje się w pliku Bundle.properties w pakiecie, do którego dodaliśmy Update Center.
Ponieważ szablon projektu NetBeans Platform Application nie posiada zaznaczonych bibliotek Auto Update musimy to zrobić ręcznie.



Teraz możemy już opublikować naszą "aplikację" (Build ZIP Distibution). Rozpakujmy gdzieś archiwum i uruchommy aplikację. W menu Help powinna być pozycja Check for updates. Po wybraniu dostaniemy komunikat, że nasza aplikacja jest aktualna.



Zmieńmy więc tekst w oknie aplikacji (np z "1.0.0" na "1.0.1") i "wypuśćmy" aktualizację. W tym celu zmieniamy we właściwościach modułu Specification version na wyższy numer.



Budujemy moduły poprzez Create NBMs. Moduły (w naszym przypadku będzie to tylko jeden moduł) zostaną utworzone w podkatalogu projektu (build/updates). Wystarczy zawartość tego katalogu przekopiować do katalogu, który jest głównym katalogiem naszego serwera www. Ja wykorzystałem serwer Apache.



Jeśli uruchomimy ponownie aplikację (nie ze środowiska IDE ale wersję z wcześniej utworzonego archiwum ZIP) naszym oczom powinien po chwili ukazać się komunikat o dostępności aktualizacji.



Po zakończeniu procesu aktualizacji mamy już świeżą wersję aplikacji.

Jacek Laskowski - Notatnik Projektanta Java EE - May 18, 2008 07:35 PM
Tworzenie aplikacji desktopowej z Java Desktop Application w NetBeans IDE 6.1 - część 2

W poprzednim artykule Tworzenie aplikacji desktopowej z Java Desktop Application w NetBeans IDE 6.1 przedstawiłem procedurę tworzenia aplikacji desktopowej "podpierając się" asystentem Java Desktop Application dostępnym w NetBeans IDE 6.1 oraz Java Persistence API (JPA) jako mechanizmem tworzenia odpowiednich struktur bazodanowych automatycznie. Głównym mankamentem aplikacji był brak korzystania z modelu z projektu przychodnia-model, gdzie pewne wartości były generowane automatycznie, a samo mapowanie encji odbywało się poprzez wydzielony plik mapowania META-INF/orm.xml.

W artykule Tworzenie aplikacji desktopowej z Java Desktop Application w NetBeans IDE 6.1 - część 2 przedstawiłem kolejne etapy udoskonalania aplikacji o wykorzystanie własnego modelu z projektu przychodnia-model z konfiguracją JPA z projektu przychodnia-generatortabel. Dużo dobrej zabawy w wykonaniu NetBeans IDE 6.1 i projektem Java Desktop Application.

W ramach artykułów powstaje wiele zadań do rozwiązania, które mogą być doskonałym sposobem na pogłębienie wiedzy w zakresie NetBeans IDE i tworzenia aplikacji desktopowych korzystających z Java Persistence API (JPA). Zadania należą do kategorii łatwiejszych, a to gwarantuje, że zadanie nie ma szansy się niepowieść, a tym samym i satysfakcje z wykonanego zadania. Same zalety, a jak wiedza wzrasta. Rozwiązania opublikuję w kolejnych wpisach.

p.s. Nadchodząca konferencja JAVArsovia 2008 31-ego maja 2008 może jeszcze bardziej uatrakcyjnić Twoje programistyczne "wypady" i tego typu doświadczeń technologicznych będzie znacznie więcej. Jeśli jesteś zainteresowany/-a pogłębieniem wiedzy praktycznie, to właśnie udział w konferencji JAVArsovia 2008 jest doskonałym miejscem, aby się popróbować z nowościami technologicznymi lub zgłębić już poznane. Jako przedstawiciel Kapituły JAVArsovii 2008 gorąco zapraszam do rejestracji na stronie konferencji i aktywnego uczestniczenia w niej. Do 31 maja już niedaleko, a skoro JAVArsovia pretenduje do miana największej konferencji javowej w Polsce, to na pewno nie może Cię na niej zabraknąć. Wstęp wolny! Dobra zabawa gwarantowana!

Marek Kliś - różności okołojavowe i nie tylko - May 18, 2008 05:31 PM
Materiały z prelekcji

Jeśli ktoś jest zainteresowany, to materiały z mojej prelekcji nt NetBeans Platform są dostępne na stronie PJUGu. Na stronie tej znajdują się również materiały z poprzednich spotkań.