<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Planeta NetBeans</title>
    <link>http://www.planetnetbeans.org/pl/</link>
    <language>pl</language>
    <description>Planeta NetBeans - http://www.planetnetbeans.org/pl/</description>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Tworzenie samodzielnej aplikacji ze Spring Framework i Hibernate w NetBeans IDE 6.9</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-9009557966089901002</guid>
      <link>http://blog.japila.pl/2010/07/tworzenie-samodzielnej-aplikacji-ze_14.html</link>
      <description>Właśnie ukończyłem prace nad kolejnym, trzecim i ostatnim artykułem &lt;a href="http://jaceklaskowski.pl/wiki/Tworzenie_samodzielnej_aplikacji_ze_Spring_Framework_i_Hibernate_w_NetBeans_IDE_6.9"&gt;Tworzenie samodzielnej aplikacji ze Spring Framework i Hibernate w NetBeans IDE 6.9&lt;/a&gt;, który wprowadza czytelnika w arkana integracji &lt;b&gt;Spring Framework&lt;/b&gt; z &lt;b&gt;Hibernate&lt;/b&gt; (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.&lt;br /&gt;&lt;br /&gt;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, &lt;a href="http://warszawa.jug.pl/"&gt;Warszawa JUG&lt;/a&gt; organizuje konferencję warsztatową &lt;a href="http://warsjava.pl/"&gt;Warsjava&lt;/a&gt; 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?&lt;br /&gt;&lt;br /&gt;W serii warsztatowej o
      Spring i Hibernate, przez ostatnie tygodnie stworzyłem zapowiadane trzy artykuły:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://jaceklaskowski.pl/wiki/Tworzenie_samodzielnej_aplikacji_ze_Spring_Framework_w_NetBeans_IDE_6.9"&gt;Tworzenie samodzielnej aplikacji ze Spring Framework w NetBeans IDE 6.9&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://jaceklaskowski.pl/wiki/Tworzenie_samodzielnej_aplikacji_z_Hibernate_w_NetBeans_IDE_6.9"&gt;Tworzenie samodzielnej aplikacji z Hibernate w NetBeans IDE
      6.9&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://jaceklaskowski.pl/wiki/Tworzenie_samodzielnej_aplikacji_ze_Spring_Framework_i_Hibernate_w_NetBeans_IDE_6.9"&gt;Tworzenie samodzielnej aplikacji ze Spring Framework i Hibernate w NetBeans IDE 6.9&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;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
      &lt;b&gt;NetBeans IDE 6.9&lt;/b&gt;. Trochę mnie to integrowanie znużyło i coraz bardziej tęskno mi do pełniejszego środowiska serwera aplikacyjnego JEE6.&lt;/div&gt;&lt;br /&gt;Muszę przyznać, że NetBeans 6.9 dał mi się tak we znaki&#160;(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?&lt;br /&gt;&lt;br /&gt;Tym samym wracam do mojej wcześniejszej aktywności wokół specyfikacji &lt;a href="http://jcp.org/en/jsr/summary?id=299"&gt;JSR 299: Contexts and Dependency Injection for the Java EE platform&lt;/a&gt;. 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 ;-)&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-9009557966089901002?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 14 Jul 2010 12:10:55 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Tworzenie samodzielnej aplikacji z Hibernate w NetBeans IDE 6.9</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-2603996984037795342</guid>
      <link>http://blog.japila.pl/2010/07/tworzenie-samodzielnej-aplikacji-z.html</link>
      <description>Wspominałem już w poprzednim wpisie&#160;&lt;a href="http://blog.japila.pl/2010/07/tworzenie-samodzielnej-aplikacji-ze.html"&gt;Tworzenie samodzielnej aplikacji ze Spring Framework w NetBeans IDE 6.9&lt;/a&gt; o moich ostatnich doświadczeniach warsztatowych, podczas realizacji zadania "wzmocnienia technicznego" grupy osób w temacie &lt;b&gt;Spring Framework&lt;/b&gt; i &lt;b&gt;Hibernate&lt;/b&gt;. 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.&lt;br /&gt;&lt;br /&gt;Zabrałem się za samodzielne przygotowanie potrzebnych artykułów i po wprowadzającym do Springa nadszedł obiecywany artykuł wprowadzający w tematykę Hibernate - &lt;a
      href="http://jaceklaskowski.pl/wiki/Tworzenie_samodzielnej_aplikacji_z_Hibernate_w_NetBeans_IDE_6.9"&gt;Tworzenie samodzielnej aplikacji z Hibernate w NetBeans IDE 6.9&lt;/a&gt;. 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.&lt;br /&gt;&lt;br /&gt;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.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-2603996984037795342?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 08 Jul 2010 08:14:49 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Tworzenie samodzielnej aplikacji ze Spring Framework w NetBeans IDE 6.9</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-6301724034138885838</guid>
      <link>http://blog.japila.pl/2010/07/tworzenie-samodzielnej-aplikacji-ze.html</link>
      <description>Miałem ostatnio ciekawe przedsięwzięcie (coś ala szkolenie-warsztaty) wprowadzające w arkana użycia &lt;a href="http://springframework.org/"&gt;Spring Framework&lt;/a&gt; oraz &lt;a href="http://hibernate.org/"&gt;Hibernate&lt;/a&gt;. 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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;W artykule &lt;a href="http://jaceklaskowski.pl/wiki/Tworzenie_samodzielnej_aplikacji_ze_Spring_Framework_w_NetBeans_IDE_6.9"&gt;Tworzenie samodzielnej aplikacji ze Spring Framework w NetBeans IDE 6.9&lt;/a&gt; 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?!&lt;br /&gt;&lt;br /&gt;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ę.&lt;br /&gt;&lt;br /&gt;p.s. Tematyka Spring Framework i Hibernate tak mnie wkręciła, że zabrałem się za lekturę książki &lt;a href="http://apress.com/book/view/9781430224976"&gt;Spring Enterprise Recipes: A Problem-Solution Approach&lt;/a&gt; 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.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-6301724034138885838?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 05 Jul 2010 22:08:33 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Skrinkast o Java EE 6 z @WebServlet, NetBeans IDE 6.9 i IBM WebSphere AS V8 w HD 720p na YouTube</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-786098047765942941</guid>
      <link>http://blog.japila.pl/2010/05/skrinkast-o-java-ee-6-z-webservlet.html</link>
      <description>&lt;a href="http://www.youtube.com/watch?v=MrV6X6WTOe4"&gt;&lt;img src="http://1.bp.blogspot.com/_wSeV_DMR2uA/S_Yd1gzSqcI/AAAAAAAACzo/opGkQVro_HY/s320/skrinkast-tytul.png" alt="Slajd tytułowy skrinkasta" style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 154px;" border="0" id="BLOGGER_PHOTO_ID_5473595202290756034" /&gt;&lt;/a&gt;W 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 - &lt;a href="http://www.youtube.com/watch?v=MrV6X6WTOe4"&gt;Skrinkast o Java EE 6 z @WebServlet, NetBeans IDE 6.9 i IBM WebSphere AS V8&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;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 &lt;a href="http://www.telestream.net/screen-flow/demos.htm"&gt;ScreenFlow's Product Demos &amp;amp; Tutorials&lt;/a&gt;, lektura o formatach do exportu i materiał był gotowy do publikacji.&lt;br /&gt;&lt;br /&gt;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).&lt;br /&gt;&lt;br /&gt;Co znajdziemy w skrinkaście? Jest
      to skrinkast-zagadka, w którym dzielę się doświadczeniami z pierwszych chwil z &lt;span style="font-weight: bold;"&gt;Java EE 6&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;NetBeans IDE 6.9&lt;/span&gt; i &lt;span style="font-weight: bold;"&gt;IBM WebSphere Application Server V8&lt;/span&gt;. Utworzyłem projekt aplikacji webowej z servletem, który nie ma definicji w deskryptorze &lt;span style="font-weight: bold;"&gt;WEB-INF/web.xml&lt;/span&gt; oraz korzysta z adnotacji &lt;span
      style="font-weight: bold;"&gt;@WebServlet&lt;/span&gt;. 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.&lt;br /&gt;&lt;br /&gt;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!&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-786098047765942941?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Sat, 22 May 2010 07:18:04 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Siedzę w Turcji i przetwarzam sygnały zewsząd, trochę o NetBeans i WAS8 również</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-514674715365334595</guid>
      <link>http://blog.japila.pl/2010/05/siedze-w-turcji-i-przetwarzam-sygnay.html</link>
      <description>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 &lt;a
      href="http://sjp.pwn.pl/lista.php?co=reminiscencja"&gt;reminiscencja &lt;/a&gt;doświadczeń z IT :)&lt;br /&gt;&lt;br /&gt;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 &lt;a href="http://www.growing-object-oriented-software.com/"&gt;"Growing Object-Oriented Software, Guided by Tests"&lt;/a&gt;. 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 &lt;span style="font-style: italic;"&gt;"obowiązkowa lektura dla każdego".&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;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 &lt;a
      href="http://en.wikipedia.org/wiki/Taksim_Square"&gt;Taksim&lt;/a&gt;, aż do prawie przy lotnisku i spowrotem. Jazda przy 120 km/h na zatłoczonej &lt;span style="font-style: italic;"&gt;otoban&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;Nauczyłem się w
      międzyczasie kilku sztuczek przydatnych tu i ówdzie, np. wyłączenie wszystkich katalogów z obsługi repozytorium &lt;span style="font-weight: bold;"&gt;Mercurial (hg)&lt;/span&gt;, począwszy od katalogu bieżącego w dół, to po prostu:&lt;pre class="brush: bash"&gt;$ cat .hgignore&lt;br /&gt;syntax: regexp&lt;br /&gt;^build.xml$&lt;br /&gt;^build/&lt;br /&gt;^nbproject/build-impl.xml$&lt;br /&gt;^nbproject/private/platform-private.properties$&lt;br /&gt;^nbproject/private/private.xml$&lt;br
      /&gt;&lt;/pre&gt;Włączamy &lt;span style="font-weight: bold;"&gt;sytax: regexp&lt;/span&gt; i bawimy się wyrażeniami regularnymi. Możemy mieszać konfigurację z wyrażeniami powłoki uniksowej przez &lt;span style="font-weight: bold;"&gt;syntax: glob&lt;/span&gt;. I tak naprzemiennie. Więcej można przeczytać w &lt;a href="http://www.selenic.com/mercurial/hgignore.5.html"&gt;dokumentacji hgignore&lt;/a&gt;. Proste i przyjemne.&lt;br /&gt;&lt;br /&gt;Siedząc wieczorami w hotelu, kiedy wracam ze spacerów
      po Taksim, zabrałem się za rozwój &lt;a href="http://bitbucket.org/jaceklaskowski/netbeanswebsphere8/overview"&gt;wtyczki NetBeans dla serwera aplikacyjnego WAS V8&lt;/a&gt;. Tak w ramach (samo)rozwoju programistycznego. Na razie udało mi się wyświetlić WAS V8 jako jeden z wielu serwerów w okienku &lt;span style="font-style: italic;"&gt;Add Server...&lt;/span&gt;, więc idzie powoli, ale postępy zauważalne. Przydaje się znajomość skrótów klawiszowych i jak na razie przywykłem do &lt;span
      style="font-weight: bold;"&gt;Cmd+O&lt;/span&gt; (odszukanie typu) oraz &lt;span style="font-weight: bold;"&gt;Cmd+Shift+I&lt;/span&gt; (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ą.&lt;br /&gt;&lt;br /&gt;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 (!)&lt;br /&gt;&lt;br /&gt;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 - &lt;span style="font-style:
      italic;"&gt;valid()&lt;/span&gt; - 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ą.&lt;br /&gt;&lt;br /&gt;W trakcie
      pisania wtyczki przyszło mi stworzyć kawałek funkcjonalności wizualnej z GUI, co okazało się trywialne przez użycie asystenta &lt;span style="font-weight: bold;"&gt;New &gt; Wizard&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_wSeV_DMR2uA/S-xhr8ybSFI/AAAAAAAACzE/2XLFT05drY0/s1600/netbeans-new-wizard.png"&gt;&lt;img src="http://1.bp.blogspot.com/_wSeV_DMR2uA/S-xhr8ybSFI/AAAAAAAACzE/2XLFT05drY0/s320/netbeans-new-wizard.png" alt="" style="display: block; margin: 0px auto
      10px; text-align: center; cursor: pointer; width: 320px; height: 175px;" border="0" id="BLOGGER_PHOTO_ID_5470855055028209746" /&gt;&lt;/a&gt;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.&lt;br /&gt;&lt;br /&gt;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 &lt;span style="font-weight: bold;"&gt;TAB&lt;/span&gt;, 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: &lt;span style="font-weight: bold;"&gt;Cmd+Backspace&lt;/span&gt; kasuje wybrany komponent&lt;br /&gt;&lt;br /&gt;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 &lt;a href="http://thescreencastinghandbook.com/"&gt;The Screencasting Handbook&lt;/a&gt; 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.&lt;br /&gt;&lt;br /&gt;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. &lt;span style="font-style: italic;"&gt;self-paced online course&lt;/span&gt;, więc była to swego rodzaju przygrywka do pracy, którą w podobnym stylu każdy będzie musiał zrealizować.&lt;br /&gt;&lt;br /&gt;Na zakończenie, spostrzeżenie porównujące społeczności stojące za Twitterem i Facebookiem - &lt;span style="font-style: italic;"&gt;"Facebook is the people you
      went to school with. Twitter is the people you wished you went to school with."&lt;/span&gt; ~@twittelator. Dla mnie rewelacja!&lt;br /&gt;&lt;br /&gt;Pozdrowienia dla uczestników &lt;a href="http://geecon.org"&gt;GeeCONa&lt;/a&gt;. Bawią się, a my musimy charować! Odkujemy się podczas &lt;a href="http://javarsovia.pl"&gt;Javarsovia 2010&lt;/a&gt;. 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!&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-514674715365334595?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 13 May 2010 21:06:08 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Nauka JEE6 z WAS8 w NetBeans 6.9 przez rozwój wtyczki j2ee.websphere?</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-5079609402821294887</guid>
      <link>http://blog.japila.pl/2010/04/nauka-jee6-z-was8-w-netbeans-69-przez.html</link>
      <description>&lt;a href="http://netbeans.org"&gt;&lt;img src="http://2.bp.blogspot.com/_wSeV_DMR2uA/S9SKb9vMIEI/AAAAAAAACwE/TFMCnzDKROM/s320/netbeans-splashscreen.png" alt="" style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 202px;" border="0" id="BLOGGER_PHOTO_ID_5464144460940845122" /&gt;&lt;/a&gt;Jak każdy użytkownik &lt;span style="font-weight: bold;"&gt;NetBeans IDE&lt;/span&gt; wie, albo przynajmniej wiedzieć powinien, od wersji 6.8 w grupie wspieranych
      serwerów aplikacyjnych brakuje &lt;span style="font-weight: bold;"&gt;IBM WebSphere Application Server (WAS)&lt;/span&gt;. 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) &lt;span style="font-style: italic;"&gt;ze względu na brak aktywnego rozwoju wtyczki i kilka problemów z nią związanych&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;W swojej DziRze (parafrazując wymowę nazwy produktu JIRA), czyli Dzienniku Rzeczy do Zrobienia (możnaby napisać DziRzeZ, ale to pachnie bluźnierstwem i &lt;a href="http://pl.wikipedia.org/wiki/Ekskomunika"&gt;ekskomuniką&lt;/a&gt;) pojawiło się zadanie/projekt &lt;span style="font-weight: bold;"&gt;Nauka JEE6 z WAS8 w NetBeans 6.9&lt;/span&gt;. Testuję tym samym metodykę GTD (ang. &lt;span style="font-style:
      italic;"&gt;Getting Things Done&lt;/span&gt;), 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...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_wSeV_DMR2uA/S9SSlohaS0I/AAAAAAAACwM/DpWP2CXQJ8w/s1600/netbeans-with-websphere-support.png"&gt;&lt;img
      src="http://3.bp.blogspot.com/_wSeV_DMR2uA/S9SSlohaS0I/AAAAAAAACwM/DpWP2CXQJ8w/s320/netbeans-with-websphere-support.png" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 222px;" border="0" id="BLOGGER_PHOTO_ID_5464153423137622850" /&gt;&lt;/a&gt;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).&lt;br /&gt;&lt;br
      /&gt;Już kiedyś zab(ie)rałem się za pisanie &lt;a href="http://svn.apache.org/repos/asf/geronimo/sandbox/geronimo-netbeans-plugin/"&gt;wtyczki do NetBeans IDE dla Apache Geronimo&lt;/a&gt;, 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.&lt;br /&gt;&lt;br /&gt;Przeszukałem Sieć i dobrałem się do źródeł wtyczki NB dla WAS, które dostępne są w repozytorium Git - &lt;a href="http://hg.netbeans.org/main/"&gt;http://hg.netbeans.org/main/&lt;/a&gt; w podkatalogu &lt;span style="font-weight: bold;"&gt;j2ee.websphere&lt;/span&gt;.
      Wykonujemy kilka poleceń...&lt;pre class="brush: bash"&gt;devmac:oss jacek$ mkdir netbeans&lt;br /&gt;devmac:oss jacek$ cd netbeans&lt;br /&gt;devmac:netbeans jacek$ hg clone http://hg.netbeans.org/main/ .&lt;br /&gt;devmac:netbeans jacek$ export ANT_OPTS="-Xmx512m -XX:MaxPermSize=256m"&lt;br /&gt;devmac:netbeans jacek$ ant&lt;br /&gt;...&lt;br /&gt;BUILD SUCCESSFUL&lt;br /&gt;Total time: 47 minutes 10 seconds&lt;br /&gt;&lt;/pre&gt;, aby po zaimportowaniu do NetBeans...&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://4.bp.blogspot.com/_wSeV_DMR2uA/S9SKBDztaMI/AAAAAAAACv8/lclB4XeEnKU/s1600/netbeans-websphere-module-sources.png"&gt;&lt;img src="http://4.bp.blogspot.com/_wSeV_DMR2uA/S9SKBDztaMI/AAAAAAAACv8/lclB4XeEnKU/s320/netbeans-websphere-module-sources.png" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 267px; height: 320px;" border="0" id="BLOGGER_PHOTO_ID_5464143998713948354" /&gt;&lt;/a&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;div class="blogger-post-footer"&gt;&lt;img
      src="https://blogger.googleusercontent.com/tracker/20941681-5079609402821294887?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Sun, 25 Apr 2010 20:28:51 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Niemy film(ik) na weekend - Java Persistence (JPA) 2.0 praktycznie - zestawienie środowiska z EclipseLink i Apache Maven 2</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-1413043996959538162</guid>
      <link>http://blog.japila.pl/2010/01/niemy-filmik-na-weekend-java.html</link>
      <description>Spisałem scenariusz (artykuł &lt;a href="http://www.jaceklaskowski.pl/wiki/Java_Persistence_%28JPA%29_2.0_praktycznie_-_zestawienie_%C5%9Brodowiska_z_EclipseLink_i_Apache_Maven_2"&gt;Java Persistence (JPA) 2.0 praktycznie - zestawienie środowiska z EclipseLink i Apache Maven 2&lt;/a&gt;) i kolejnego dnia przyszło do kręcenia filmiku.&lt;br /&gt;&lt;br /&gt;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 - &lt;a href="http://www.youtube.com/watch?v=X3q9LXTxdCk"&gt;Java Persistence (JPA) 2.0 praktycznie - zestawienie środowiska z EclipseLink i Apache Maven 2&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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ć &lt;span style="font-style:
      italic;"&gt;"Jak sobie pościelesz, tak się wyśpisz"&lt;/span&gt;, 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 &lt;span style="font-style: italic;"&gt;"Do kitu! Zajmij się lepiej hotdogami."&lt;/span&gt;, aczkolwiek preferowałbym w takiej sytuacji więcej argumentów.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;A teraz do skrinkasta...&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-1413043996959538162?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Sat, 30 Jan 2010 12:00:32 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: "Włamaniowy" powrót z wakacji, nowe wydania NetBeans i SDJ 8/200!</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-3271672435078149750</guid>
      <link>http://blog.japila.pl/2009/08/wamaniowy-powrot-z-wakacji-nowe-wydania.html</link>
      <description>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 &lt;span style="font-weight: bold;"&gt;Lonyay&lt;/span&gt; "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.&lt;br /&gt;&lt;br /&gt;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ł ;-)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.netbeans.org"&gt;&lt;img src="http://3.bp.blogspot.com/_wSeV_DMR2uA/SnnhGp1VkTI/AAAAAAAACXs/cgqHvT9E44Y/s320/nb67.gif" alt="" style="float: left; margin: 0 10px 10px 0; cursor: pointer; cursor: hand; width: 204px; height: 35px;"
      border="0" id="BLOGGER_PHOTO_ID_5366567935413686578" /&gt;&lt;/a&gt;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 &lt;a href="http://www.netbeans.org/community/releases/67/relnotes.html"&gt;NetBeans 6.7.1 ze wsparciem dla JavaFX 1.2&lt;/a&gt;, aby we wtorek znaleźć kolejną o &lt;a
      href="http://bits.netbeans.org/netbeans/6.8/m1/"&gt;NetBeans IDE 6.8 Milestone 1 Available for Download&lt;/a&gt;.&lt;br /&gt;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?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sdjournal.org/prt/view/aktualnosci/issue/1057.html"&gt;&lt;img src="http://3.bp.blogspot.com/_wSeV_DMR2uA/SnniCXXqyuI/AAAAAAAACX0/xLdF0n6-7bA/s320/okladka_SDJ_08_09.png" alt="" style="float: left; margin: 0 10px 10px 0; cursor: pointer; cursor: hand; width: 150px;
      height: 212px;" border="0" id="BLOGGER_PHOTO_ID_5366568961249561314" /&gt;&lt;/a&gt;Kolejną interesującą wiadomością była informacja o nowym wydaniu &lt;a href="http://sdjournal.org/prt/view/aktualnosci/issue/1057.html"&gt;Software Developer's Journal (SDJ) na sierpień&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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 &lt;a href="http://mariuszek.googlepages.com/"&gt;Mariusz Róg&lt;/a&gt;, którego miałem możliwość poznać podczas szczecińskiej konferencji javowej &lt;a
      href="http://www.java4people.com/"&gt;java4people&lt;/a&gt;, a później spotkać na &lt;a href="http://javarsovia.pl"&gt;Javarsovii&lt;/a&gt;. Już zaplanowałem pojawienie się w Trafficu na lekturę artykułu, kiedy to zauważyłem ten numer na biurku &lt;a href="http://mmolak.blogspot.com/"&gt;Marcina Molaka&lt;/a&gt;. 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 - &lt;a href="http://msieraczkiewicz.blogspot.com/"&gt;Mariusza Sieraczkiewicza&lt;/a&gt; i &lt;a href="http://mbartyzel.blogspot.com/"&gt;Michała Bartyzela&lt;/a&gt; - 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 &lt;a href="http://dworld.pl/java-express/"&gt;JAVA exPress&lt;/a&gt; całkowicie odbierze rynek). Pożyjemy, zobaczymy.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-3271672435078149750?l=blog.japila.pl" alt="" height="1" width="1"
      /&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 05 Aug 2009 20:00:24 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: grails upgrade i morph-deploy, finalny NetBeans 6.7 oraz grailsowy Refcard</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-3575105172300972328</guid>
      <link>http://blog.japila.pl/2009/06/grails-upgrade-i-morph-deploy-finalny.html</link>
      <description>Jakiś czas temu zainstalowałem nową wersję &lt;a href="http://grails.org"&gt;Grails 1.1.1&lt;/a&gt;. W trakcie aktualizacji kasuję wszystkie katalogi związane z poprzednią wersją oraz te, w katalogu domowym (&lt;span style="font-weight: bold;"&gt;%userprofile%/.grails&lt;/span&gt;). 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ę &lt;a
      href="http://www.grails.org/MorphDeploy+Plugin"&gt;morph-deploy&lt;/a&gt;. Okazało się, że w trakcie instalacji pojawił się komunikat o konieczności uaktualnienia Grails w samej aplikacji.&lt;pre class="brush: bash"&gt; jlaskowski@work /cygdrive/c/projs/sandbox/nauczyciel&lt;br /&gt; $ grails install-plugin morph-deploy&lt;br /&gt; Welcome to Grails 1.1.1 - http://grails.org/&lt;br /&gt; Licensed under Apache Standard License 2.0&lt;br /&gt; Grails home is set to: c:/apps/grails&lt;br /&gt;&lt;br
      /&gt; Base Directory: C:\projs\sandbox\nauczyciel&lt;br /&gt; Running script c:\apps\grails\scripts\InstallPlugin.groovy&lt;br /&gt; Environment set to development&lt;br /&gt; Application expects grails version [1.1], but GRAILS_HOME is version [1.1.1] - &lt;br /&gt; use the correct Grails version or run 'grails upgrade' &lt;br /&gt; if this Grails version is newer than the version your application expects.&lt;/pre&gt;Jeszcze nigdy wcześniej nie spotkałem się z tym komunikatem. Wykonanie zalecanego
      &lt;span style="font-weight: bold;"&gt;grails upgrade&lt;/span&gt; zajęło tylko chwilę.&lt;pre class="brush: bash"&gt; jlaskowski@work /cygdrive/c/projs/sandbox/nauczyciel&lt;br /&gt; $ grails upgrade&lt;br /&gt; Welcome to Grails 1.1.1 - http://grails.org/&lt;br /&gt; Licensed under Apache Standard License 2.0&lt;br /&gt; Grails home is set to: c:/apps/grails&lt;br /&gt;&lt;br /&gt; Base Directory: C:\projs\sandbox\nauczyciel&lt;br /&gt; Running script c:\apps\grails\scripts\Upgrade.groovy&lt;br
      /&gt; Environment set to development&lt;br /&gt; NOTE: Your application currently expects grails version [1.1], this target will upgrade it to Grails 1.1.1 ...&lt;br /&gt;&lt;br /&gt; WARNING: This target will upgrade an older Grails application to 1.1.1.&lt;br /&gt; However, tag libraries provided by earlier versions of Grails found in grails-app/taglib will be removed.&lt;br /&gt; The target will not, however, delete tag libraries developed by yourself.&lt;br /&gt; Are you sure you want to
      continue?&lt;br /&gt; (y, n)&lt;br /&gt; y&lt;br /&gt; ...&lt;br /&gt; Please make sure you view the README for important information about changes to your source code. ...&lt;br /&gt; Project upgraded&lt;/pre&gt;Po tym instalacja wtyczki przebiegła już całkiem gładko.&lt;pre class="brush: bash"&gt; jlaskowski@work /cygdrive/c/projs/sandbox/nauczyciel&lt;br /&gt; $ grails install-plugin morph-deploy&lt;br /&gt; Welcome to Grails 1.1.1 - http://grails.org/&lt;br /&gt; Licensed under Apache Standard
      License 2.0&lt;br /&gt; Grails home is set to: c:/apps/grails&lt;br /&gt;&lt;br /&gt; Base Directory: C:\projs\sandbox\nauczyciel&lt;br /&gt; Running script c:\apps\grails\scripts\InstallPlugin.groovy&lt;br /&gt; Environment set to development&lt;br /&gt; Reading remote plugin list ...&lt;br /&gt; [get] Getting: http://svn.codehaus.org/grails/trunk/grails-plugins/.plugin-meta/plugins-list.xml&lt;br /&gt; [get] To: C:\Documents and Settings\jlaskowski\.grails\1.1.1\plugins-list-core.xml&lt;br /&gt;
      .&lt;br /&gt; [get] last modified = Tue Jun 09 13:03:55 CEST 2009&lt;br /&gt; Reading remote plugin list ...&lt;br /&gt; [get] Getting: http://plugins.grails.org/.plugin-meta/plugins-list.xml&lt;br /&gt; [get] To: C:\Documents and Settings\jlaskowski\.grails\1.1.1\plugins-list-default.xml&lt;br /&gt; .........................&lt;br /&gt; [get] last modified = Sat Jun 13 05:45:37 CEST 2009&lt;br /&gt; [get] Getting:
      http://plugins.grails.org/grails-morph-deploy/tags/RELEASE_0_1/grails-morph-deploy-0.1.zip&lt;br /&gt; [get] To: C:\Documents and Settings\jlaskowski\.grails\1.1.1\plugins\grails-morph-deploy-0.1.zip&lt;br /&gt; .....&lt;br /&gt; [get] last modified = Thu Jan 22 00:21:40 CET 2009&lt;br /&gt; [copy] Copying 1 file to C:\Documents and Settings\jlaskowski\.grails\1.1.1\projects\nauczyciel\plugins&lt;br /&gt; Installing plug-in morph-deploy-0.1&lt;br /&gt; [mkdir] Created dir: C:\Documents and
      Settings\jlaskowski\.grails\1.1.1\projects\nauczyciel\plugins\morph-deploy-0.1&lt;br /&gt; [unzip] Expanding: C:\Documents and Settings\jlaskowski\.grails\1.1.1\plugins\grails-morph-deploy-0.1.zip into &lt;br /&gt; C:\Documents and Settings\jlaskowski\.grails\1.1.1\projects\nauczyciel\plugins\morph-deploy-0.1&lt;br /&gt; Executing morph-deploy-0.1 plugin post-install script ...&lt;br /&gt; Plugin morph-deploy-0.1 installed&lt;br /&gt; Plug-in provides the following new scripts:&lt;br /&gt;
      ------------------------------------------&lt;br /&gt; grails deploy&lt;br /&gt; Found events script in plugin morph-deploy&lt;/pre&gt;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 :))&lt;pre class="brush: bash"&gt; jlaskowski@work /cygdrive/c/projs/sandbox/nauczyciel&lt;br /&gt; $ grails war&lt;br /&gt; Welcome to
      Grails 1.1.1 - http://grails.org/&lt;br /&gt; Licensed under Apache Standard License 2.0&lt;br /&gt; Grails home is set to: c:/apps/grails&lt;br /&gt;&lt;br /&gt; Base Directory: C:\projs\sandbox\nauczyciel&lt;br /&gt; Running script c:\apps\grails\scripts\War.groovy&lt;br /&gt; Environment set to production&lt;br /&gt; Warning, target causing name overwriting of name startLogging&lt;br /&gt; Removing JDBC 2 Extensions JAR from WAR for Mor.ph deployment&lt;br /&gt; Error executing script War: No such
      property: stagingDir for class: _Events&lt;br /&gt; gant.TargetMissingPropertyException: No such property: stagingDir for class: _Events&lt;br /&gt; at gant.Gant$_dispatch_closure4.doCall(Gant.groovy:329)&lt;br /&gt; at gant.Gant$_dispatch_closure6.doCall(Gant.groovy:334)&lt;br /&gt; at gant.Gant$_dispatch_closure6.doCall(Gant.groovy)&lt;br /&gt; at gant.Gant.withBuildListeners(Gant.groovy:344)&lt;br /&gt; at gant.Gant.this$2$withBuildListeners(Gant.groovy)&lt;br /&gt; at
      gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source)&lt;br /&gt; at gant.Gant.dispatch(Gant.groovy:334)&lt;br /&gt; at gant.Gant.this$2$dispatch(Gant.groovy)&lt;br /&gt; at gant.Gant.invokeMethod(Gant.groovy)&lt;br /&gt; at gant.Gant.processTargets(Gant.groovy:495)&lt;br /&gt; at gant.Gant.processTargets(Gant.groovy:480)&lt;br /&gt; Caused by: groovy.lang.MissingPropertyException: No such property: stagingDir for class: _Events&lt;br /&gt; at
      _Events$_run_closure1.doCall(_Events.groovy:6)&lt;br /&gt; at War$_run_closure1.doCall(War.groovy:38)&lt;br /&gt; at gant.Gant$_dispatch_closure4.doCall(Gant.groovy:324)&lt;br /&gt; ... 10 more&lt;/pre&gt;Wystarczy skasować skrypt &lt;span style="font-weight: bold;"&gt;_Events.groovy&lt;/span&gt; z katalogu wtyczki morph-deploy...&lt;pre class="brush: bash"&gt; jlaskowski@work /cygdrive/c/projs/sandbox/nauczyciel&lt;br /&gt; $ rm -rf c\:/Documents\ and\
      Settings/jlaskowski/.grails/1.1.1/projects/nauczyciel/plugins/morph-deploy-0.1/scripts/_Events.groovy&lt;/pre&gt;i ponownie uruchomić &lt;span style="font-weight: bold;"&gt;grails war&lt;/span&gt;.&lt;pre class="brush: bash"&gt; jlaskowski@work /cygdrive/c/projs/sandbox/nauczyciel&lt;br /&gt; $ grails war&lt;br /&gt; Welcome to Grails 1.1.1 - http://grails.org/&lt;br /&gt; Licensed under Apache Standard License 2.0&lt;br /&gt; Grails home is set to: c:/apps/grails&lt;br /&gt;&lt;br /&gt; Base
      Directory: C:\projs\sandbox\nauczyciel&lt;br /&gt; Running script c:\apps\grails\scripts\War.groovy&lt;br /&gt; Environment set to production&lt;br /&gt; Warning, target causing name overwriting of name startLogging&lt;br /&gt; ...&lt;br /&gt; Done creating WAR C:\projs\sandbox\nauczyciel/nauczyciel-0.1.1.war&lt;/pre&gt;A później już tylko &lt;span style="font-weight: bold;"&gt;grails deploy&lt;/span&gt;, username/password do Morpha i można cieszyć się wdrożoną aplikacją grailsową - niewielką, ale
      własną!&lt;pre class="brush: bash"&gt; jlaskowski@work /cygdrive/c/projs/sandbox/nauczyciel&lt;br /&gt; $ grails deploy&lt;br /&gt; Welcome to Grails 1.1.1 - http://grails.org/&lt;br /&gt; Licensed under Apache Standard License 2.0&lt;br /&gt; Grails home is set to: c:/apps/grails&lt;br /&gt;&lt;br /&gt; Base Directory: C:\projs\sandbox\nauczyciel&lt;br /&gt; Running script C:\Documents and Settings\jlaskowski\.grails\1.1.1\projects\nauczyciel\plugins\morph-deploy-0.1\scripts\Deploy.groovy&lt;br
      /&gt; Environment set to development&lt;br /&gt; Warning, target causing name overwriting of name default&lt;br /&gt; This will deploy the file nauczyciel-0.1.1.war&lt;br /&gt; Enter your Mor.ph username:&lt;br /&gt; *******&lt;br /&gt; Enter your Mor.ph password:&lt;br /&gt; *******&lt;br /&gt; Please wait...&lt;br /&gt; [java] Uploading the code...&lt;br /&gt; [java] Creating new appspace version...&lt;br /&gt; [java] Deploying the application...&lt;br /&gt; [java] Deploy Done.&lt;br /&gt; [java]
      For more information on the status of this deployment, you&lt;br /&gt; [java] can view the Deployment Logs by clicking 'Manage' located&lt;br /&gt; [java] on your subscription widget and by clicking the Logs tab.&lt;br /&gt; [java] In this same page, you can also view your Production logs&lt;br /&gt; [java] and Scheduled task logs.&lt;br /&gt; [java] ** transaction commit **&lt;/pre&gt;Tym razem wszystko poszło już gładko. Nowa wersja aplikacji jest na &lt;a
      href="http://nauczyciel.morphexchange.com/"&gt;Morphie&lt;/a&gt;. 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 ;-)&lt;br /&gt;&lt;br /&gt;p.s. Pojawiła się finalna wersja &lt;a href="http://www.netbeans.org/downloads/index.html"&gt;NetBeans IDE 6.7&lt;/a&gt;. 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 &lt;a href="http://www.netbeans.org/features/groovy/index.html"&gt;Groovy and Grails&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;p.s.II Pojawił się dokument &lt;a href="http://refcardz.dzone.com/refcardz/getting-started-grails"&gt;Getting Started with Grails&lt;/a&gt; z serii Refcard (pisał o tym również Mateusz w &lt;a href="http://tech.mrozewski.pl/2009/06/29/getting-started-with-grails-refcard/"&gt;Getting started with Grails refcard&lt;/a&gt;, 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.&lt;br /&gt;&lt;br /&gt;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 &lt;a href="http://warsjava.pl"&gt;Warsjavy&lt;/a&gt; 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ą &lt;a href="http://javarsovia.pl"&gt;Javarsovią&lt;/a&gt;, 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 ;-)&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-3575105172300972328?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 29 Jun 2009 22:36:33 +0000</pubDate>
    </item>
    <item>
      <title>Marek Kliś - różności okołojavowe i nie tylko: NetBeans 6.7M2 i instalator platformowych aplikacji</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-62160705063034256.post-1802278365885031568</guid>
      <link>http://marekklis.blogspot.com/2009/03/netbeans-67m2-i-instalator.html</link>
      <description>Od jakiegoś czasu jest dostępna wersja &lt;a href="http://bits.netbeans.org/download/6.7/m2/"&gt;M2 NetBeans 6.7&lt;/a&gt; - wydanie stabilnej wersji jest &lt;a href="http://www.netbeans.org/community/releases/roadmap.html"&gt;planowane&lt;/a&gt; na czerwiec. Postanowiłem się bliżej przyjrzeć co nowa wersja będzie oferować.&lt;br /&gt;Pierwsze co zwróciło moją uwagę to plugin instalatora dla aplikacji tworzonych z wykorzystaniem platformy NetBeans.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://3.bp.blogspot.com/_dqSd_vS7ivk/Sc-ulIIBpcI/AAAAAAAAAfc/NXjxKFoRqTI/s1600-h/NBInstaller01.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_dqSd_vS7ivk/Sc-ulIIBpcI/AAAAAAAAAfc/NXjxKFoRqTI/s320/NBInstaller01.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 202px;" border="0" id="BLOGGER_PHOTO_ID_5318661637807384002" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Po jego zainstalowaniu pojawia się nam nowa opcja dla
      projektów typu &lt;span style="font-style: italic;"&gt;Module Suite&lt;/span&gt; czyli &lt;span style="font-style: italic;"&gt;Generate Suite Installer&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dqSd_vS7ivk/Sc-u6GWwznI/AAAAAAAAAfk/3SPaVfzBSIU/s1600-h/NBInstaller02.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_dqSd_vS7ivk/Sc-u6GWwznI/AAAAAAAAAfk/3SPaVfzBSIU/s320/NBInstaller02.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer;
      cursor: hand; width: 279px; height: 320px;" border="0" id="BLOGGER_PHOTO_ID_5318661998109576818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Wybranie tej opcji uruchamia prostego kreatora.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dqSd_vS7ivk/Sc-vZ2kBXxI/AAAAAAAAAfs/r-jSTKikVtg/s1600-h/NBInstaller03.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_dqSd_vS7ivk/Sc-vZ2kBXxI/AAAAAAAAAfs/r-jSTKikVtg/s320/NBInstaller03.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align:
      center; cursor: pointer; cursor: hand; width: 320px; height: 232px;" border="0" id="BLOGGER_PHOTO_ID_5318662543626034962" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;Drugi krok to podanie treści (lub pliku) licencji, która musi być zaakceptowana podczas instalacji.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://1.bp.blogspot.com/_dqSd_vS7ivk/Sc-vaqsdaPI/AAAAAAAAAf0/Fi_28RFAT_A/s1600-h/NBInstaller04.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_dqSd_vS7ivk/Sc-vaqsdaPI/AAAAAAAAAf0/Fi_28RFAT_A/s320/NBInstaller04.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 210px;" border="0" id="BLOGGER_PHOTO_ID_5318662557620070642" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I to tyle. Po chwili instalator jest gotowy.&lt;br
      /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_dqSd_vS7ivk/Sc-wOuTQDSI/AAAAAAAAAf8/TLy8GLCGwTA/s1600-h/NBInstaller06.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_dqSd_vS7ivk/Sc-wOuTQDSI/AAAAAAAAAf8/TLy8GLCGwTA/s320/NBInstaller06.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 280px; height: 119px;" border="0" id="BLOGGER_PHOTO_ID_5318663451941276962" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;W katalogu &lt;span
      style="font-style: italic;"&gt;dist&lt;/span&gt; naszej aplikacji czeka na nas archiwum zip "*-installer-image.zip". Wystarczy je przesłać do klienta, który sobie je rozpakuje i uruchomi plik &lt;span style="font-style: italic;"&gt;installerLuncher&lt;/span&gt; (sh lub vbs w zależności od systemu). Instalator przeprowadzi użytkownika ukazując mu kolejne okna.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://3.bp.blogspot.com/_dqSd_vS7ivk/Sc-xg61aOTI/AAAAAAAAAgI/cee080Covo8/s1600-h/NBInstaller07.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_dqSd_vS7ivk/Sc-xg61aOTI/AAAAAAAAAgI/cee080Covo8/s320/NBInstaller07.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 71px;" border="0" id="BLOGGER_PHOTO_ID_5318664864055048498" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://2.bp.blogspot.com/_dqSd_vS7ivk/Sc-xhQUr78I/AAAAAAAAAgQ/hQeReFsgtMI/s1600-h/NBInstaller08.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_dqSd_vS7ivk/Sc-xhQUr78I/AAAAAAAAAgQ/hQeReFsgtMI/s320/NBInstaller08.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 223px;" border="0" id="BLOGGER_PHOTO_ID_5318664869823377346" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://3.bp.blogspot.com/_dqSd_vS7ivk/Sc-xhhszBGI/AAAAAAAAAgY/WND-793g15g/s1600-h/NBInstaller09.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_dqSd_vS7ivk/Sc-xhhszBGI/AAAAAAAAAgY/WND-793g15g/s320/NBInstaller09.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 223px;" border="0" id="BLOGGER_PHOTO_ID_5318664874487907426" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://3.bp.blogspot.com/_dqSd_vS7ivk/Sc-xhu1zP_I/AAAAAAAAAgg/PLgbnbBvCh8/s1600-h/NBInstaller10.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_dqSd_vS7ivk/Sc-xhu1zP_I/AAAAAAAAAgg/PLgbnbBvCh8/s320/NBInstaller10.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 223px;" border="0" id="BLOGGER_PHOTO_ID_5318664878015332338" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://2.bp.blogspot.com/_dqSd_vS7ivk/Sc-xhw-pn-I/AAAAAAAAAgo/ogIyG5FzrwA/s1600-h/NBInstaller11.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_dqSd_vS7ivk/Sc-xhw-pn-I/AAAAAAAAAgo/ogIyG5FzrwA/s320/NBInstaller11.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 223px;" border="0" id="BLOGGER_PHOTO_ID_5318664878589321186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://2.bp.blogspot.com/_dqSd_vS7ivk/Sc-x_EYMSdI/AAAAAAAAAhA/5NVyLe2VCRg/s1600-h/NBInstaller12.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_dqSd_vS7ivk/Sc-x_EYMSdI/AAAAAAAAAhA/5NVyLe2VCRg/s320/NBInstaller12.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 223px;" border="0" id="BLOGGER_PHOTO_ID_5318665382012930514" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://4.bp.blogspot.com/_dqSd_vS7ivk/Sc-yJTc9cDI/AAAAAAAAAhI/Hg0Jk9lcUFY/s1600-h/NBInstaller13.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_dqSd_vS7ivk/Sc-yJTc9cDI/AAAAAAAAAhI/Hg0Jk9lcUFY/s320/NBInstaller13.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 223px;" border="0" id="BLOGGER_PHOTO_ID_5318665557858152498" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://3.bp.blogspot.com/_dqSd_vS7ivk/Sc-yJ89CTuI/AAAAAAAAAhQ/bQaPx9pTxa4/s1600-h/NBInstaller14.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_dqSd_vS7ivk/Sc-yJ89CTuI/AAAAAAAAAhQ/bQaPx9pTxa4/s320/NBInstaller14.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 223px;" border="0" id="BLOGGER_PHOTO_ID_5318665568998543074" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Po przejściu tych kilku kroków aplikacja jest
      zainstalowana. &lt;br /&gt;&lt;br /&gt;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 &lt;a href="http://blogs.kiyut.com/tonny/2008/01/02/deploy-netbeans-platform-based-application-using-izpack-installer/"&gt;IzPack'a&lt;/a&gt;). 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.&lt;br /&gt;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.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/62160705063034256-1802278365885031568?l=marekklis.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Sun, 29 Mar 2009 17:51:08 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Services w NetBeans IDE 6.7 i NetCAT 6.7</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-5413053837318779522</guid>
      <link>http://blog.japila.pl/2009/03/services-w-netbeans-ide-67-i-netcat-67.html</link>
      <description>Jakimś cudem trafiłem do zakładki &lt;span style="font-weight: bold;"&gt;Services&lt;/span&gt; w &lt;a href="http://bits.netbeans.org/dev/nightly/latest/zip/"&gt;najnowszej wersji rozwojowej NetBeans 6.7&lt;/a&gt;. Ach, to było zapewne, po przeczytaniu wpisu Adama Biena o GlassFish v3 i Equinox &lt;a href="http://www.adam-bien.com/roller/abien/entry/interesting_announcement_glassfish_v3_can"&gt;Interesting announcement: Glassfish V3 Can Run On Equinox&lt;/a&gt;, albo może po tym, kiedy
      zauważyłem, że dawne paczki netbeans-trunk-nightly-&amp;lt;data&gt;.zip są teraz dostępne jako netbeans-trunk-nightly-&amp;lt;data&gt;-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.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_wSeV_DMR2uA/ScNQFUYr0oI/AAAAAAAACFU/2SkEgQgRr1w/s1600-h/nb-services.gif"&gt;&lt;img
      src="http://2.bp.blogspot.com/_wSeV_DMR2uA/ScNQFUYr0oI/AAAAAAAACFU/2SkEgQgRr1w/s320/nb-services.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 115px;" border="0" id="BLOGGER_PHOTO_ID_5315180037529129602" /&gt;&lt;/a&gt;I tutaj zdumienie - nie zastałem tego, czego oczekiwałem, tylko całkiem nowe węzły &lt;span style="font-weight: bold;"&gt;Hudson&lt;/span&gt; oraz &lt;span style="font-weight: bold;"&gt;Issue
      Tracking&lt;/span&gt;. Brakuje przynajmniej &lt;span style="font-weight: bold;"&gt;Servers&lt;/span&gt; (pewnie zasługa nowej funkcjonalności NetBeans 6.7 - Ergonomic IDE (czytaj o tym w &lt;a href="http://jlaskowski.blogspot.com/2009/03/ergonomic-ide-fitness-forever-netbeans.html"&gt;Ergonomic IDE == Fitness Forever == NetBeans Features on Demand &lt;/a&gt;), która włącza tylko te funkcjonalności, które są w danej chwili potrzebne/wymagane).&lt;br /&gt;&lt;br /&gt;Zobaczmy, jakie repozytoria są
      wspierane domyślnie przez &lt;span style="font-weight: bold;"&gt;Issue Tracking&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_wSeV_DMR2uA/ScNQfWv2EPI/AAAAAAAACFc/yai9Sgn9rWc/s1600-h/nb-create-repository.gif"&gt;&lt;img src="http://1.bp.blogspot.com/_wSeV_DMR2uA/ScNQfWv2EPI/AAAAAAAACFc/yai9Sgn9rWc/s320/nb-create-repository.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 166px;" border="0"
      id="BLOGGER_PHOTO_ID_5315180484839739634" /&gt;&lt;/a&gt;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 &lt;span style="font-weight: bold;"&gt;Tools -&gt; Plugins&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_wSeV_DMR2uA/ScNQrtZRcjI/AAAAAAAACFk/zyX99YPgUvA/s1600-h/nb-plugins.gif"&gt;&lt;img src="http://1.bp.blogspot.com/_wSeV_DMR2uA/ScNQrtZRcjI/AAAAAAAACFk/zyX99YPgUvA/s320/nb-plugins.gif"
      alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 189px;" border="0" id="BLOGGER_PHOTO_ID_5315180697077510706" /&gt;&lt;/a&gt;Coś się zmienia, to dobrze, ale jak to bywa, nie wszystkich można ustatysfakcjonować. Pewnie wsparcie dla JIRA będzie niebawem.&lt;br /&gt;&lt;br /&gt;Sprawdziłem Hudsona i skonfigurowałem go z &lt;span style="font-weight: bold;"&gt;http://deadlock.netbeans.org/hudson&lt;/span&gt;.&lt;br /&gt;&lt;br
      /&gt;&lt;a href="http://2.bp.blogspot.com/_wSeV_DMR2uA/ScNQ6VDb86I/AAAAAAAACFs/MvSCBZ-ko6E/s1600-h/nb-hudson.gif"&gt;&lt;img src="http://2.bp.blogspot.com/_wSeV_DMR2uA/ScNQ6VDb86I/AAAAAAAACFs/MvSCBZ-ko6E/s320/nb-hudson.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 294px;" border="0" id="BLOGGER_PHOTO_ID_5315180948241511330" /&gt;&lt;/a&gt;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?! ;-)&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://2.bp.blogspot.com/_wSeV_DMR2uA/ScNRTnTeyCI/AAAAAAAACF0/pYhXMD64czc/s1600-h/nb-yellow-icon-on-therightbelow.gif"&gt;&lt;img src="http://2.bp.blogspot.com/_wSeV_DMR2uA/ScNRTnTeyCI/AAAAAAAACF0/pYhXMD64czc/s320/nb-yellow-icon-on-therightbelow.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 294px;" border="0" id="BLOGGER_PHOTO_ID_5315181382637373474" /&gt;&lt;/a&gt;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...).&lt;br /&gt;&lt;br /&gt;A tak jeszcze w temacie, rozpoczęły się zapisy na kolejny &lt;a href="http://qa.netbeans.org/processes/cat/67"&gt;NetBeans Community Acceptance Tests (NetCAT) 6.7&lt;/a&gt;, 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ć &lt;span style="font-style: italic;"&gt;"hesitate to contact him in case of any questions."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Hello NetBeans fans,&lt;br /&gt;&lt;br /&gt; 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:&lt;br /&gt;&lt;br /&gt; * Connected Developer (Kenai integration)&lt;br /&gt; * Maven projects integration&lt;br /&gt; * Ergonomic IDE&lt;br /&gt; * Unified framework for integrating additional languages to the source code editor&lt;br /&gt; * Debugger improvements&lt;br /&gt; * Enhanced C/C++, Groovy, PHP, Ruby support&lt;br /&gt; * and much more...&lt;br
      /&gt;&lt;br /&gt;[1] &lt;a href="http://qa.netbeans.org/processes/cat/67"&gt;http://qa.netbeans.org/processes/cat/67&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Don't hesitate to contact me in case of any questions.&lt;br /&gt;&lt;br /&gt;Best regards,&lt;br /&gt;--&lt;br /&gt;Jiri Kovalsky&lt;br /&gt;Technical Community Manager&lt;br /&gt;http://www.netbeans.org&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;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 ;-)&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-5413053837318779522?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 20 Mar 2009 08:26:24 +0000</pubDate>
    </item>
    <item>
      <title>Marek Kliś - różności okołojavowe i nie tylko: NetBeans Platform Certified Training - dzień 2.</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-62160705063034256.post-3296442998694437091</guid>
      <link>http://marekklis.blogspot.com/2009/03/netbeans-platform-certified-training.html</link>
      <description>Drugi dzień szkolenia przebiegał pod znakiem "wyglądu" aplikacji napisanych na platformie.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_dqSd_vS7ivk/SawRgCTobOI/AAAAAAAAAd8/pfrTMZxWfh8/s1600-h/NBP17.JPG"&gt;&lt;img src="http://3.bp.blogspot.com/_dqSd_vS7ivk/SawRgCTobOI/AAAAAAAAAd8/pfrTMZxWfh8/s320/NBP17.JPG" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 239px; height: 320px;" border="0"
      id="BLOGGER_PHOTO_ID_5308637302835670242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pierwszy wykład należał do &lt;a href="http://blogs.sun.com/geertjan/"&gt;Geertjana&lt;/a&gt;, który opowiedział nam o systemie okien czyli &lt;a href="http://bits.netbeans.org/6.5/javadoc/org-openide-windows/overview-summary.html"&gt;Windows System API&lt;/a&gt;. Drugi wykład to &lt;a href="http://bits.netbeans.org/6.5/javadoc/org-openide-filesystems/overview-summary.html"&gt;System File System API&lt;/a&gt;, o którym
      opowiadał Karol. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dqSd_vS7ivk/SawRyv-tE7I/AAAAAAAAAeE/u00LAMrs-bQ/s1600-h/NBP11.JPG"&gt;&lt;img src="http://2.bp.blogspot.com/_dqSd_vS7ivk/SawRyv-tE7I/AAAAAAAAAeE/u00LAMrs-bQ/s320/NBP11.JPG" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 239px; height: 320px;" border="0" id="BLOGGER_PHOTO_ID_5308637624333570994" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Wykład Karola był
      przeplatany przykładami prezentowanymi przez &lt;a href="http://blogs.sun.com/geertjan/"&gt;Geertjana&lt;/a&gt;. W oczekiwaniu na pizzę oraz w ramach relaksu poruszone były tematy nie związane bezpośrednio z platformą czyli Groovy i Wicket.&lt;br /&gt;Jak widać na zdjęciach zrobionych podczas przerwy uczestnicy czuli nie tylko głód wiedzy ;)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dqSd_vS7ivk/SawRy_uoVvI/AAAAAAAAAeM/oEBR08-o9tg/s1600-h/NBP12.JPG"&gt;&lt;img
      src="http://2.bp.blogspot.com/_dqSd_vS7ivk/SawRy_uoVvI/AAAAAAAAAeM/oEBR08-o9tg/s320/NBP12.JPG" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 239px; height: 320px;" border="0" id="BLOGGER_PHOTO_ID_5308637628561118962" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dqSd_vS7ivk/SawRzRg-LgI/AAAAAAAAAeU/s0amVagbt5k/s1600-h/NBP15.JPG"&gt;&lt;img
      src="http://2.bp.blogspot.com/_dqSd_vS7ivk/SawRzRg-LgI/AAAAAAAAAeU/s0amVagbt5k/s320/NBP15.JPG" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 239px; height: 320px;" border="0" id="BLOGGER_PHOTO_ID_5308637633335668226" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Po przerwie przyszedł czas na omówienie jednej z ciekawszych i efektowniejszych bibliotek platformy czyli &lt;a
      href="http://bits.netbeans.org/6.5/javadoc/org-netbeans-api-visual/overview-summary.html"&gt;Visual Library&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SawRzlYorOI/AAAAAAAAAec/otaKBTMWq8o/s1600-h/NBP16.JPG"&gt;&lt;img src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SawRzlYorOI/AAAAAAAAAec/otaKBTMWq8o/s320/NBP16.JPG" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 239px; height: 320px;" border="0"
      id="BLOGGER_PHOTO_ID_5308637638669413602" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Następnie &lt;a href="http://blogs.sun.com/kharezlak/"&gt;Karol&lt;/a&gt; opowiedział nam jak wygląda jego praca w SUNie, czyli głównie poprawianie błędów zgłoszonych przez użytkowników w &lt;a href="http://www.netbeans.org/issues/query.cgi"&gt;Issuezilli&lt;/a&gt;. 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
      ;)&lt;br /&gt;Na koniec kilka pomysłów na moduły lub aplikacje, które pozwolą uczestnikom uzyskać certyfikat NetBeans Certified Engineer.&lt;br /&gt;Drugi dzień szkolenia zakończył się wcześniej niż pierwszy bo ok godziny 16.&lt;br /&gt;Uwagi uczestników szkolenia można przeczytać na grupie &lt;a href="http://groups.google.com/group/silesia-jug/browse_thread/thread/4df9f9e0f0464bda"&gt;Silesia JUG&lt;/a&gt;.&lt;br /&gt;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 &lt;a href="http://edu.netbeans.org/courses/nbplatform-certified-training/"&gt;szkolenia&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/62160705063034256-3296442998694437091?l=marekklis.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 02 Mar 2009 17:44:24 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Ergonomic IDE == Fitness Forever == NetBeans Features on Demand</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-8125267593376872612</guid>
      <link>http://blog.japila.pl/2009/03/ergonomic-ide-fitness-forever-netbeans.html</link>
      <description>Już podczas zabezpieczania aplikacji webowej ze Spring Security z rozwojową wersją NetBeans 6.7 (patrz &lt;a href="http://jaceklaskowski.pl/wiki/Proste_uwierzytelnianie_i_autoryzacja_w_aplikacji_webowej_ze_Spring_Security_w_15_minut"&gt;Proste uwierzytelnianie i autoryzacja w aplikacji webowej ze Spring Security w 15 minut&lt;/a&gt;) zaskoczyło mnie pewne zachowanie NetBeans, które polega na włączaniu jego funkcjonalności na żądanie - należy wcisnąć przycisk &lt;span style="font-weight:
      bold;"&gt;Activate&lt;/span&gt; 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 &lt;a href="http://www.warszawa.jug.pl"&gt;Warszawa JUG&lt;/a&gt; (to już w nadchodzący wtorek, 3 marca o 18-tej na MIMUWie!), pojawił się ponownie ekran z
      Activate.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_wSeV_DMR2uA/SasOzjd7YZI/AAAAAAAACDM/2UG7iuSSVAc/s1600-h/netbeans-findingfeature-activate.PNG"&gt;&lt;img src="http://3.bp.blogspot.com/_wSeV_DMR2uA/SasOzjd7YZI/AAAAAAAACDM/2UG7iuSSVAc/s320/netbeans-findingfeature-activate.PNG" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 246px;" border="0" id="BLOGGER_PHOTO_ID_5308352864643146130"
      /&gt;&lt;/a&gt;Wystarczy wcisnąć Activate, aby po chwili móc dalej kontynuować pracę.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_wSeV_DMR2uA/SasO8eM4HjI/AAAAAAAACDU/q5vqTKfB0Ag/s1600-h/netbeans-findingfeature-activating.PNG"&gt;&lt;img src="http://3.bp.blogspot.com/_wSeV_DMR2uA/SasO8eM4HjI/AAAAAAAACDU/q5vqTKfB0Ag/s320/netbeans-findingfeature-activating.PNG" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height:
      246px;" border="0" id="BLOGGER_PHOTO_ID_5308353017848274482" /&gt;&lt;/a&gt;Okazuje się, że ma to swoją nazwę - &lt;span style="font-weight: bold;"&gt;Ergonomic IDE&lt;/span&gt;, również nazywane &lt;a href="http://wiki.netbeans.org/FitnessForever"&gt;Fitness Forever&lt;/a&gt;, albo nawet &lt;span style="font-weight: bold;"&gt;NetBeans Features on Demand&lt;/span&gt;. Zainteresowanych odsyłam do dokumentu &lt;a
      href="http://wiki.netbeans.org/NewAndNoteworthyMilestone2NB67#section-NewAndNoteworthyMilestone2NB67-ErgonomicIDE"&gt;NetBeans 6.7M2's New and Noteworthy&lt;/a&gt;, 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.&lt;br /&gt;&lt;br /&gt;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.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-8125267593376872612?l=blog.japila.pl" alt="" height="1" width="1"
      /&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 02 Mar 2009 07:47:46 +0000</pubDate>
    </item>
    <item>
      <title>Marek Kliś - różności okołojavowe i nie tylko: NetBeans Platform Certified Training - dzień 1.</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-62160705063034256.post-4390322231388538657</guid>
      <link>http://marekklis.blogspot.com/2009/02/netbeans-platform-certified-training.html</link>
      <description>Pierwszy dzień szkolenia z platformy NetBeans właśnie za nami. Plan pierwszego dnia przedstawiał się następująco:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_dqSd_vS7ivk/SambOU2WYOI/AAAAAAAAAdU/QSiBADxMAvI/s1600-h/NBP_plan1.JPG"&gt;&lt;img src="http://3.bp.blogspot.com/_dqSd_vS7ivk/SambOU2WYOI/AAAAAAAAAdU/QSiBADxMAvI/s320/NBP_plan1.JPG" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 239px; height: 320px;"
      border="0" id="BLOGGER_PHOTO_ID_5307944306249982178" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Szkolenie zaczęło się od krótkiego wstępu &lt;a href="http://blogs.sun.com/geertjan/"&gt;Geertjana&lt;/a&gt;. Następnie miejsce na "mównicy" zajął &lt;a href="http://blogs.sun.com/kharezlak/"&gt;Karol&lt;/a&gt; i opowiedział o korzyściach wynikających z używania platformy. Jego wystąpienie było przerywane przykładami pokazywanymi przez &lt;a href="http://blogs.sun.com/geertjan/"&gt;Geertjana&lt;/a&gt;. 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 ;)&lt;br /&gt;Po
      przerwie Piotr Tabor opowiedział o swoim &lt;a href="http://code.google.com/p/protobuf-netbeans-plugin/"&gt;projekcie&lt;/a&gt; edytora.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_dqSd_vS7ivk/Samb6Qq6pGI/AAAAAAAAAdc/HtB_SrCSiYM/s1600-h/NBP02.JPG"&gt;&lt;img src="http://3.bp.blogspot.com/_dqSd_vS7ivk/Samb6Qq6pGI/AAAAAAAAAdc/HtB_SrCSiYM/s320/NBP02.JPG" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 239px; height: 320px;"
      border="0" id="BLOGGER_PHOTO_ID_5307945061042529378" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Jak widać momentami nawet prowadzący byli zaciekawieni ;)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_dqSd_vS7ivk/Samb6n4SKUI/AAAAAAAAAdk/RYPxrPyzTiQ/s1600-h/NBP03.JPG"&gt;&lt;img src="http://4.bp.blogspot.com/_dqSd_vS7ivk/Samb6n4SKUI/AAAAAAAAAdk/RYPxrPyzTiQ/s320/NBP03.JPG" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 239px;
      height: 320px;" border="0" id="BLOGGER_PHOTO_ID_5307945067272612162" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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ć.&lt;br /&gt;Przedostatnim punktem było moje króciutkie i nieoficjalne wystąpienie pokazujące pewne komercyjne zastosowanie platformy.&lt;br /&gt;Na ostatnim wykładzie Geertjan opowiadał jak wygląda w platformie "model danych" czyli Nodes API oraz Explorer &amp;amp;
      Properties API oraz pokazywał to na praktycznym przykładzie.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_dqSd_vS7ivk/SamcPeeutoI/AAAAAAAAAds/HsGVF7t7A-c/s1600-h/NBP05.JPG"&gt;&lt;img src="http://3.bp.blogspot.com/_dqSd_vS7ivk/SamcPeeutoI/AAAAAAAAAds/HsGVF7t7A-c/s320/NBP05.JPG" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 239px;" border="0" id="BLOGGER_PHOTO_ID_5307945425526765186" /&gt;&lt;/a&gt;&lt;br
      /&gt;&lt;br /&gt;Kilka słów na temat pierwszego dnia możecie także przeczytać na blogu &lt;a href="http://blogs.sun.com/geertjan/entry/gliwice_on_the_netbeans_platform"&gt;Geertjana&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;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
      ;)&lt;br /&gt;&lt;br /&gt;PS. Na SUNowskiej stronie &lt;a href="http://community.java.net/jugs/"&gt;JUGów&lt;/a&gt; jest ciekawa ankieta. Pytanie: &lt;span style="font-style: italic;"&gt;Przez kogo wg Ciebie powinna być reprezentowana społeczność JUG na JavaOne&lt;/span&gt;. Jedna z osób wydaje mi znajoma ;)&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/62160705063034256-4390322231388538657?l=marekklis.blogspot.com" alt="" height="1" width="1"
      /&gt;&lt;/div&gt;</description>
      <pubDate>Sat, 28 Feb 2009 20:30:05 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Groovy 1.6, Grails 1.1 RC2, GAnt 1.6.1 i NetBeans 6.7 M2</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-5039190607885678603</guid>
      <link>http://blog.japila.pl/2009/02/groovy-16-grails-11-rc2-gant-161-i.html</link>
      <description>Na grupie &lt;a href="http://archive.hausfoundation.org/lists/org.codehaus.grails.user/browse"&gt;użytkowników Grails&lt;/a&gt; pojawiła się wiadomość Petra Hejla &lt;a href="http://archive.hausfoundation.org/lists/org.codehaus.grails.user/msg/49A55F5D.5050508@Sun.com"&gt;Groovy/Grails &amp;amp; NetBeans 6.7 M2&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; 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.&lt;br /&gt;&lt;br /&gt; http://bits.netbeans.org/download/6.7/m2/&lt;br /&gt; http://wiki.netbeans.org/NewAndNoteworthyMilestone2NB67&lt;br /&gt; http://blogs.sun.com/phejl/entry/groovy_and_grails_in_netbeans&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Właśnie pobieram ostatnią wersję rozwojową NetBeans 6.7 - &lt;a
      href="http://bits.netbeans.org/dev/nightly/latest/zip"&gt;netbeans-trunk-nightly-200902270313.zip&lt;/a&gt;, 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 &lt;a href="http://wiki.netbeans.org/NewAndNoteworthyMilestone2NB67#section-NewAndNoteworthyMilestone2NB67-GroovyAndGrails"&gt;NewAndNoteworthyMilestone2NB67/ Groovy and Grails&lt;/a&gt; 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 &lt;span style="font-weight: bold;"&gt;Grails 1.1 RC1&lt;/span&gt;? A na dniach (jutro, 28.02) możemy spodziewać się RC2. Niecierpliwi mogą już zapoznać się ze szkicem &lt;a href="http://grails.org/1.1-RC2+Release+Notes"&gt;Grails 1.1 RC2 Release
      Notes&lt;/a&gt;. Poza tym mamy nowiuteńkie wersje &lt;a href="http://groovy.codehaus.org/"&gt;Groovy 1.6&lt;/a&gt; oraz (niezmieniony funkcjonalnie, aczkolwiek przebudowany z nową wersją Groovy 1.6) &lt;a href="http://gant.codehaus.org/"&gt;GAnt 1.6.1&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;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ć?!&lt;div
      class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-5039190607885678603?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 27 Feb 2009 21:55:17 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: NetBeans 6.7 zamiast NetBeans 7.0 i Spring Security w 15 minut</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-8429908942574339094</guid>
      <link>http://blog.japila.pl/2009/02/netbeans-67-zamiast-netbeans-70-i.html</link>
      <description>Pojawił się komunikat o nowych wersjach NetBeans IDE numerowanych...&lt;span style="font-weight: bold;"&gt;6.7&lt;/span&gt;. 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 &lt;a href="http://www.nabble.com/Message-from-the-NetBeans-Team---Why-NetBeans-6.7--td22105051.html"&gt;"Message from the NetBeans Team - Why NetBeans 6.7?"&lt;/a&gt;, z czego najważniejsze to:&lt;br /&gt;&lt;br
      /&gt;&lt;span style="font-style: italic;"&gt;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.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;oraz&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;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.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;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 &lt;a href="http://www.netbeans.org/issues/show_bug.cgi?id=158626"&gt;Change cluster nb7.0 to nb6.7&lt;/a&gt;. Miałem w ten sposób okazję powyjaśniać sobie wiele z pojęć NetBeans, chociażby cluster. Jeśli dobrze rozumiem, pojęcie &lt;span style="font-weight: bold;"&gt;cluster&lt;/span&gt; oznacza zbiór modułów (ang. &lt;span style="font-style: italic;"&gt;NBM - NetBeans Modules&lt;/span&gt;) w NetBeans (potwierdza to chociażby &lt;a
      href="http://wiki.netbeans.org/DevFaqWhatIsACluster"&gt;What is a Cluster?&lt;/a&gt;). 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 &lt;span style="font-weight: bold;"&gt;nb67&lt;/span&gt; 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
      &lt;span style="font-weight: bold;"&gt;nb6.7/core/locale/core_nb.jar&lt;/span&gt;, a w nim do &lt;span style="font-weight: bold;"&gt;org/netbeans/core/startup&lt;/span&gt;, gdzie mamy (zrzut z wersji rozwojowej z 23. stycznia):&lt;pre&gt; jlaskowski@work /cygdrive/c/apps/netbeans/nb6.7/core/locale&lt;br /&gt; $ jar -tf core_nb.jar org/netbeans/core/startup/&lt;br /&gt; org/netbeans/core/startup/&lt;br /&gt; org/netbeans/core/startup/Bundle_nb.properties&lt;br /&gt;
      org/netbeans/core/startup/about_nb.png&lt;br /&gt; org/netbeans/core/startup/frame32_nb.gif&lt;br /&gt; org/netbeans/core/startup/frame48_nb.gif&lt;br /&gt; org/netbeans/core/startup/frame_nb.gif&lt;br /&gt; org/netbeans/core/startup/splash_nb.gif&lt;/pre&gt;Zamiast zrzutów ekranu, aby umieścić logo lub ekran powitalny NetBeans, można po prostu sięgnąć do odpowiedniego pliku w klastrze nb67.&lt;br /&gt;&lt;br /&gt;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 &lt;a href="http://www.jaceklaskowski.pl/wiki/Proste_uwierzytelnianie_i_autoryzacja_w_aplikacji_webowej_ze_Spring_Security_w_15_minut"&gt;Proste uwierzytelnianie i autoryzacja w aplikacji webowej ze Spring Security w 15 minut&lt;/a&gt;. Kolejny artykuł zaplanowałem z użyciem &lt;a href="http://www.jasig.org/cas"&gt;CAS&lt;/a&gt; i &lt;a
      href="http://pl.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol"&gt;LDAP&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Zastanawiam się, czy tego typu wiedzę nie łatwiej byłoby przyswoić w postaci filmu (z &lt;a href="http://debugmode.com/wink/"&gt;Wink&lt;/a&gt; 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 &lt;a href="http://webankieta.pl/ankiety/w1hpsfwdkopu"&gt;Czy artykuł z dużą ilością zrzutów ekranów nie powinien być filmem?&lt;/a&gt;, w której zbieram głosy przez kolejny tydzień.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-8429908942574339094?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 23 Feb 2009 22:02:00 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: JavaFX 1.1 z NetBeans 7.0 DEV</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-4579087851281639326</guid>
      <link>http://blog.japila.pl/2009/02/javafx-11-z-netbeans-70-dev.html</link>
      <description>Biorę udział w bezpłatnym szkoleniu z JavaFX - &lt;a href="http://www.javapassion.com/javafx/"&gt;"Free" 15-Week JavaFX Programming (with Passion!) Online Course&lt;/a&gt; (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ą &lt;a href="http://bits.netbeans.org/dev/nightly/latest/zip/"&gt;NetBeans 7.0 DEV&lt;/a&gt;.&lt;br /&gt;&lt;br
      /&gt;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 &lt;span style="font-style: italic;"&gt;"zdaje"&lt;/span&gt;, gdyż moja znajomość JavaFX sprowadziła się do
      popróbowania się z kilkoma niewielkimi funkcjonalnie skryptami).&lt;br /&gt;&lt;br /&gt;Zakładam, że NetBeans IDE 7.0 DEV jest już gotowe do użycia (=rozpakowane).&lt;br /&gt;&lt;br /&gt;Wybieramy menu &lt;span style="font-weight: bold;"&gt;Tools &gt; Plugins&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_wSeV_DMR2uA/SZrENH3ZKRI/AAAAAAAACCY/gITRLsUifRo/s1600-h/netbeans-tools-plugins.gif"&gt;&lt;img
      src="http://2.bp.blogspot.com/_wSeV_DMR2uA/SZrENH3ZKRI/AAAAAAAACCY/gITRLsUifRo/s320/netbeans-tools-plugins.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 279px; height: 303px;" border="0" id="BLOGGER_PHOTO_ID_5303767240910907666" /&gt;&lt;/a&gt;&lt;br /&gt;W okienku dialogowym &lt;span style="font-weight: bold;"&gt;Plugins&lt;/span&gt; wybieramy zakładkę &lt;span style="font-weight: bold;"&gt;Settings&lt;/span&gt;, gdzie definiujemy
      nowe repozytorium modułów (centrum aktualizacji, ang. &lt;span style="font-style: italic;"&gt;Update Center&lt;/span&gt;) - &lt;span style="font-weight: bold;"&gt;NetBeans 6.5 Updates&lt;/span&gt; pod adresem &lt;span style="font-weight: bold;"&gt;http://updates.netbeans.org/netbeans/updates/6.5/uc/final/stable/catalog.xml.gz&lt;/span&gt;. To jest dokładnie to samo repozytorium, które jest domyślnie dostępne w NetBeans 6.5.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://3.bp.blogspot.com/_wSeV_DMR2uA/SZrHqGc6YyI/AAAAAAAACCw/Hf5l3k5zXcc/s1600-h/netbeans-uc-customizer.gif"&gt;&lt;img src="http://3.bp.blogspot.com/_wSeV_DMR2uA/SZrHqGc6YyI/AAAAAAAACCw/Hf5l3k5zXcc/s320/netbeans-uc-customizer.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 113px;" border="0" id="BLOGGER_PHOTO_ID_5303771037282493218" /&gt;&lt;/a&gt;&lt;br /&gt;Wciskamy przycisk &lt;span style="font-weight:
      bold;"&gt;OK&lt;/span&gt;. Na liście centrów aktualizacji powinny być teraz 3 pozycje, w tym jedna nasza.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SZrHXHLjgZI/AAAAAAAACCo/lqJZbP53d2Q/s1600-h/netbeans-uc.gif"&gt;&lt;img src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SZrHXHLjgZI/AAAAAAAACCo/lqJZbP53d2Q/s320/netbeans-uc.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 206px;" border="0"
      id="BLOGGER_PHOTO_ID_5303770711060611474" /&gt;&lt;/a&gt;&lt;br /&gt;Przechodzimy do zakładki &lt;span style="font-weight: bold;"&gt;Available Plugins&lt;/span&gt; i w polu &lt;span style="font-weight: bold;"&gt;Search&lt;/span&gt; (prawy górny róg) wpisujemy &lt;span style="font-weight: bold;"&gt;javafx&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SZrI1vkxTaI/AAAAAAAACC4/x3lco9sBMJE/s1600-h/netbeans-javafx-plugins.gif"&gt;&lt;img
      src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SZrI1vkxTaI/AAAAAAAACC4/x3lco9sBMJE/s320/netbeans-javafx-plugins.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 187px;" border="0" id="BLOGGER_PHOTO_ID_5303772336811494818" /&gt;&lt;/a&gt;&lt;br /&gt;Wybieramy wszystkie 3 moduły i wciskamy przycisk &lt;span style="font-weight: bold;"&gt;Install&lt;/span&gt; (dolny lewy róg).&lt;br /&gt;&lt;br /&gt;Po (dłuższej) chwili moduły
      zostaną zainstalowane i zostaniemy poproszeni o ponowne uruchomienie NetBeansa. Oczywiście zgadzamy się.&lt;br /&gt;&lt;br /&gt;Z zainstalowanymi modułami JavaFX wystarczy &lt;span style="font-weight: bold;"&gt;Ctrl+Shift+N&lt;/span&gt; i wybieramy odpowiedni rodzaj projektu JavaFX. Przeczytałem &lt;a href="http://java.sun.com/javafx/1/tutorials/core/getStarted/"&gt;Lesson 1: Getting Started with JavaFX Script&lt;/a&gt;, sprawdziłem i działa zgodnie z oczekiwaniami. Inne skrypty również działały.
      Miłego JeFiXowania!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SZrHFTs63cI/AAAAAAAACCg/vs_XmN6tSwQ/s1600-h/nb7dev-javafx.gif"&gt;&lt;img src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SZrHFTs63cI/AAAAAAAACCg/vs_XmN6tSwQ/s320/nb7dev-javafx.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 268px;" border="0" id="BLOGGER_PHOTO_ID_5303770405184134594" /&gt;&lt;/a&gt;&lt;div
      class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-4579087851281639326?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Tue, 17 Feb 2009 21:51:01 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Grails w NetBeans IDE 7.0M1</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-5783548731611929970</guid>
      <link>http://blog.japila.pl/2009/01/grails-w-netbeans-ide-70m1.html</link>
      <description>Jakby na życzenie najpierw przypomniałem sobie o darmowym GroovyMag na &lt;a href="http://dworld.pl/2008/12/15/groovymag-za-darmo-dla-jugow/"&gt;Developers World&lt;/a&gt;, aby później natrafić na dokument &lt;a href="http://www.netbeans.org/kb/docs/java/groovy-quickstart.html"&gt;Introduction to Groovy&lt;/a&gt;, kiedy uruchomiłem &lt;span style="font-weight: bold;"&gt;NetBeans IDE 7.0M1&lt;/span&gt; (a już miałem rozpocząć poznawanie Grailsów z poziomu IntelliJ IDEA 8.0.1). Chwila
      lektury &lt;a href="http://www.grails.org/NetBeans+Integration"&gt;Grails Quick Start in NetBeans IDE&lt;/a&gt; i nie było co dalej czekać. Pobrałem &lt;a href="http://www.grails.org/Download"&gt;Grails 1.1-beta2&lt;/a&gt; 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ą.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl+Shift+N&lt;/span&gt; i wybieramy &lt;span style="font-weight: bold;"&gt;Groovy/Grails Application&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SWWjJhtv74I/AAAAAAAAB-Q/tKMVq9v5mY4/s1600-h/netbeans-new-grails-project.PNG"&gt;&lt;img src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SWWjJhtv74I/AAAAAAAAB-Q/tKMVq9v5mY4/s320/netbeans-new-grails-project.PNG" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 218px;" border="0" id="BLOGGER_PHOTO_ID_5288812721480920962" /&gt;&lt;/a&gt;aby po chwili mieć gotową aplikację grailsową.&lt;br /&gt;&lt;br
      /&gt;Wcześniej zdefiniowałem GRAILS_HOME i PATH, aby można było wykonywać polecenie &lt;span style="font-weight: bold;"&gt;grails&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Teraz już tylko &lt;span style="font-weight: bold;"&gt;Run&lt;/span&gt; w menu kontekstowym (menu pod prawym klawiszem myszki)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SWWjb3Kl4sI/AAAAAAAAB-Y/cJ6Lfsf8caY/s1600-h/netbeans-grails-run.png"&gt;&lt;img
      src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SWWjb3Kl4sI/AAAAAAAAB-Y/cJ6Lfsf8caY/s320/netbeans-grails-run.png" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 195px; height: 320px;" border="0" id="BLOGGER_PHOTO_ID_5288813036476687042" /&gt;&lt;/a&gt;i pojawia się okienko przeglądarki z aplikacją grailsową&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SWWjit_ewmI/AAAAAAAAB-g/f2X3lJQf364/s1600-h/firefox-grails.PNG"&gt;&lt;img
      src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SWWjit_ewmI/AAAAAAAAB-g/f2X3lJQf364/s320/firefox-grails.PNG" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 186px;" border="0" id="BLOGGER_PHOTO_ID_5288813154273247842" /&gt;&lt;/a&gt;Stworzyłem klasę Book oraz BookControllera zgodnie z instrukcjami w &lt;a href="http://www.grails.org/NetBeans+Integration"&gt;Grails Quick Start in NetBeans IDE&lt;/a&gt;. Niestety, nie dane mi było po prostu
      Run, aby uruchomić aplikację, ale musiałem ją zatrzymać w &lt;span style="font-weight: bold;"&gt;Services/Servers/Jetty (Gails 1.1-beta2)&lt;/span&gt; i wdrożyć ponownie (&lt;span style="font-weight: bold;"&gt;Run&lt;/span&gt;). W końcu pojawiły się zmiany.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SWWjrCDIY4I/AAAAAAAAB-o/aDw7CCBSf_g/s1600-h/grails-bookcontroller.PNG"&gt;&lt;img
      src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SWWjrCDIY4I/AAAAAAAAB-o/aDw7CCBSf_g/s320/grails-bookcontroller.PNG" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 172px;" border="0" id="BLOGGER_PHOTO_ID_5288813297096221570" /&gt;&lt;/a&gt;a później dokładnie jak opisano w dokumentacji.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_wSeV_DMR2uA/SWWjzOMuINI/AAAAAAAAB-w/WZ_5Pef3v5M/s1600-h/grails-book-list.PNG"&gt;&lt;img
      src="http://2.bp.blogspot.com/_wSeV_DMR2uA/SWWjzOMuINI/AAAAAAAAB-w/WZ_5Pef3v5M/s320/grails-book-list.PNG" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 172px;" border="0" id="BLOGGER_PHOTO_ID_5288813437796622546" /&gt;&lt;/a&gt;Z poziomu NetBeans IDE możemy zainstalować wtyczki grailsowe - menu kontekstowe &lt;span style="font-weight: bold;"&gt;Grails Plugins...&lt;/span&gt; (patrz wyżej).&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SWWj4j2zL8I/AAAAAAAAB-4/w0zLknpQRLI/s1600-h/grails-plugins-wicket.PNG"&gt;&lt;img src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SWWj4j2zL8I/AAAAAAAAB-4/w0zLknpQRLI/s320/grails-plugins-wicket.PNG" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 260px;" border="0" id="BLOGGER_PHOTO_ID_5288813529509605314" /&gt;&lt;/a&gt;Jedna jest związana z &lt;a href="http://wicket.apache.org"&gt;Apache
      Wicket&lt;/a&gt;, więc już wiem czym się zajmę.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-5783548731611929970?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 08 Jan 2009 06:58:52 +0000</pubDate>
    </item>
    <item>
      <title>Marek Kliś - różności okołojavowe i nie tylko: Własny komponent na pasku statusu w NetBeans</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-62160705063034256.post-3483660081721862285</guid>
      <link>http://marekklis.blogspot.com/2008/12/wasny-komponent-na-pasku-statusu.html</link>
      <description>W jaki sposób dodać coś własnego do paska statusu aplikacji napisanej przy pomocy &lt;a href="http://platform.netbeans.org"&gt;platformy NetBeans&lt;/a&gt; (czyli np do &lt;a href="http://www.netbeans.org"&gt;NetBeans IDE&lt;/a&gt;)?&lt;br /&gt;W tym celu musimy stworzyć klasę implementującą interfejs &lt;a href="http://bits.netbeans.org/6.5/javadoc/org-openide-awt/org/openide/awt/StatusLineElementProvider.html"&gt;StatusLineElementProvider&lt;/a&gt;. Interfejs ten definiuje tylko jedną
      metodę &lt;span style="font-style: italic;"&gt;Component getStatusLineElement()&lt;/span&gt;. Metoda zwraca komponent, który ma być umieszczony na pasku statusu.&lt;br /&gt;Stwórzmy więc jakiś przykładowy projekt modułu z komponentem dla paska statusu.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SU0-PE-dOGI/AAAAAAAAAbM/qoY38LsRnow/s1600-h/project.png"&gt;&lt;img src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SU0-PE-dOGI/AAAAAAAAAbM/qoY38LsRnow/s320/project.png" alt=""
      style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 246px;" border="0" id="BLOGGER_PHOTO_ID_5281946366730123362" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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 &lt;span style="font-style: italic;"&gt;MyStatusLine&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;W
      tym przypadku komponentem jest zwykły JPanel z JLabelem (label z jakimś tekstem i ikoną). Po przejściu do źródła klasy &lt;span style="font-style: italic;"&gt;StatusLineElement&lt;/span&gt; musimy dopisać implementację interfejsu &lt;span style="font-style: italic;"&gt;StatusLineElementProvider&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;package org.myorg.status;&lt;br /&gt;&lt;br /&gt;import java.awt.Component;&lt;br /&gt;import
      org.openide.awt.StatusLineElementProvider;&lt;br /&gt;&lt;br /&gt;public class StatusLineElement extends javax.swing.JPanel implements StatusLineElementProvider {&lt;br /&gt;&lt;br /&gt; public StatusLineElement() {&lt;br /&gt; initComponents();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public Component getStatusLineElement() {&lt;br /&gt; return this;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; ...&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Aby nasza aplikacja "dowiedziała" się o
      nowym komponencie musimy ją o tym poinformować tworząc w katalogu &lt;span style="font-style: italic;"&gt;META-INF/services&lt;/span&gt; plik o nazwie takiej jak implementowany przez nas interfejs czyli &lt;span style="font-style: italic;"&gt;org.openide.awt.StatusLineElementProvider&lt;/span&gt;. Treścią tego pliku będzie pełna nazwa klasy implementującej ten interfejs czyli &lt;span style="font-style: italic;"&gt;org.myorg.status.StatusLineElement&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Po
      uruchomieniu aplikacji na pasku powinien znajdować się nasz komponent.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dqSd_vS7ivk/SU09KZ-xR0I/AAAAAAAAAbE/ISPJW9ordXk/s1600-h/sampleapp.png"&gt;&lt;img src="http://2.bp.blogspot.com/_dqSd_vS7ivk/SU09KZ-xR0I/AAAAAAAAAbE/ISPJW9ordXk/s320/sampleapp.png" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 186px;" border="0" id="BLOGGER_PHOTO_ID_5281945186957608770"
      /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/62160705063034256-3483660081721862285?l=marekklis.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Sat, 20 Dec 2008 19:01:35 +0000</pubDate>
    </item>
    <item>
      <title>Marek Kliś - różności okołojavowe i nie tylko: Progress API</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-62160705063034256.post-4162956635176494850</guid>
      <link>http://marekklis.blogspot.com/2008/12/progress-api.html</link>
      <description>Progress API jest malutką ale użyteczną biblioteką wchodzącą w skład platformy &lt;a href="http://www.netbeans.org"&gt;NetBeans&lt;/a&gt; i oferującą programiście dostęp do paska postępu przydatnego przy długich zadaniach wykonywanych w tle.&lt;br /&gt;To co nas będzie interesowało to &lt;a href="http://bits.netbeans.org/6.5/javadoc/org-netbeans-api-progress/org/netbeans/api/progress/ProgressHandleFactory.html"&gt;ProgressHandleFactory&lt;/a&gt; oraz &lt;a
      href="http://bits.netbeans.org/6.5/javadoc/org-netbeans-api-progress/org/netbeans/api/progress/ProgressHandle.html"&gt;ProgressHandle&lt;/a&gt;.&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;public void startMyTask() {&lt;br /&gt; Runnable runnable = new Runnable() {&lt;br /&gt; public void run() {&lt;br /&gt; ProgressHandle handle = ProgressHandleFactory.createHandle(&lt;br /&gt; "Moje długie zadanie");&lt;br /&gt; int count = 57;&lt;br /&gt; handle.start(count);&lt;br /&gt; for(int i =
      0; i &amp;lt; count; i++){&lt;br /&gt; &#160;&#160;&#160;&#160;&#160; handle.progress(i);&lt;br /&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160; if(i &gt; (count/2)){&lt;br /&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; handle.progress("Połowa zadania już za nami");&lt;br /&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }&lt;br /&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; try {&lt;br /&gt; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
      Thread.sleep(200);&lt;br /&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; } catch (InterruptedException ex) {&lt;br /&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Exceptions.printStackTrace(ex);&lt;br /&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }&lt;br /&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }&lt;br /&gt;&#160;&#160;&#160;&#160;&#160; handle.finish();&lt;br /&gt;&#160;&#160;&#160; }&lt;br /&gt; };&lt;br /&gt; (new
      Thread(runnable)).start();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Uruchomienie powyższej metody spowoduje pokazanie się paska postępu w prawym dolnym rogu aplikacji.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_dqSd_vS7ivk/SUQjIVisI6I/AAAAAAAAAas/83gGqwBWU-I/s1600-h/pgbar02.png"&gt;&lt;img src="http://4.bp.blogspot.com/_dqSd_vS7ivk/SUQjIVisI6I/AAAAAAAAAas/83gGqwBWU-I/s320/pgbar02.png" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer;
      cursor: hand; width: 320px; height: 198px;" border="0" id="BLOGGER_PHOTO_ID_5279383289313633186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Po kliknięciu na pasek postępu możemy zobaczyć także informacje szczegółowe na temat wykonywanego zadania.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SUQjIY2RHWI/AAAAAAAAAa0/nBGxQ07JlWU/s1600-h/pgbar01.png"&gt;&lt;img src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SUQjIY2RHWI/AAAAAAAAAa0/nBGxQ07JlWU/s320/pgbar01.png" alt="" style="display:
      block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 74px;" border="0" id="BLOGGER_PHOTO_ID_5279383290201054562" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;handle.start(count)&lt;/span&gt; uruchamia pasek postępu informując go z ilu kroków będzie się składać zadanie. &lt;span style="font-style: italic;"&gt;handle.progress(i)&lt;/span&gt; informuje ile kroków już mamy za sobą, &lt;span style="font-style:
      italic;"&gt;handle.progress("Połowa zadania już za nami")&lt;/span&gt; dodaje opis do widoku szczegółowego zadania, &lt;span style="font-style: italic;"&gt;handle.finish()&lt;/span&gt; kończy i ukrywa pasek.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/62160705063034256-4162956635176494850?l=marekklis.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Sat, 13 Dec 2008 21:10:32 +0000</pubDate>
    </item>
    <item>
      <title>Marek Kliś - różności okołojavowe i nie tylko: NetBeans na skróty w edytorze</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-62160705063034256.post-2687360617144753864</guid>
      <link>http://marekklis.blogspot.com/2008/12/netbeans-na-skrty-w-edytorze.html</link>
      <description>Chciałbym dzisiaj przybliżyć kilka pomocnych (według mnie) skrótów klawiszowych w edytorze NetBeans.&lt;br /&gt;&lt;br /&gt;1. &lt;span style="font-weight: bold;"&gt;Ctrl+/&lt;/span&gt; dodawanie/usuwanie komentarza z linijek wchodzących w skład zaznaczonego obszaru.&lt;br /&gt;&lt;br /&gt;2. &lt;span style="font-weight: bold;"&gt;Ctrl+E&lt;/span&gt; usuwanie linii kodu wchodzących w skład zaznaczonego obszaru. Bez zaznaczenia usunięcie tylko jednej linii.&lt;br /&gt;&lt;br /&gt;3.
      &lt;span style="font-weight: bold;"&gt;Alt+Shift+Up/Down&lt;/span&gt; przesunięcie linii (lub zaznaczonego fragmentu) w górę/dół.&lt;br /&gt;&lt;br /&gt;4. &lt;span style="font-weight: bold;"&gt;Ctrl+Shift+Up/Down&lt;/span&gt; skopiowanie linii (lub zaznaczonego fragmentu) powyżej/poniżej.&lt;br /&gt;&lt;br /&gt;5. &lt;span style="font-weight: bold;"&gt;Alt+Insert&lt;/span&gt; Generator kodu.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbe3MkcKCI/AAAAAAAAAY8/NrfpJzPln7M/s1600-h/pkt_05.png"&gt;&lt;img src="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbe3MkcKCI/AAAAAAAAAY8/NrfpJzPln7M/s320/pkt_05.png" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 121px;" border="0" id="BLOGGER_PHOTO_ID_5275649053359351842" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6. &lt;span style="font-weight: bold;"&gt;Ctrl+R&lt;/span&gt; Zmiana
      nazwy.&lt;br /&gt;&lt;br /&gt;7. &lt;span style="font-weight: bold;"&gt;Ctrl+F3&lt;/span&gt; Szukanie wystąpień słowa.&lt;br /&gt;7a. &lt;span style="font-weight: bold;"&gt;F3/Shift+F3&lt;/span&gt; Następne/poprzednie wystąpienie szukanego słowa.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbe3XMXICI/AAAAAAAAAZE/TmvM7k4Wwfw/s1600-h/pkt_07.png"&gt;&lt;img src="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbe3XMXICI/AAAAAAAAAZE/TmvM7k4Wwfw/s320/pkt_07.png" alt="" style="display:
      block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 125px;" border="0" id="BLOGGER_PHOTO_ID_5275649056211148834" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;8. &lt;span style="font-weight: bold;"&gt;Alt+F7&lt;/span&gt; Wyszukiwanie użycia metody/zmiennej.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dqSd_vS7ivk/STbe3a7ASQI/AAAAAAAAAZM/9PcmnCgQQQM/s1600-h/pkt_08.png"&gt;&lt;img
      src="http://2.bp.blogspot.com/_dqSd_vS7ivk/STbe3a7ASQI/AAAAAAAAAZM/9PcmnCgQQQM/s320/pkt_08.png" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 184px;" border="0" id="BLOGGER_PHOTO_ID_5275649057212090626" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;9. &lt;span style="font-weight: bold;"&gt;Alt+Shift+F&lt;/span&gt; Formatowanie kodu.&lt;br /&gt;&lt;br /&gt;10. &lt;span style="font-weight: bold;"&gt;Ctrl+Tab&lt;/span&gt;
      Przełączanie pomiędzy otwartymi edytorami.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbe3ndm6WI/AAAAAAAAAZU/x412-I9XBrU/s1600-h/pkt_10.png"&gt;&lt;img src="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbe3ndm6WI/AAAAAAAAAZU/x412-I9XBrU/s320/pkt_10.png" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 254px;" border="0" id="BLOGGER_PHOTO_ID_5275649060578453858" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br
      /&gt;11. &lt;span style="font-weight: bold;"&gt;Shift+Esc&lt;/span&gt; Przełączenie aktualnego okna pomiędzy dużym a małym rozmiarem.&lt;br /&gt;&lt;br /&gt;12. &lt;span style="font-weight: bold;"&gt;Ctrl+O&lt;/span&gt; Wyszukiwanie klasy do edycji.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbe3n3GqqI/AAAAAAAAAZc/fpyMeowgcfo/s1600-h/pkt_12.png"&gt;&lt;img src="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbe3n3GqqI/AAAAAAAAAZc/fpyMeowgcfo/s320/pkt_12.png" alt=""
      style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 254px;" border="0" id="BLOGGER_PHOTO_ID_5275649060685392546" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;13. &lt;span style="font-weight: bold;"&gt;Ctrl+Q&lt;/span&gt; Powrót do ostatnio edytowanego miejsca.&lt;br /&gt;&lt;br /&gt;14. &lt;span style="font-weight: bold;"&gt;Ctrl+Shift+I&lt;/span&gt; Dodanie brakujących importów.&lt;br /&gt;14a. &lt;span style="font-weight:
      bold;"&gt;Alt+Enter&lt;/span&gt; Rozwinięcie menu dla podpowiedzi np dla "&lt;span style="font-style: italic;"&gt;żaróweczki&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbfZbXbMYI/AAAAAAAAAZk/0-VxS-YCG14/s1600-h/pkt_14.png"&gt;&lt;img src="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbfZbXbMYI/AAAAAAAAAZk/0-VxS-YCG14/s320/pkt_14.png" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height:
      240px;" border="0" id="BLOGGER_PHOTO_ID_5275649641446846850" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;15. &lt;span style="font-weight: bold;"&gt;Ctrl+I&lt;/span&gt; Wyszukiwanie. Z pola wyszukiwanie mamy możliwość uruchomienia różnych akcji.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbiQ1UtjWI/AAAAAAAAAZ8/xknAN-ZuTt4/s1600-h/pkt_15.png"&gt;&lt;img src="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbiQ1UtjWI/AAAAAAAAAZ8/xknAN-ZuTt4/s320/pkt_15.png" alt="" style="display: block;
      margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 143px;" border="0" id="BLOGGER_PHOTO_ID_5275652792330849634" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;16. &lt;span style="font-weight: bold;"&gt;Ctrl+;&lt;/span&gt; Dodanie ";" na końcu linii. Szkoda tylko, że nie sprawdza czy linia jest już zakończona ";".&lt;br /&gt;16a. &lt;span style="font-weight: bold;"&gt;Ctrl+Shift+;&lt;/span&gt; Dodanie ";" na końcu linii, wstawienie nowej linii i przejście na jej
      początek.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dqSd_vS7ivk/STbfaDSRdVI/AAAAAAAAAZ0/wLREqFnSPzE/s1600-h/pkt_17.png"&gt;&lt;img src="http://2.bp.blogspot.com/_dqSd_vS7ivk/STbfaDSRdVI/AAAAAAAAAZ0/wLREqFnSPzE/s320/pkt_17.png" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor:
      pointer; cursor: hand; width: 320px; height: 141px;" border="0" id="BLOGGER_PHOTO_ID_5275649652162655570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A według Ciebie jakie skróty powinny się jeszcze znaleźć w tym krótkim zestawieniu?&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/62160705063034256-2687360617144753864?l=marekklis.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 03 Dec 2008 19:47:42 +0000</pubDate>
    </item>
    <item>
      <title>radosław.holewa » NetBeans: Cube°n - odpowiednik Mylyn dla NetBeans?</title>
      <guid isPermaLink="false">http://www.holewa.org/?p=149</guid>
      <link>http://www.holewa.org/2008/11/29/cubeon-odpowiednik-mylyn-dla-netbeans/</link>
      <description>Tym razem przedstawię jeden z projektów w którym biorę udział (choć to może nad wyrost powiedziane :)), chodzi mi oczywiście o Cube°n (Task-Focused Interface for Netbeans). Cube°n to inspirowana na Eclipse’owym Mylyn wtyczka do NetBeans. Wtyczka ta została stworzona przez członka NetBeans Dream Team - Anuradha Gunasekara, do commiterów projektu należą również inni członkowie NB Dream [...]</description>
      <pubDate>Sat, 29 Nov 2008 21:36:39 +0000</pubDate>
    </item>
    <item>
      <title>Marek Kliś - różności okołojavowe i nie tylko: Polska platforma NetBeans jeszcze raz czyli problemy z lokalizacją</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-62160705063034256.post-3422506524051372945</guid>
      <link>http://marekklis.blogspot.com/2008/11/polska-platforma-netbeans-jeszcze-raz.html</link>
      <description>We &lt;a href="http://marekklis.blogspot.com/2008/11/netbeans-release-candidate-2-sprawa.html"&gt;wpisie&lt;/a&gt; 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 (&lt;i&gt;Build ZIP Distribution&lt;/i&gt;). Po rozpakowaniu zipa i uruchomieniu aplikacji okazało się, że polskie menu gdzieś zniknęło. Jak się okazało jest za to
      odpowiedzialny &lt;a href="http://www.netbeans.org/issues/show_bug.cgi?id=138056"&gt;błąd&lt;/a&gt; znany już we wcześniejszej wersji &lt;a href="http://www.netbeans.org"&gt;NetBeans'a&lt;/a&gt;. Błąd ten dotyczy wszystkich tłumaczeń platformy.&lt;br /&gt;Pozostały mi więc dwie możliwości: albo przy każdym budowaniu aplikacji kopiować pliki z potrzebnymi tłumaczeniami albo napisać zadanie &lt;a href="http://ant.apache.org/"&gt;anta&lt;/a&gt; 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 &lt;i&gt;build.xml&lt;/i&gt; odpowiedzialnego za zadania anta związane z naszym projektem dodałem zadanie "&lt;i&gt;build-localized-zip&lt;/i&gt;". Zadanie to dodaje do pliku archiwum (stworzonego w zadaniu &lt;i&gt;build-zip&lt;/i&gt; - opis tego zadania znajduje się w pliku &lt;i&gt;harness/suite.xml&lt;/i&gt; w katalogu platformy, na której budujemy aplikację) pliki z polskimi tłumaczeniami. Minusem tego
      rozwiązania jest to, że zostaną dodane wszystkie "&lt;i&gt;polskie&lt;/i&gt;" 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.&lt;br /&gt;&lt;br /&gt;&lt;pre cols="80" class="moz-signature"&gt;&lt;br /&gt;&amp;lt;project name="TestPlatform" basedir="."&gt;&amp;lt;br /&gt;&lt;br /&gt;&#160; &#160; &amp;lt;description&gt;Builds the module suite
      TestPlatform.&amp;lt;/description&gt;&lt;br /&gt; &amp;lt;import file="nbproject/build-impl.xml"/&gt;&lt;b&gt;&lt;br /&gt; &amp;lt;target name="build-localized-zip" depends="clean,build-zip"&lt;br /&gt; description="Zbudowanie polskiej dystrybucji"&gt;&lt;br /&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &amp;lt;zip destfile="${dist.dir}/${app.name}.zip" update="true"&gt;&lt;br /&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &amp;lt;zipfileset dir="${netbeans.dest.dir}"
      prefix="${app.name}"&gt;&lt;br /&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &amp;lt;include name="**/locale/*_pl.jar"/&gt;&lt;br /&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &amp;lt;/zipfileset&gt;&lt;br /&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &amp;lt;/zip&gt;&lt;br /&gt;&#160;&#160; &amp;lt;/target&gt;&lt;/b&gt;&lt;br /&gt;&amp;lt;/project&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Teraz wystarczy uruchomić
      nasze nowe zadanie i nowa dystrybucja naszej aplikacji będzie już "uzbrojona" w polskie menu.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_dqSd_vS7ivk/STB74bxAw6I/AAAAAAAAAYs/SxvkmQmo0c4/s1600-h/Screenshot-TestPlatform+-+NetBeans+IDE+6.5.png"&gt;&lt;img src="http://4.bp.blogspot.com/_dqSd_vS7ivk/STB74bxAw6I/AAAAAAAAAYs/SxvkmQmo0c4/s320/Screenshot-TestPlatform+-+NetBeans+IDE+6.5.png" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;
      width: 320px; height: 222px;" border="0" id="BLOGGER_PHOTO_ID_5273851373107069858" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dqSd_vS7ivk/STB9R_OrMJI/AAAAAAAAAY0/IRBcadLdGgw/s1600-h/Screenshot-TestPlatform+200811100614.png"&gt;&lt;img src="http://1.bp.blogspot.com/_dqSd_vS7ivk/STB9R_OrMJI/AAAAAAAAAY0/IRBcadLdGgw/s320/Screenshot-TestPlatform+200811100614.png" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width:
      320px; height: 206px;" border="0" id="BLOGGER_PHOTO_ID_5273852911635083410" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/62160705063034256-3422506524051372945?l=marekklis.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Sat, 29 Nov 2008 14:29:05 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Niespodzianki NetBeans IDE 6.5</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-8335902634407452425</guid>
      <link>http://blog.japila.pl/2008/11/niespodzianki-netbeans-ide-65.html</link>
      <description>&lt;a href="http://2.bp.blogspot.com/_wSeV_DMR2uA/SS8dSaYvGWI/AAAAAAAAB7s/IeWYjjOAyws/s1600-h/netbeans-splash-screen.png"&gt;&lt;img src="http://2.bp.blogspot.com/_wSeV_DMR2uA/SS8dSaYvGWI/AAAAAAAAB7s/IeWYjjOAyws/s320/netbeans-splash-screen.png" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 203px;" border="0" id="BLOGGER_PHOTO_ID_5273465890832062818" /&gt;&lt;/a&gt;Pojawiła się długooczekiwana wersja &lt;a
      href="http://www.netbeans.org"&gt;NetBeans IDE 6.5&lt;/a&gt;. 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.&lt;br /&gt;&lt;br
      /&gt;&lt;a href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SS8d7Kt_6DI/AAAAAAAAB70/apbb2b8L5ME/s1600-h/netbeans-plugin-update.png"&gt;&lt;img src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SS8d7Kt_6DI/AAAAAAAAB70/apbb2b8L5ME/s320/netbeans-plugin-update.png" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 147px; height: 320px;" border="0" id="BLOGGER_PHOTO_ID_5273466591000913970" /&gt;&lt;/a&gt;Jakież było moje zdumienie, kiedy po zalecanym,
      ponownym uruchomieniu NetBeans pojawia się komunikat o niemożności uruchomienia kilku z aktualizacji (!)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_wSeV_DMR2uA/SS8efMBdASI/AAAAAAAAB78/j5xbERajyAY/s1600-h/netbeans-ide-warning.png"&gt;&lt;img src="http://3.bp.blogspot.com/_wSeV_DMR2uA/SS8efMBdASI/AAAAAAAAB78/j5xbERajyAY/s320/netbeans-ide-warning.png" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 228px;"
      border="0" id="BLOGGER_PHOTO_ID_5273467209826238754" /&gt;&lt;/a&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_wSeV_DMR2uA/SS8fHGfwSII/AAAAAAAAB8E/lKifBJP5W64/s1600-h/netbeans-ide-warning-another.png"&gt;&lt;img
      src="http://2.bp.blogspot.com/_wSeV_DMR2uA/SS8fHGfwSII/AAAAAAAAB8E/lKifBJP5W64/s320/netbeans-ide-warning-another.png" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 228px;" border="0" id="BLOGGER_PHOTO_ID_5273467895537485954" /&gt;&lt;/a&gt;Po ręcznej aktualizacji wtyczki &lt;span style="font-weight: bold;"&gt;Groovy and Grails&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SS8h35tPLTI/AAAAAAAAB8U/lufOrTJaBYU/s1600-h/groovy-and-grails.png"&gt;&lt;img src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SS8h35tPLTI/AAAAAAAAB8U/lufOrTJaBYU/s320/groovy-and-grails.png" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 283px;" border="0" id="BLOGGER_PHOTO_ID_5273470932941221170" /&gt;&lt;/a&gt;za pomocą &lt;span style="font-weight: bold;"&gt;Help &gt; Check for
      Updates&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SS8hg5tkWXI/AAAAAAAAB8M/Roq_cdPSDQg/s1600-h/check-for-updates.png"&gt;&lt;img src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SS8hg5tkWXI/AAAAAAAAB8M/Roq_cdPSDQg/s320/check-for-updates.png" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 212px;" border="0" id="BLOGGER_PHOTO_ID_5273470537805617522" /&gt;&lt;/a&gt;wszystko
      zagrało...chyba.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_wSeV_DMR2uA/SS8iDrc3KfI/AAAAAAAAB8c/XScuZdk9_Ps/s1600-h/your-ide-is-uptodate.png"&gt;&lt;img src="http://3.bp.blogspot.com/_wSeV_DMR2uA/SS8iDrc3KfI/AAAAAAAAB8c/XScuZdk9_Ps/s320/your-ide-is-uptodate.png" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 283px;" border="0" id="BLOGGER_PHOTO_ID_5273471135272872434" /&gt;&lt;/a&gt;Już napotkałem jeden z
      błędów poprawnionych w kolejnych &lt;a href="http://bits.netbeans.org/dev/nightly/latest/zip/"&gt;wersjach rozwojowych NetBeans IDE&lt;/a&gt; (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 &lt;span style="font-weight: bold;"&gt;IntelliJ IDEA 8.0&lt;/span&gt;, która zdumiewająco łatwo spełnia moje niewygórowane oczekiwania związane z zarządzaniem projektami
      mavenowymi i możliwością &lt;a href="http://sjp.pwn.pl/lista.php?co=debugger"&gt;debuggowania&lt;/a&gt; pracy &lt;a href="http://forum.springframework.org/showthread.php?t=63925"&gt;Spring-DM 1.2.0 M2&lt;/a&gt; (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.&lt;div class="blogger-post-footer"&gt;&lt;img
      src="https://blogger.googleusercontent.com/tracker/20941681-8335902634407452425?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 27 Nov 2008 22:43:12 +0000</pubDate>
    </item>
    <item>
      <title>Marek Kliś - różności okołojavowe i nie tylko: Silesia JUG 19.11.2008 - materiały z prelekcji</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-62160705063034256.post-2361674100948087443</guid>
      <link>http://marekklis.blogspot.com/2008/11/silesia-jug-19112008-materiay-z.html</link>
      <description>&lt;div&gt;No i po prelekcji. &lt;a href="http://javavsme.wordpress.com/2008/11/20/2-spotkanie-silesia-jug-zakonczone-3-przed-nami/"&gt;Marek Goldmann&lt;/a&gt; oraz &lt;a href="http://k-adamczyk.blogspot.com/2008/11/netbeans-platform-wraenia-po-2_20.html"&gt;Krzysztof Adamczyk&lt;/a&gt; napisali kilka słów na temat tego spotkania.&lt;br /&gt;Jeśli ktoś jest zainteresowany to udostępniam &lt;a href="http://marek.klis.googlepages.com/NetBeansPlatform.pdf"&gt;slajdy&lt;/a&gt;. Przykładowy
      projekt postaram się udostępnić w najbliższym czasie tylko muszę go odpowiednio przygotować.&lt;br /&gt;Pozwoliłem sobie również udostępnić &lt;a href="http://marek.klis.googlepages.com/document.pdf"&gt;slajdy&lt;/a&gt; &lt;a href="http://lukaszlipka.blogspot.com/"&gt;Łukasza Lipki&lt;/a&gt; wprowadzające i kończące 2. spotkanie śląskiej grupy użytkowników Javy.&lt;br /&gt;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 &lt;a
      href="http://www.coig.pl/index.php?t=200&amp;amp;id=210"&gt;budynku COIGu&lt;/a&gt; w Katowicach. Tematem będzie &lt;a href="http://mule.mulesource.org/"&gt;ESB Mule&lt;/a&gt; a zaprezentuje go &lt;a href="http://lukaszlipka.blogspot.com/"&gt;Łukasz&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/62160705063034256-2361674100948087443?l=marekklis.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 21 Nov 2008 14:36:28 +0000</pubDate>
    </item>
    <item>
      <title>Marek Kliś - różności okołojavowe i nie tylko: NetBeans w samo południe</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-62160705063034256.post-3767669216756287444</guid>
      <link>http://marekklis.blogspot.com/2008/11/netbeans-w-samo-poudnie.html</link>
      <description>Wg oficjalnych informacji &lt;a href="http://www.netbeans.org/community/releases/roadmap.html"&gt;premiera&lt;/a&gt; wersji 6.5 &lt;a href="http://www.netbeans.org"&gt;NetBeans'a&lt;/a&gt; ma mieć miejsce jutro tj. 20 listopada. Więc mogę powiedzieć, że zdziwiłem się trochę po wejściu na stronę &lt;a href="http://www.netbeans.org/downloads/"&gt;Download IDE&lt;/a&gt; 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.&lt;br /&gt;Więc ściągam czym prędzej żeby na dzisiejszej &lt;a href="http://marekklis.blogspot.com/2008/11/silesia-java-user-group-netbeans.html"&gt;prezentacji&lt;/a&gt; pokazać już oficjalną wersję 6.5.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/62160705063034256-3767669216756287444?l=marekklis.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 19 Nov 2008 11:06:33 +0000</pubDate>
    </item>
    <item>
      <title>Marek Kliś - różności okołojavowe i nie tylko: Silesia Java User Group - NetBeans Platform</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-62160705063034256.post-5829452261348059522</guid>
      <link>http://marekklis.blogspot.com/2008/11/silesia-java-user-group-netbeans.html</link>
      <description>&lt;div&gt;W najbliższą środę tj. 19.11.2008 będę miał zaszczyt poprowadzić drugie już spotkanie &lt;a href="http://silesia.jug.pl"&gt;śląskiego JUGu&lt;/a&gt;. Tematem będzie oczywiście &lt;a href="http://platform.netbeans.org/"&gt;platforma NetBeans&lt;/a&gt;. Będę chciał przedstawić główne zalety używanie platformy tworząc podczas prelekcji od podstaw prostą aplikację.&lt;br /&gt;Może uda się też powiedzieć coś o nowościach w wersji 6.5 NetBeansa, która na dniach ma ujrzeć światło
      dzienne.&lt;br /&gt;Dla uczestników są przewidziane nagrody. Oprócz licencji &lt;a href="http://www.jetbrains.com/idea/"&gt;IntelliJ IDEA&lt;/a&gt; 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 &lt;a href="http://www.coig.pl/index.php?t=200&amp;amp;id=210"&gt;COIGu&lt;/a&gt; o godzinie 18:30.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img
      src="https://blogger.googleusercontent.com/tracker/62160705063034256-5829452261348059522?l=marekklis.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 17 Nov 2008 20:54:17 +0000</pubDate>
    </item>
    <item>
      <title>Marek Kliś - różności okołojavowe i nie tylko: NetBeans Release Candidate 2 a sprawa polska</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-62160705063034256.post-4127799939405523807</guid>
      <link>http://marekklis.blogspot.com/2008/11/netbeans-release-candidate-2-sprawa.html</link>
      <description>Kilka ,a może kilkanaście dni temu (build jest z 2008.10.27) pojawiła się kolejna wersja &lt;a href="http://www.netbeans.org"&gt;NetBeans'a&lt;/a&gt; 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 &lt;a href="http://wiki.netbeans.org/PolishTranslation"&gt;zespołowi tłumaczącemu&lt;/a&gt;.&lt;br /&gt;Chcąc zobaczyć jak to wygląda ściągnąłem polską wersję instalacyjną.&lt;br
      /&gt;Pierwsze wrażenia: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;niby polska wersja językowa ale cała instalacja przebiega po angielsku.&lt;/li&gt;&lt;li&gt;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)&lt;/li&gt;&lt;li&gt;na dzień dzisiejszy procent spolszczenia pozostawia jeszcze dużo do życzenia (wiem, wiem... łatwiej narzekać zamiast pomóc w tłumaczeniu;) )&lt;br
      /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SRh4LCEuqPI/AAAAAAAAAXk/yjSA5xi8yh0/s1600-h/nb65pl_01.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SRh4LCEuqPI/AAAAAAAAAXk/yjSA5xi8yh0/s320/nb65pl_01.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 202px;" border="0" id="BLOGGER_PHOTO_ID_5267091895140395250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ale ponoć
      platforma jest w całości przetłumaczona. Więc czym prędzej założyłem nowy projekt &lt;i&gt;NetBeans Platform Applications&lt;/i&gt;. Muszę przyznać, że po uruchomieniu projektu poczułem się mile zaskoczony.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_dqSd_vS7ivk/SRh4LX54NmI/AAAAAAAAAXs/jeTggAFX97Y/s1600-h/nb65pl_02.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_dqSd_vS7ivk/SRh4LX54NmI/AAAAAAAAAXs/jeTggAFX97Y/s320/nb65pl_02.jpg" alt="" style="display: block; margin: 0px auto 10px;
      text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 204px;" border="0" id="BLOGGER_PHOTO_ID_5267091901000463970" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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 &lt;i&gt;Tools&lt;/i&gt; -&gt; &lt;i&gt;NetBeans Platforms&lt;/i&gt; dodałem (&lt;i&gt;Add Platform&lt;/i&gt;) jako
      kolejną platformę polską i we właściwościach projektu wskazałem, że ma z niej korzystać podczas uruchamiania.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dqSd_vS7ivk/SRh4LRS-iyI/AAAAAAAAAX0/7nZDmrZNz4I/s1600-h/nb65pl_03.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_dqSd_vS7ivk/SRh4LRS-iyI/AAAAAAAAAX0/7nZDmrZNz4I/s320/nb65pl_03.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 320px; height: 186px;" border="0"
      id="BLOGGER_PHOTO_ID_5267091899226688290" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Więc nie pozostaje mi nic innego jak podziękować im za ich pracę.&lt;br /&gt;&lt;br /&gt;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.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/62160705063034256-4127799939405523807?l=marekklis.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 10 Nov 2008 18:12:10 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Refleksje po "Poznaj JUnit 4" z Internet MAKER 5/08</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-3215741056245446157</guid>
      <link>http://blog.japila.pl/2008/11/refleksje-po-poznaj-junit-4-z-internet.html</link>
      <description>Kiedy przeglądałem półkę z czasopismami informatycznymi w kiosku na dworcu Warszawa Centralna (przed podróżą na &lt;a href="http://netbeansday.pl/"&gt;NetBeans Day 2008&lt;/a&gt; w Gdańsku) niewiele czasopism dotyczyło programowania w Javie - &lt;a href="http://www.sdjournal.org/"&gt;Software Developer's Journal (SDJ)&lt;/a&gt; oraz &lt;a href="http://czasopisma.magazynyinternetowe.pl/internet_maker/"&gt;Internet MAKER&lt;/a&gt;. 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) &lt;span style="font-weight: bold;"&gt;Internet MAKERa 5/08&lt;/span&gt; (wrzesień-październik). Jednym z artykułów, który przykuł moją uwagę był &lt;span style="font-weight: bold;"&gt;"Poznaj JUnit 4 - Wstęp do programowania sterowanego testami"&lt;/span&gt; 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 &lt;span style="font-weight: bold;"&gt;@Ignore&lt;/span&gt; oraz asercji &lt;span style="font-weight: bold;"&gt;assertThat&lt;/span&gt; (wspartej projektem Hamcrest) rekompensuje &lt;span style="font-style: italic;"&gt;"dość obszerne wprowadzenie teoretyczne"&lt;/span&gt; (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 &lt;span style="font-style: italic;"&gt;"framework"&lt;/span&gt; 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. &lt;span style="font-style: italic;"&gt;log in/authenticate&lt;/span&gt;) czy zapis do dziennika zdarzeń (ang.&lt;span style="font-style: italic;"&gt; log&lt;/span&gt;). 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 (!)&lt;br /&gt;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. &lt;i&gt;&lt;a
      href="http://pl.wikiquote.org/wiki/Przyzwyczajenie"&gt;Consuetude altera natura est&lt;/a&gt;&lt;/i&gt;, co?&lt;i&gt; &lt;/i&gt;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 &lt;span style="font-style:
      italic;"&gt;"tematyka (...) jest niezwykle szeroka i trudno jest przedstawić jej wszystkie założenia w jednym krótkim artykule"&lt;/span&gt;. Oczekuję kolejnych.&lt;br /&gt;&lt;br /&gt;p.s. W trakcie czytania nasunął mi się skrót odpowiadający programowaniu sterowanego testami, aby po prostu nazywać je "testosteronem" (TESTami STEROwaNe programowanie) ;-)&lt;br /&gt;&lt;br /&gt;Nie cichną echa zeszłotygodniowej konferencji &lt;a href="http://www.netbeansday.pl/"&gt;NetBeans Day 2008&lt;/a&gt; w
      Poznaniu i Gdańsku. Na stronie głównej &lt;a href="http://community.java.net/"&gt;java.net Communities&lt;/a&gt; pojawiła się zajawka o wpisie na blogu Toniego - &lt;a href="http://eppleton.sharedhost.de/blog/?p=265"&gt;NetBeans DreamTeam visit to Poland on the java.net Communities tab + Polish JUGs helped organize these events&lt;/a&gt;. 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 &lt;a href="http://jlaskowski.blogspot.com/2008/10/wraenia-po-netbeans-day-2008-w-gdasku.html"&gt;Wrażenia po NetBeans Day 2008 w Gdańsku&lt;/a&gt;. Gratulacje dla poznańskiego i gdańskiego JUGa!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_wSeV_DMR2uA/SQzTuxV5oII/AAAAAAAABew/PnZWmZA5784/s1600-h/java-community.gif"&gt;&lt;img src="http://3.bp.blogspot.com/_wSeV_DMR2uA/SQzTuxV5oII/AAAAAAAABew/PnZWmZA5784/s320/java-community.gif" alt="" style="margin: 0px auto 10px; display:
      block; text-align: center; cursor: pointer; width: 320px; height: 292px;" border="0" id="BLOGGER_PHOTO_ID_5263814864961904770" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-3215741056245446157?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Sat, 01 Nov 2008 22:32:13 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: NetBeans IDE 6.5 RC, NetBeans Decathlon oraz przyszłość Spring-DM i SpringSource dm Server</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-3581607268333119594</guid>
      <link>http://blog.japila.pl/2008/10/netbeans-ide-65-rc-netbeans-decathlon.html</link>
      <description>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 &lt;a href="http://www.ibm.com/software/integration/wps/"&gt;IBM WebSphere Process Server&lt;/a&gt; za pomocą &lt;a href="http://publib.boulder.ibm.com/infocenter/dmndhelp/v6r1mx/topic/com.ibm.wbit.612.help.relationshipdesigner.doc/topics/crelation.html"&gt;usługi wiązania&lt;/a&gt; (ang.
      &lt;span style="font-style: italic;"&gt;relationship service&lt;/span&gt;). 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).&lt;br /&gt;&lt;br /&gt;Dzisiejszy dzień również obfitował w nowości, których kompletnie się nie
      spodziewałem. Zacząłem niewinnie od pobrania ostatniej &lt;a href="http://bits.netbeans.org/dev/nightly/latest/zip/"&gt;wersji rozwojowej NetBeans IDE 6.5&lt;/a&gt;, którego wydanie RC właśnie się pojawiło. Jako (obecnie mniej aktywny) uczestnik programu &lt;a href="http://qa.netbeans.org/processes/cat/65/"&gt;NetBeans Community Acceptance Test (NetCAT) 6.5&lt;/a&gt; przywykłem do pobierania wersji rozwojowych, ale dla mniej żądnych wrażeń proponuje się skorzystanie z wersji &lt;a
      href="http://download.netbeans.org/netbeans/6.5/rc/"&gt;NetBeans IDE 6.5 Release Candidate&lt;/a&gt;, a w nim:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;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.&lt;br /&gt;&lt;br /&gt;The final NetBeans IDE 6.5 release is planned for November 2008.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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 &lt;a href="http://www.netbeans.org/birthday/index.html"&gt;NetBeans IDE właśnie skończyło 10 lat&lt;/a&gt; i rozpoczęto ogólnoświatową imprezę NetBeans 10th Birthday (aka
      &lt;a href="http://www.netbeans.org/birthday/decathlon.html"&gt;NetBeans Decathlon&lt;/a&gt;), 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 &lt;a href="http://www.netbeans.org/birthday/decathlon.html"&gt;NetBeans Decathlon&lt;/a&gt;. Cała zabawa to jedynie zebranie 50 punktów przez różnego rodzaju aktywność wokół NetBeans i &lt;span style="font-style: italic;"&gt;"a limited edition
      NetBeans 10th Anniversary Shirt"&lt;/span&gt; jest Twoja. Moje pierwsze 15 punktów to wzmianka o mojej kolejnej, dzisiejszej niespodziance - wsparciu dla &lt;a href="https://glassfish.dev.java.net/"&gt;GlassFish v3 "Prelude"&lt;/a&gt;, w którym można skorzystać z...&lt;span style="font-weight: bold;"&gt;EJB 3.1&lt;/span&gt;! Sądziłem, że wsparcie dla EJB 3.1 to domena &lt;a href="http://openejb.apache.org"&gt;Apache OpenEJB&lt;/a&gt;, którego wydanie 3.1 jest właśnie głosowane - &lt;a
      href="http://www.nabble.com/-VOTE--OpenEJB-3.1-take-1-td19895817.html"&gt;[VOTE] OpenEJB 3.1 take 1&lt;/a&gt;, 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.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SP-UgyDQ9CI/AAAAAAAABeo/x47ik6bc_7Q/s1600-h/netbeans-glassfish-prelude-1.0.gif"&gt;&lt;img
      src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SP-UgyDQ9CI/AAAAAAAABeo/x47ik6bc_7Q/s320/netbeans-glassfish-prelude-1.0.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5260086180704220194" /&gt;&lt;/a&gt;&lt;br /&gt;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 &lt;a
      href="http://blogs.sun.com/theaquarium/entry/netbeans_6_5_m2_is"&gt;NetBeans 6.5 Beta is out - GlassFish 'Prelude' included&lt;/a&gt; z dnia moich urodzin (!), gdzie w komentarzach znalazłem &lt;span style="font-style: italic;"&gt;"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?"&lt;/span&gt;. "Co?! EJB 3.1 już dostępny w GlassFish v3?!" - pomyślałem. Kolejne wyszukiwanie i trafiłem na &lt;a
      href="http://blogs.sun.com/MaheshKannan/entry/ejb_3_1_in_glassfish"&gt;EJB 3.1 in GlassFish V3 TP2&lt;/a&gt;. Nie pozostaje przyjrzeć się specyfikacji EJB 3.1, która nie tak dawno pojawiła się w wersji &lt;a href="http://jcp.org/aboutJava/communityprocess/pr/jsr318/index.html"&gt;EJB 3.1 public review draft&lt;/a&gt;. Ech, nie pomyślałem o tym wcześniej, ale nadchodzące moje niedzielne wystąpienie podczas &lt;a href="http://netbeansday.pl/"&gt;NetBeans Day 2008&lt;/a&gt; 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 ;-)&lt;br /&gt;&lt;br /&gt;I tak dzień mijał, kiedy trafiłem na ciekawą dyskusję o przyszłości &lt;a href="http://www.springframework.org/osgi"&gt;Spring Dynamic Modules (Spring-DM)&lt;/a&gt; w kontekście pojawienia się &lt;a href="http://www.springsource.com/products/suite/dmserver"&gt;SpringSource dm Server&lt;/a&gt;. Czytając dyskusję &lt;a
      href="http://groups.google.com/group/spring-osgi/browse_thread/thread/879a762f549e1007"&gt;Spring DM Roadmap&lt;/a&gt;, należałoby raczej zająć się rozpoznawaniem produktu SpringSource dm Server niż Spring-DM, który:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Firstly on a 1.2 release that will fill in the long-promised configuration administration support, making the core programming model feature complete."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;oraz&lt;br /&gt;&lt;br /&gt;&lt;span
      style="font-style: italic;"&gt;"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)."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;i dalej&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"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."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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ą.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"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]."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-3581607268333119594?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 22 Oct 2008 21:08:29 +0000</pubDate>
    </item>
    <item>
      <title>Marek Kliś - różności okołojavowe i nie tylko: NetBeans + Ecplise = ...</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-62160705063034256.post-2228387609742241394</guid>
      <link>http://marekklis.blogspot.com/2008/06/netbeans-ecplise.html</link>
      <description>W sobotę (28.08.2008) miałem okazję uczestniczyć w &lt;a href="http://wiki.eclipse.org/Eclipse_DemoCamps_2008_-_Ganymede_Edition/Krakow"&gt;Ecplise DemoCamps&lt;/a&gt; w Krakowie. Spotkanie zaliczam do udanych. W drodze powrotnej przypomniał mi się niedawny wpis na blogu &lt;a href="http://blogs.sun.com/geertjan/entry/running_netbeans_from_eclipse"&gt;Geertjan Wielengi&lt;/a&gt; opisujący jak uruchomić aplikację napisaną z wykorzystaniem &lt;a
      href="http://platform.netbeans.org/"&gt;NetBeans Platform&lt;/a&gt; z &lt;a href="http://www.eclipse.org/"&gt;Eclipsa&lt;/a&gt;.&lt;br /&gt;Jako, że ostatnio miałem trochę do czynienia z bardzo fajną biblioteką &lt;a href="http://graph.netbeans.org/"&gt;Visual Library&lt;/a&gt;, 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ę.&lt;br /&gt;Ściągnąłem &lt;a
      href="http://graph.netbeans.org/files/documents/188/1357/Visual-Library-2.0-pre3.zip"&gt;Visual Library&lt;/a&gt;, 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).&lt;br /&gt;Po pierwsze stworzyłem panel, na którym miał wylądować edytor graficzny.&lt;br /&gt;&lt;br /&gt;&lt;pre cols="72" class="moz-signature"&gt;&lt;br /&gt;package pl.marekklis.graph;&lt;br /&gt;&lt;br /&gt;import java.awt.BorderLayout;&lt;br /&gt;import
      java.awt.Dimension;&lt;br /&gt;&lt;br /&gt;import javax.swing.JFrame;&lt;br /&gt;import javax.swing.JPanel;&lt;br /&gt;import javax.swing.JScrollPane;&lt;br /&gt;&lt;br /&gt;import org.netbeans.api.visual.graph.GraphScene;&lt;br /&gt;&lt;br /&gt;public class GraphTest extends JPanel{&lt;br /&gt;&lt;br /&gt; public static void main(String[] args) {&lt;br /&gt; JFrame frame = new JFrame("Graph test");&lt;br /&gt; frame.setMinimumSize(new Dimension(400,300));&lt;br /&gt; frame.setSize(400, 300);&lt;br
      /&gt; frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt; frame.setContentPane(new GraphTest());&lt;br /&gt; frame.pack();&lt;br /&gt; frame.setVisible(true);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public GraphTest() {&lt;br /&gt; initComponents();&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; private void initComponents(){&lt;br /&gt; setLayout(new BorderLayout());&lt;br /&gt; JScrollPane scrollPane = new JScrollPane();&lt;br /&gt; add(scrollPane,BorderLayout.CENTER);&lt;br /&gt; GraphScene
      scene = new GraphSceneImpl();&lt;br /&gt; scrollPane.setViewportView(scene.createView());&lt;br /&gt; add(scene.createSatelliteView(),BorderLayout.WEST);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Po drugie stworzyłem implementacje &lt;a href="http://bits.netbeans.org/6.1/javadoc/org-netbeans-api-visual/org/netbeans/api/visual/graph/GraphScene.html"&gt;GraphScene&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre cols="72" class="moz-signature"&gt;&lt;br /&gt;package
      pl.marekklis.graph;&lt;br /&gt;&lt;br /&gt;import java.awt.Point;&lt;br /&gt;&lt;br /&gt;import org.netbeans.api.visual.action.ActionFactory;&lt;br /&gt;import org.netbeans.api.visual.action.ConnectProvider;&lt;br /&gt;import org.netbeans.api.visual.action.ConnectorState;&lt;br /&gt;import org.netbeans.api.visual.anchor.AnchorFactory;&lt;br /&gt;import org.netbeans.api.visual.anchor.AnchorShape;&lt;br /&gt;import org.netbeans.api.visual.graph.GraphScene;&lt;br /&gt;import
      org.netbeans.api.visual.widget.ConnectionWidget;&lt;br /&gt;import org.netbeans.api.visual.widget.LayerWidget;&lt;br /&gt;import org.netbeans.api.visual.widget.Scene;&lt;br /&gt;import org.netbeans.api.visual.widget.Widget;&lt;br /&gt;import org.netbeans.api.visual.widget.general.IconNodeWidget;&lt;br /&gt;import org.openide.util.Utilities;&lt;br /&gt;&lt;br /&gt;public class GraphSceneImpl extends GraphScene {&lt;br /&gt; &lt;br /&gt; private LayerWidget mainLayer;&lt;br /&gt; private LayerWidget
      connectionLayer;&lt;br /&gt; private LayerWidget interactionLayer;&lt;br /&gt;&lt;br /&gt; public GraphSceneImpl() {&lt;br /&gt; mainLayer = new LayerWidget(this);&lt;br /&gt; connectionLayer = new LayerWidget(this);&lt;br /&gt; interactionLayer = new LayerWidget(this);&lt;br /&gt; addChild(mainLayer);&lt;br /&gt; addChild(connectionLayer);&lt;br /&gt; addChild(interactionLayer);&lt;br /&gt; Widget w1 = addNode("1. węzeł");&lt;br /&gt; w1.setPreferredLocation(new Point(10, 100));&lt;br /&gt; Widget
      w2 = addNode("2. węzeł");&lt;br /&gt; w2.setPreferredLocation(new Point(100, 250));&lt;br /&gt; Widget w3 = addNode("Jakiś kolejny węzeł");&lt;br /&gt; w3.setPreferredLocation(new Point(250, 250));&lt;br /&gt; Widget w4 = addNode("Jakiś kolejny węzeł");&lt;br /&gt; w4.setPreferredLocation(new Point(250, 350));&lt;br /&gt; getActions().addAction(ActionFactory.createZoomAction());&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected Widget attachNodeWidget(String arg0) {&lt;br /&gt;
      IconNodeWidget widget = new IconNodeWidget(this);&lt;br /&gt; if (arg0.startsWith("1")) {&lt;br /&gt; widget.setImage(Utilities.loadImage("pl/marekklis/graph/&lt;br /&gt; resources/gr01.png"));&lt;br /&gt; } else if (arg0.startsWith("2")) {&lt;br /&gt; widget.setImage(Utilities.loadImage("pl/marekklis/graph/&lt;br /&gt; resources/gr02.png"));&lt;br /&gt; } else {&lt;br /&gt; widget.setImage(Utilities.loadImage("pl/marekklis/graph/&lt;br /&gt; resources/gr03.png"));&lt;br /&gt; } &lt;br /&gt;
      widget.getActions().addAction(&lt;br /&gt; ActionFactory.createExtendedConnectAction(&lt;br /&gt; connectionLayer,new MyConnectProvider()));&lt;br /&gt; widget.getActions().addAction(&lt;br /&gt; ActionFactory.createAlignWithMoveAction(&lt;br /&gt; mainLayer, interactionLayer, &lt;br /&gt; ActionFactory.createDefaultAlignWithMoveDecorator()));&lt;br /&gt; widget.setLabel(arg0);&lt;br /&gt; mainLayer.addChild(widget);&lt;br /&gt; return widget;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br
      /&gt; protected Widget attachEdgeWidget(String arg0) {&lt;br /&gt; return null;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected void attachEdgeSourceAnchor(&lt;br /&gt; String arg0, String arg1, String arg2) {&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected void attachEdgeTargetAnchor(&lt;br /&gt; String arg0, String arg1, String arg2) {&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private class MyConnectProvider implements ConnectProvider {&lt;br /&gt;&lt;br
      /&gt; public boolean isSourceWidget(Widget source) {&lt;br /&gt; return source instanceof IconNodeWidget &amp;amp;&amp;amp; source != null &lt;br /&gt; ? true : false;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public ConnectorState isTargetWidget(Widget src, Widget trg) {&lt;br /&gt; return src != trg &amp;amp;&amp;amp; trg instanceof IconNodeWidget ? &lt;br /&gt; ConnectorState.ACCEPT : ConnectorState.REJECT;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public boolean hasCustomTargetWidgetResolver(Scene arg0)
      {&lt;br /&gt; return false;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public Widget resolveTargetWidget(Scene arg0, Point arg1) {&lt;br /&gt; return null;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void createConnection(Widget source, Widget target) {&lt;br /&gt; ConnectionWidget conn = new ConnectionWidget(&lt;br /&gt; GraphSceneImpl.this);&lt;br /&gt; conn.setTargetAnchorShape(AnchorShape.TRIANGLE_FILLED);&lt;br /&gt; conn.setTargetAnchor(AnchorFactory.&lt;br /&gt;
      createRectangularAnchor(target));&lt;br /&gt; conn.setSourceAnchor(AnchorFactory.&lt;br /&gt; createRectangularAnchor(source));&lt;br /&gt; connectionLayer.addChild(conn);&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I oto efekt:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dqSd_vS7ivk/SGexL4KlkHI/AAAAAAAAAO8/ZFV8K6lmk5s/s1600-h/GraphInEclipse.png"&gt;&lt;img
      src="http://2.bp.blogspot.com/_dqSd_vS7ivk/SGexL4KlkHI/AAAAAAAAAO8/ZFV8K6lmk5s/s320/GraphInEclipse.png" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5217333510945476722" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;W naszym okienku mamy działający przykład wykorzystujący Visual Library.&lt;br /&gt;&lt;br /&gt;PS. Biblioteki Visual Library nie musimy ściągać gdyż jest ona częścią Netbeansa i znajduje się w
      katalog_Netbeansa/platform8/modules/.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/62160705063034256-2228387609742241394?l=marekklis.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Tue, 21 Oct 2008 08:17:09 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: NetBeansowy pracowniks oraz czyszczenie eclipsowego p2</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-6303614935703882866</guid>
      <link>http://blog.japila.pl/2008/10/netbeansowy-pracowniks-oraz-czyszczenie.html</link>
      <description>Zainspirowany problemem tworzenia aplikacji ze szkieletem Visual Web JavaServer Faces (vel Woodstock) w dyskusji &lt;br /&gt;&lt;a href="http://groups.google.com/group/pl.comp.lang.java/browse_thread/thread/36fcdc9810a4d18a"&gt;Połączyć DataModel z komponentami Visual Web JSF&lt;/a&gt; na &lt;span style="font-weight: bold;"&gt;pl.comp.lang.java&lt;/span&gt; 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 &lt;a href="http://webdev2.sun.com/woodstock-tlddocs/webuijsf/tableRowGroup.html"&gt;webuijsf:tableRowGroup&lt;/a&gt;, której atrybut &lt;span style="font-weight: bold;"&gt;sourceData&lt;/span&gt; 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 &lt;span style="font-weight: bold;"&gt;Ctrl+SPACJA&lt;/span&gt;. Wystarczyło napisać &lt;span style="font-style: italic;"&gt;private Pracownik[]&lt;/span&gt; i wcisnąć wspomnianą kombinację klawiszy Ctrl+SPACJA i...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_wSeV_DMR2uA/SOvN2ZWv1kI/AAAAAAAABeI/PG7oqD8bwIs/s1600-h/pracowniks.gif"&gt;&lt;img src="http://2.bp.blogspot.com/_wSeV_DMR2uA/SOvN2ZWv1kI/AAAAAAAABeI/PG7oqD8bwIs/s320/pracowniks.gif" alt=""
      style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5254519724660741698" /&gt;&lt;/a&gt;&lt;br /&gt;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?&lt;br /&gt;&lt;br /&gt;Kolejną
      ciekawostkę znalazłem na grupie &lt;span style="font-weight: bold;"&gt;eclipse.technology.equinox&lt;/span&gt;, która dotyczyła działania &lt;a href="http://wiki.eclipse.org/Equinox_p2_Getting_Started"&gt;Equinox p2&lt;/a&gt;. 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 &lt;span style="font-weight:
      bold;"&gt;p2/org.eclipse.equinox.p2.engine/profileRegistry/&lt;/span&gt;?&lt;pre&gt; jlaskowski@work /cygdrive/c/apps/eclipse&lt;br /&gt; $ du -sh p2/&lt;br /&gt; 249M p2/&lt;br /&gt;&lt;br /&gt; jlaskowski@work /cygdrive/c/apps/eclipse&lt;br /&gt; $ du -sh features/ plugins/&lt;br /&gt; 6.8M features/&lt;br /&gt; 215M plugins/&lt;/pre&gt;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.&lt;pre&gt;&lt;br /&gt; jlaskowski@work /cygdrive/c/apps/eclipse&lt;br /&gt; $ ls p2/org.eclipse.equinox.p2.engine/profileRegistry/PlatformProfile.profile/ | wc -l&lt;br /&gt; 46&lt;br /&gt;&lt;br /&gt; jlaskowski@work /cygdrive/c/apps/eclipse&lt;br /&gt; $ cd
      p2/org.eclipse.equinox.p2.engine/profileRegistry/PlatformProfile.profile&lt;br /&gt;&lt;br /&gt; jlaskowski@work /cygdrive/c/apps/eclipse/p2/org.eclipse.equinox.p2.engine/profileRegistry/PlatformProfile.profile&lt;br /&gt; $ ls -t | tail -n +6 | xargs rm&lt;br /&gt;&lt;br /&gt; jlaskowski@work /cygdrive/c/apps/eclipse/p2/org.eclipse.equinox.p2.engine/profileRegistry/PlatformProfile.profile&lt;br /&gt; $ du -sh .&lt;br /&gt; 27M .&lt;/pre&gt;Ja już mam to za sobą.&lt;div
      class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-6303614935703882866?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Tue, 07 Oct 2008 21:06:27 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Geronimo NetBeans Plugin bogatszy oraz NetBeans IDE 6.5 Beta</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-3450823212833328465</guid>
      <link>http://blog.japila.pl/2008/08/geronimo-netbeans-plugin-bogatszy-oraz.html</link>
      <description>Nie powiem, żeby było lekko. Rozwój wtyczki &lt;span style="font-weight: bold;"&gt;Geronimo NetBeans Plugin (GNP)&lt;/span&gt; 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).&lt;br /&gt;&lt;br /&gt;Podczas tworzenia aplikacji webowej wybieramy związany z nią serwer aplikacyjny.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SKNYLQ3mdxI/AAAAAAAABDk/OMdoHISKoEQ/s1600-h/server-and-settings.gif"&gt;&lt;img src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SKNYLQ3mdxI/AAAAAAAABDk/OMdoHISKoEQ/s320/server-and-settings.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5234124142464628498" /&gt;&lt;/a&gt;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...&lt;span style="font-style: italic;"&gt;tutaj nazwa Twojego ulubionego IDE&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Jedną z bolączek ostatnich
      dni podczas rozwoju wtyczki GNP był brak definicji kontekstu aplikacji webowej. Podczas definiowania projektu aplikacji pole &lt;span style="font-weight: bold;"&gt;Context Path&lt;/span&gt; było wypełnione, ale już po jej stworzeniu we właściwościach projektu było puste (!)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SKNYU_m7ZVI/AAAAAAAABDs/3Egzo0_i6lc/s1600-h/project-properties.gif"&gt;&lt;img
      src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SKNYU_m7ZVI/AAAAAAAABDs/3Egzo0_i6lc/s320/project-properties.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5234124309629986130" /&gt;&lt;/a&gt;Rozwiązaniem okazało się zdefiniowanie klasy realizującej interfejs &lt;a
      href="http://bits.netbeans.org/dev/javadoc/org-netbeans-modules-j2eeserver/org/netbeans/modules/j2ee/deployment/plugins/spi/config/ContextRootConfiguration.html"&gt;org.netbeans.modules.j2ee.deployment.plugins.spi.config.ContextRootConfiguration&lt;/a&gt; i stworzenie jej egzemplarzy przez fabrykę realizującą interfejs &lt;a
      href="http://bits.netbeans.org/dev/javadoc/org-netbeans-modules-j2eeserver/org/netbeans/modules/j2ee/deployment/plugins/spi/config/ModuleConfigurationFactory.html"&gt;org.netbeans.modules.j2ee.deployment.plugins.spi.config.ModuleConfigurationFactory&lt;/a&gt;, a wskazaną przez plik konfiguracyjny wtyczki - &lt;span style="font-weight: bold;"&gt;layer.xml&lt;/span&gt; (plik jest wskazany przez klucz &lt;span style="font-weight: bold;"&gt;OpenIDE-Module-Layer&lt;/span&gt; w &lt;span style="font-weight:
      bold;"&gt;META-INF/MANIFEST.MF&lt;/span&gt;). 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ść.&lt;br /&gt;&lt;br /&gt;Dzisiejszy dzień jest również świętem dla projektu NetBeans, który opublikował wersję beta NetBeans IDE 6.5 Beta. A w nim:&lt;br
      /&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;NetBeans.org is proud to announce the availability of NetBeans IDE 6.5 Beta!&lt;br /&gt;&lt;br /&gt;* &lt;a href="http://download.netbeans.org/netbeans/6.5/beta/"&gt;Download Now&lt;/a&gt;&lt;br /&gt;* &lt;a href="http://www.netbeans.org/community/releases/65/"&gt;Learn More&lt;/a&gt;&lt;br /&gt;* &lt;a href="http://www.netbeans.org/kb/index.html"&gt;Tutorials &amp;amp; Documentation&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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).&lt;br /&gt;&lt;br /&gt;Dla żyjących na ostrzu technologicznego noża może się przydać odpowiedź na pytanie &lt;a
      href="http://www.nabble.com/NetBeans-IDE-6.5-Beta-Now-Available-for-Download%21-td18963574.html"&gt;&lt;span style="font-style: italic;"&gt;Which daily build is this equivalent to?&lt;/span&gt;&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;None.&lt;br /&gt;Beta clone has been created on August 4th. Only imported bug fixes were fixed in the clone - &lt;a
      href="http://www.netbeans.org/issues/buglist.cgi?issue_type=DEFECT&amp;amp;resolution=FIXED&amp;amp;keywords=65_HR_FIX"&gt;http://www.netbeans.org/issues/buglist.cgi?issue_type=DEFECT&amp;amp;resolution=FIXED&amp;amp;keywords=65_HR_FIX&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And the Beta was built from this Beta clone, of course. Therefore it is like build from August 4th + bugfixes + branding.&lt;br /&gt;The daily builds are different. Fixing of issues continues. There were 647 bugs fixed in the trunk from
      the 8/4 - &lt;a href="http://www.netbeans.org/issues/buglist.cgi?issue_type=DEFECT&amp;amp;chfield=resolution&amp;amp;chfieldfrom=2008-08-04&amp;amp;chfieldto=Now&amp;amp;chfieldvalue=FIXED"&gt;http://www.netbeans.org/issues/buglist.cgi?issue_type=DEFECT&amp;amp;chfield=resolution&amp;amp;chfieldfrom=2008-08-04&amp;amp;chfieldto=Now&amp;amp;chfieldvalue=FIXED&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Znalezione w archiwum grupy dyskusyjnej &lt;a
      href="http://www.nabble.com/Netbeans---Users-f2605.html"&gt;NetBeans users&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-3450823212833328465?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 13 Aug 2008 22:01:28 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Klawiszologia NetBeans ponownie, OSGi na JDD 2008 w Krakowie oraz NetBeans Debugger board</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-2218271437170348328</guid>
      <link>http://blog.japila.pl/2008/08/klawiszologia-netbeans-ponownie-osgi-na.html</link>
      <description>Każdego dnia uczestnicząc w pracach &lt;a href="http://qa.netbeans.org/processes/cat/65/"&gt;NetBeans IDE 6.5 Community Acceptance Testing program (NetCAT)&lt;/a&gt; mam możliwość poznawania kolejnych skrótów klawiszowych (pewnie łatwiej byłoby przejrzeć po prostu &lt;span style="font-weight: bold;"&gt;Keyboard Shortcuts Card&lt;/span&gt; dostępne pod głównym menu &lt;span style="font-weight: bold;"&gt;Help&lt;/span&gt;, 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 - &lt;span style="font-weight: bold;"&gt;Alt+Shift + Up/Down&lt;/span&gt; oraz &lt;span style="font-weight: bold;"&gt;Ctrl+Shift + Up/Down&lt;/span&gt;. Pierwszy z nich - &lt;span style="font-weight: bold;"&gt;Alt+Shift + Up/Down&lt;/span&gt; - przenosi linię, na której znajduje się kursor w górę/dół, natomiast drugi - &lt;span style="font-weight: bold;"&gt;Ctrl+Shift + Up/Down&lt;/span&gt; -
      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ć?&lt;br /&gt;&lt;br /&gt;Miałem wstrzymać się z ogłoszeniem tej wiadomości, aż do momentu sfinalizowania programu mojego wystąpienia na tegorocznej edycji &lt;a href="http://08.jdd.org.pl/"&gt;Java Developer Day 2008&lt;/a&gt; 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 &lt;a href="http://08.jdd.org.pl/agenda"&gt;"Wprowadzenie do OSGi (z Apache Felix, Spring Dynamic Modules (aka Spring-OSGi) oraz GlassFish v3 i IBM WebSphere AS 6.1)"&lt;/a&gt;, 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. &lt;a href="http://08.jdd.org.pl/rejestracja"&gt;Rejestracja&lt;/a&gt; trwa.&lt;br /&gt;&lt;br /&gt;Dzisiaj dostałem wiadomość do skrzynki o rozpoczęciu programu sprawdzenia użyteczności &lt;span style="font-weight: bold;"&gt;NetBeans Debugger&lt;/span&gt;. &lt;span
      style="font-weight: bold;"&gt;Peter Pis&lt;/span&gt; w &lt;span style="font-style: italic;"&gt;Welcome on NetBeans Debugger board&lt;/span&gt; napisał:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://wiki.netbeans.org/NetBeansDebuggerContributors"&gt;http://wiki.netbeans.org/NetBeansDebuggerContributors&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Task 1:&lt;br /&gt; 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.&lt;br /&gt;&lt;br /&gt; 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.&lt;br /&gt;&lt;br /&gt; 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:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://qa.netbeans.org/processes/cat/65/index.html"&gt;http://qa.netbeans.org/processes/cat/65/index.html&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Jeśli jesteś zainteresowany/-a uczestniczeniem w programie zapraszam do grupy
      - wystarczy &lt;span style="font-style: italic;"&gt;"send a blank e-mail to interest-subscribe@debugger.netbeans.org"&lt;/span&gt;. Na każdego czekają liczne wyróżnienia i nagrody, wliczając:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; * direct reporting issues into the IssueZilla via Exception Reporter&lt;br /&gt; * new features and UI specification reviews, evaluation of prototypes&lt;br /&gt; * influence on nominating issues that should be integrated into Patch&lt;br /&gt;
      updates&lt;br /&gt; * influence on nominating issues that should be fixed before releases&lt;br /&gt; * closer cooperation and keeping in touch with development&lt;br /&gt; * T-shirts&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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 ;-)&lt;div class="blogger-post-footer"&gt;&lt;img
      src="https://blogger.googleusercontent.com/tracker/20941681-2218271437170348328?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 11 Aug 2008 21:07:58 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Skróty klawiszowe w NetBeans, Geronimo 2.1.2, wolatylność i demo Hibernate Support in the NetBeans IDE</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-7368220739143226801</guid>
      <link>http://blog.japila.pl/2008/08/skrty-klawiszowe-w-netbeans-geronimo.html</link>
      <description>Ostatnie dni spędzam ślęcząc godzinami nad rozwojem wtyczki &lt;span style="font-weight: bold;"&gt;NetBeans dla Geronimo (GNbP - Geronimo NetBeans Plugin)&lt;/span&gt; i każdy dzień to jakaś "ciekawostka". Piszę w cudzysłowiu, bo praca z zarządcami klas (ang. &lt;span style="font-style: italic;"&gt;classloader&lt;/span&gt;) 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 - &lt;a href="http://svn.apache.org/repos/asf/geronimo/sandbox/geronimo-netbeans-plugin"&gt;http://svn.apache.org/repos/asf/geronimo/sandbox/geronimo-netbeans-plugin&lt;/a&gt;. 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!) ;-)&lt;br /&gt;&lt;br /&gt;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 &lt;span style="font-weight: bold;"&gt;psvm + TAB&lt;/span&gt; i jakie było moje zdumienie, kiedy w klasie pojawił się szablon metody &lt;span style="font-style: italic;"&gt;main&lt;/span&gt;:&lt;pre&gt;
      public static void main(String[] args) {&lt;br /&gt; }&lt;/pre&gt;Teraz już łatwo zrozumieć skąd ten skrót - &lt;span style="font-style: italic;"&gt;psvm - public static void main&lt;/span&gt;. 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.&lt;br /&gt;&lt;br /&gt;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):&lt;pre&gt; static {&lt;br /&gt; java.util.logging.Logger.getLogger("org.apache.geronimo.netbeans").setLevel(java.util.logging.Level.FINEST);&lt;br /&gt; java.util.logging.Logger.getLogger("org.apache.geronimo.deployment.plugin.factories").setLevel(java.util.logging.Level.FINEST);&lt;br /&gt; }&lt;/pre&gt;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ć.&lt;br /&gt;&lt;br /&gt;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 &lt;span
      style="font-weight: bold;"&gt;Ctrl+Shift+I&lt;/span&gt;, który, w przeciwieństwie do &lt;span style="font-weight: bold;"&gt;Alt+Shift+I&lt;/span&gt;, 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ż &lt;span style="font-weight: bold;"&gt;Ctrl + F12&lt;/span&gt;, czyli eclipsowe &lt;span style="font-weight: bold;"&gt;Ctrl+O&lt;/span&gt;, 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 &lt;span style="font-weight: bold;"&gt;fore + TAB&lt;/span&gt; (wstawia szablon pętli for po Enumeration). Działa! I jest również w Eclipse, podobnie jak &lt;span style="font-weight: bold;"&gt;fori&lt;/span&gt;. 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! ;-)&lt;br /&gt;&lt;br /&gt;Ja się zabawiam wtyczką GNbP, a tu proszę &lt;a href="http://cwiki.apache.org/GMOxDOC21/release-notes-212txt.html"&gt;Apache Geronimo v2.1.2 - Released&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:
      italic;"&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pierwszym zaskoczeniem był rozmiar paczki, gdzie poprzedni &lt;span style="font-style:
      italic;"&gt;geronimo-jetty6-javaee5-2.1.1-bin.tar.gz&lt;/span&gt; to 71,2MB a &lt;span style="font-style: italic;"&gt;geronimo-jetty6-javaee5-2.1.2-bin.tar.gz&lt;/span&gt; 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 &lt;a href="http://cwiki.apache.org/GMOxDOC21/release-notes-212txt.html"&gt;Geronimo 2.1.2 Release Notes&lt;/a&gt;) i ostatecznie zmniejszyć rozmiar
      paczki dystrybucyjnej.&lt;br /&gt;&lt;br /&gt;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 &lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/ClassLoader.html"&gt;java.lang.ClassLoader&lt;/a&gt; udostępnia statyczną metodę &lt;a
      href="http://java.sun.com/javase/6/docs/api/java/lang/ClassLoader.html#getSystemClassLoader()"&gt;getSystemClassLoader()&lt;/a&gt;, 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 &lt;a
      href="http://java.sun.com/javase/6/docs/api/java/lang/Thread.html#getContextClassLoader()"&gt;Thread.currentThread().getContextClassLoader()&lt;/a&gt;. 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ą &lt;span style="font-weight: bold;"&gt;java.system.class.loader&lt;/span&gt;. 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.&lt;br /&gt;&lt;br /&gt;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 &lt;a
      href="http://dictionary.cambridge.org/define.asp?key=19147&amp;amp;dict=CALD"&gt;customize&lt;/a&gt;. Ile to razy wokół mnie pada termin "kastomizacja". Czy nie można po prostu użyć słowa &lt;span style="font-style: italic;"&gt;dopaso(wy)wanie&lt;/span&gt;?! 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?&lt;br /&gt;&lt;br /&gt;Kolejnym kandydatem na ustrzelenie, to nieszczęsne - zaadresowanie problemu jako odpowiednik angielskiej frazy &lt;a href="http://dictionary.cambridge.org/define.asp?key=988&amp;amp;dict=CALD"&gt;address an issue&lt;/a&gt;, czyli &lt;span style="font-style: italic;"&gt;obsłużyć problem&lt;/span&gt;. 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 &lt;a href="http://www.bankier.pl/forum/temat_Wademekum-LESZCZA-Z-PARKIETU,3927496.html"&gt;Wademekum LESZCZA !! ( Z PARKIETU)&lt;/a&gt;. Autor wyjaśnił słowo nad wyraz wspaniale:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;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ść.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Na
      zakończenie dla spragnionych wsparcia Hibernate w NetBeans ciekawe demo &lt;a href="http://www.netbeans.tv/screencasts/Hibernate-Support-in-the-NetBeans-IDE-370/"&gt;Hibernate Support in the NetBeans IDE&lt;/a&gt;. 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!&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-7368220739143226801?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 06 Aug 2008 22:03:00 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Urlop na Roztoczu oraz wtyczka NetBeans dla Geronimo</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-5352373494599427906</guid>
      <link>http://blog.japila.pl/2008/08/urlop-na-roztoczu-oraz-wtyczka-netbeans.html</link>
      <description>&lt;span style="font-style: italic;"&gt;"Każdy ma swój urlop, miałem i ja - na Roztoczu"&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://3.bp.blogspot.com/_wSeV_DMR2uA/SJNgJEvtCSI/AAAAAAAABCU/MdXd8FNPBaI/s1600-h/mapka.gif"&gt;&lt;img src="http://3.bp.blogspot.com/_wSeV_DMR2uA/SJNgJEvtCSI/AAAAAAAABCU/MdXd8FNPBaI/s320/mapka.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5229629301316192546" /&gt;&lt;/a&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SJNgviH1fsI/AAAAAAAABCc/k8mlIk2nf7A/s1600-h/IMG_8097.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SJNgviH1fsI/AAAAAAAABCc/k8mlIk2nf7A/s320/IMG_8097.jpg" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5229629962037067458" /&gt;&lt;/a&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_wSeV_DMR2uA/SJNhcVljQHI/AAAAAAAABCk/QhhUJxKukcA/s1600-h/IMG_8618.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_wSeV_DMR2uA/SJNhcVljQHI/AAAAAAAABCk/QhhUJxKukcA/s320/IMG_8618.jpg" alt="" style="margin: 0px
      auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5229630731766153330" /&gt;&lt;/a&gt;Chyba jestem skazany na Javę.&lt;br /&gt;&lt;br /&gt;W drodze powrotnej zawitaliśmy do &lt;span style="font-weight: bold;"&gt;Karczmy "Bida"&lt;/span&gt;, 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.&lt;br /&gt;&lt;br /&gt;Po powrocie przejrzenie poczty, a tam ciekawostka związana z &lt;span style="font-weight: bold;"&gt;NetBeans IDE 6.5&lt;/span&gt;. 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 &lt;span style="font-weight: bold;"&gt;Geronimo 2 Application Server&lt;/span&gt;. 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?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SJNh16DTG9I/AAAAAAAABCs/Gh61R_r37HM/s1600-h/geronimo-netbeans.gif"&gt;&lt;img
      src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SJNh16DTG9I/AAAAAAAABCs/Gh61R_r37HM/s320/geronimo-netbeans.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5229631171051330514" /&gt;&lt;/a&gt;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.&lt;br /&gt;&lt;br /&gt;p.s. W trakcie urlopu
      udało mi się zebrać w sobie i przeczytałem książkę &lt;a href="http://www.bogaty-ojciec.pl/?a=bogaty-ojciec"&gt;"Bogaty Ojciec, Biedny Ojciec"&lt;/a&gt; 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.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-5352373494599427906?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 01 Aug 2008 19:35:44 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: faces-config.xml podzielony z javax.faces.CONFIG_FILES</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-8759995512025413778</guid>
      <link>http://blog.japila.pl/2008/07/faces-configxml-podzielony-z.html</link>
      <description>Zgodnie ze specyfikacją &lt;span style="font-weight: bold;"&gt;JavaServer Faces 1.2&lt;/span&gt; (&lt;span&gt;rozdział &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;10.4.2 Application Startup Behavior&lt;/span&gt;, strona 312) podczas uruchamiania aplikacji webowej korzystającej z JSF implementacja JSF wykonuje następujące kroki konfiguracyjne:&lt;ol&gt;&lt;li&gt;(opcjonalnie) sprawdza istnienie definicji servletu &lt;span style="font-weight:
      bold;"&gt;javax.faces.webapp.FacesServlet&lt;/span&gt; w deskryptorze wdrożenia i w przypadku jego braku może w tym momencie zakończyć pracę&lt;/li&gt;&lt;li&gt;poszukuje &lt;span style="font-weight: bold;"&gt;META-INF/faces-config.xml&lt;/span&gt; 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 &lt;span
      style="font-style: italic;"&gt;Thread.getContextClassloader().getResources()&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;sprawdza istnienie parametru kontekstowego &lt;span style="font-weight: bold;"&gt;javax.faces.CONFIG_FILES&lt;/span&gt;, który jest listą plików konfiguracyjnych oddzielonych przecinkiem, a następnie wczytuje je kolejno&lt;/li&gt;&lt;li&gt;sprawdza istnienie pliku &lt;span style="font-weight: bold;"&gt;/WEB-INF/faces-config.xml&lt;/span&gt; w aplikacji webowej&lt;/li&gt;&lt;/ol&gt;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ą:&lt;pre&gt; &amp;lt;?xml version="1.0"?&gt;&lt;br /&gt; &amp;lt;faces-config version="1.2" &lt;br /&gt; xmlns="http://java.sun.com/xml/ns/javaee"&lt;br /&gt; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" &lt;br /&gt; xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
      http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;factory&gt;&lt;br /&gt; &amp;lt;application-factory&gt;org.jboss.seam.jsf.SeamApplicationFactory&amp;lt;/application-factory&gt;&lt;br /&gt; &amp;lt;/factory&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;application&gt;&lt;br /&gt; &amp;lt;navigation-handler&gt;org.jboss.seam.jsf.SeamNavigationHandler&amp;lt;/navigation-handler&gt;&lt;br /&gt;
      &amp;lt;view-handler&gt;org.jboss.seam.jsf.SeamViewHandler&amp;lt;/view-handler&gt;&lt;br /&gt; &amp;lt;state-manager&gt;org.jboss.seam.jsf.SeamStateManager&amp;lt;/state-manager&gt;&lt;br /&gt; &amp;lt;el-resolver&gt;org.jboss.seam.el.SeamELResolver&amp;lt;/el-resolver&gt;&lt;br /&gt; &amp;lt;message-bundle&gt;org.jboss.seam.core.SeamResourceBundle&amp;lt;/message-bundle&gt;&lt;br /&gt; &amp;lt;/application&gt;&lt;br /&gt; &lt;br /&gt; &amp;lt;lifecycle&gt;&lt;br /&gt;
      &amp;lt;phase-listener&gt;org.jboss.seam.jsf.SeamPhaseListener&amp;lt;/phase-listener&gt;&lt;br /&gt; &amp;lt;/lifecycle&gt;&lt;br /&gt; &lt;br /&gt; &amp;lt;/faces-config&gt;&lt;/pre&gt;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.&lt;br /&gt;&lt;br /&gt;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ą.&lt;br /&gt;&lt;br /&gt;Możemy, więc posiadać wiele plików konfiguracyjnych w formacie faces-config.xml, które definiujemy w deskryptorze wdrożenia aplikacji webowej - &lt;span style="font-weight:
      bold;"&gt;/WEB-INF/web.xml&lt;/span&gt; następująco:&lt;pre&gt; &amp;lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;br /&gt; &amp;lt;web-app version="2.5" &lt;br /&gt; xmlns="http://java.sun.com/xml/ns/javaee"&lt;br /&gt; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt; xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"&gt;&lt;br /&gt; &amp;lt;context-param&gt;&lt;br /&gt;
      &amp;lt;param-name&gt;javax.faces.CONFIG_FILES&amp;lt;/param-name&gt;&lt;br /&gt; &amp;lt;param-value&gt;/WEB-INF/produkcyjny-faces-config.xml, /WEB-INF/inny-faces-config.xml&amp;lt;/param-value&gt;&lt;br /&gt; &amp;lt;/context-param&gt;&lt;br /&gt; &amp;lt;/web-app&gt;&lt;/pre&gt;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.&lt;br /&gt;&lt;br /&gt;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 &lt;a
      href="http://jlaskowski.blogspot.com/2008/07/netbeans-6-i-jego-edytor-pageflow-do.html"&gt;NetBeans 6 i jego edytor PageFlow do faces-config.xml&lt;/a&gt;). Dobra wiadomość jest taka, że tworząc ziarno zarządzane przez asystenta &lt;span style="font-weight: bold;"&gt;JSF Managed Bean&lt;/span&gt; w polu &lt;span style="font-weight: bold;"&gt;Configuration File&lt;/span&gt; widnieją nasze pliki konfiguracyjne JSF.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SIjd9uCPRII/AAAAAAAABCE/sMJWYfpffzE/s1600-h/new-jsf-managed-bean.gif"&gt;&lt;img src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SIjd9uCPRII/AAAAAAAABCE/sMJWYfpffzE/s320/new-jsf-managed-bean.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5226671419962639490" /&gt;&lt;/a&gt;Nie obyło się bez zgłoszenia kilku błędów odnośnie wsparcia javax.faces.CONFIG_FILES, jak np. &lt;a
      href="http://www.netbeans.org/issues/show_bug.cgi?id=141444"&gt;Issue #141444 [65cat] Configuration Files without all javax.faces.CONFIG_FILES&lt;/a&gt;, gdzie w Configuration Files jedynie wymieniony jest pierwszy z listy plików w javax.faces.CONFIG_FILES oraz faces-config.xml.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_wSeV_DMR2uA/SIjeFGj3IBI/AAAAAAAABCM/GXZtxlFxu7k/s1600-h/jsf-application.gif"&gt;&lt;img
      src="http://2.bp.blogspot.com/_wSeV_DMR2uA/SIjeFGj3IBI/AAAAAAAABCM/GXZtxlFxu7k/s320/jsf-application.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5226671546805198866" /&gt;&lt;/a&gt;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?&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-8759995512025413778?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 24 Jul 2008 20:07:33 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Zmiany w NetBeans 6.5 nie tylko w harmonogramie, netbeans.keep.expansion oraz ukryte skarby JDK - jps i jstack</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-8844623482058095027</guid>
      <link>http://blog.japila.pl/2008/07/zmiany-w-netbeans-65-nie-tylko-w.html</link>
      <description>Przez długi okres czasu, od &lt;span style="font-weight: bold;"&gt;10 lipca&lt;/span&gt;, wersja rozwojowa NetBeans IDE 6.5 była niedostępna, aż dopiero 3 dni temu - &lt;span style="font-weight: bold;"&gt;17.07&lt;/span&gt; - pojawiła się długooczekiwana nowiuteńka paczka dystrybucyjna &lt;a href="http://bits.netbeans.org/dev/nightly/latest/zip/netbeans-trunk-nightly-200807170007.zip"&gt;netbeans-trunk-nightly-200807170007.zip&lt;/a&gt; (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 &lt;a href="http://qa.netbeans.org/processes/cat/65/"&gt;NetCAT 6.5&lt;/a&gt;. Tym razem obiecałem sobie, że przyjrzę się &lt;span style="font-weight: bold;"&gt;Groovy&lt;/span&gt; i &lt;span style="font-weight: bold;"&gt;Grails&lt;/span&gt;, 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 &lt;a href="http://www.ibm.com/developerworks/java/library/j-grails01158/"&gt;Mastering Grails: Build your first Grails application&lt;/a&gt;. 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?&lt;br /&gt;&lt;br /&gt;Po uruchomieniu NetBeansa pierwsze zaskoczenie - pojawiła się nowa grafika początkowa (ang. &lt;span
      style="font-style: italic;"&gt;splash screen&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://hg.netbeans.org/main/raw-file/987134de591e/core.startup/src/org/netbeans/core/startup/splash.gif"&gt;&lt;img src="http://hg.netbeans.org/main/raw-file/987134de591e/core.startup/src/org/netbeans/core/startup/splash.gif" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" border="0" alt="" /&gt;&lt;/a&gt;Ładniutki, nieprawdaż? Poza tą niefunkcjonalną
      zmianą, mamy domyślnie otwarty widok &lt;span style="font-weight: bold;"&gt;Tasks&lt;/span&gt; (&lt;span style="font-weight: bold;"&gt;Ctrl+6&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_wSeV_DMR2uA/SIOdiWc0wdI/AAAAAAAABB0/ouOGeGBRl48/s1600-h/tasks.gif"&gt;&lt;img src="http://3.bp.blogspot.com/_wSeV_DMR2uA/SIOdiWc0wdI/AAAAAAAABB0/ouOGeGBRl48/s320/tasks.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0"
      id="BLOGGER_PHOTO_ID_5225193206147498450" /&gt;&lt;/a&gt;Zadania określane są przez znane i lubiane &lt;span style="font-weight: bold;"&gt;TODO&lt;/span&gt;, ale również kilka innych adnotacji (patrz &lt;span style="font-weight: bold;"&gt;Tools &gt; Options &gt; Miscellaneous &gt; ToDo Tasks&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_wSeV_DMR2uA/SIOd3yqVQFI/AAAAAAAABB8/r2pQWx7X9nU/s1600-h/options-todo.gif"&gt;&lt;img
      src="http://2.bp.blogspot.com/_wSeV_DMR2uA/SIOd3yqVQFI/AAAAAAAABB8/r2pQWx7X9nU/s320/options-todo.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5225193574497599570" /&gt;&lt;/a&gt;Przy okazji konfiguracji adnotacji dla zadań pojawiło się jedno z moich ulubionych słówek angielskich - &lt;a href="http://dictionary.cambridge.org/define.asp?dict=CALD&amp;amp;key=50959&amp;amp;ph=on"&gt;&lt;span style="font-weight:
      bold;"&gt;miscellaneous&lt;/span&gt;&lt;/a&gt;. 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).&lt;br /&gt;&lt;br /&gt;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ą.&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;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.&lt;br /&gt;&lt;br /&gt;This change was made intentionally (I thought earlier than 5.5, but perhaps not) - the reexpansion of
      the nodes was slowing down startup.&lt;br /&gt;&lt;br /&gt; &lt;a href="http://www.netbeans.org/issues/show_bug.cgi?id=55701"&gt;http://www.netbeans.org/issues/show_bug.cgi?id=55701&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You should be able to enable the expansion by adding&lt;br /&gt;&lt;br /&gt; -J-Dnetbeans.keep.expansion=true&lt;br /&gt;&lt;br /&gt;to your netbeans.conf, but note that this mode is not tested.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Kolejną ciekawostką z programu NetCAT 6.5 jest narzędzie
      &lt;a href="http://java.sun.com/javase/6/docs/technotes/tools/share/jstack.html"&gt;jstack&lt;/a&gt;, o którym nie miałem w ogóle świadomości istnienia (!) A narządko bardzo ciekawej funkcjonalności, bo &lt;span style="font-style: italic;"&gt;prints Java stack traces of Java threads for a given Java process or core file or a remote debug server&lt;/span&gt;, 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 &lt;a href="http://wiki.netbeans.org/GenerateThreadDump"&gt;NetBeans - How to Generate a Thread Dump&lt;/a&gt;. Okazuje się, że poza jstack jest również niejaki &lt;span style="font-weight: bold;"&gt;StackTrace&lt;/span&gt;. 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 &lt;a href="http://java.sun.com/javase/6/docs/technotes/tools/share/jps.html"&gt;jps&lt;/a&gt;, który wypisuje identyfikatory procesów javowych, np.:&lt;pre&gt;&lt;br /&gt; C:\Documents and Settings\jlaskowski 2008-07-18 12:19:33,98&lt;br /&gt; &gt; C:\apps\java6\bin\jps.exe&lt;br /&gt; 32132 org.eclipse.equinox.launcher_1.0.100.v20080509-1800.jar&lt;br /&gt; 35188 NetworkServerControl&lt;br /&gt; 35684 Main&lt;br /&gt; 37884 Jps&lt;br
      /&gt; 30228 PELaunch&lt;br /&gt;&lt;/pre&gt;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. ;-)):&lt;pre&gt; C:\Documents and Settings\jlaskowski 2008-07-18 12:21:39,67&lt;br /&gt; &gt; C:\apps\java6\bin\jstack.exe -l 35684&lt;br /&gt; 2008-07-18 12:23:57&lt;br /&gt;
      Full thread dump Java HotSpot(TM) Client VM (10.0-b23 mixed mode):&lt;br /&gt;&lt;br /&gt; "Inactive RequestProcessor thread [Was:Default RequestProcessor/org.netbeans.modules.xml.xam.AbstractModelFactory$1]" da&lt;br /&gt; emon prio=2 tid=0x374a1400 nid=0x8100 in Object.wait() [0x3bb4f000..0x3bb4fc14]&lt;br /&gt; java.lang.Thread.State: TIMED_WAITING (on object monitor)&lt;br /&gt; at java.lang.Object.wait(Native Method)&lt;br /&gt; at
      org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:950)&lt;br /&gt; - locked &amp;lt;0x09baa8a0&gt; (a java.lang.Object)&lt;br /&gt;&lt;br /&gt; Locked ownable synchronizers:&lt;br /&gt; - None&lt;br /&gt; ...&lt;br /&gt; "Finalizer" daemon prio=8 tid=0x31377400 nid=0x8a24 in Object.wait() [0x3184f000..0x3184fa94]&lt;br /&gt; java.lang.Thread.State: WAITING (on object monitor)&lt;br /&gt; at java.lang.Object.wait(Native Method)&lt;br /&gt; at
      java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)&lt;br /&gt; - locked &amp;lt;0x0549b4e0&gt; (a java.lang.ref.ReferenceQueue$Lock)&lt;br /&gt; at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)&lt;br /&gt; at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)&lt;br /&gt;&lt;br /&gt; Locked ownable synchronizers:&lt;br /&gt; - None&lt;br /&gt;&lt;br /&gt; "Reference Handler" daemon prio=10 tid=0x31376400 nid=0x88b8 in Object.wait() [0x3164f000..0x3164fb14]&lt;br
      /&gt; java.lang.Thread.State: WAITING (on object monitor)&lt;br /&gt; at java.lang.Object.wait(Native Method)&lt;br /&gt; at java.lang.Object.wait(Object.java:485)&lt;br /&gt; at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)&lt;br /&gt; - locked &amp;lt;0x0549aef0&gt; (a java.lang.ref.Reference$Lock)&lt;br /&gt;&lt;br /&gt; Locked ownable synchronizers:&lt;br /&gt; - None&lt;br /&gt;&lt;br /&gt; "VM Thread" prio=10 tid=0x31373000 nid=0x7654 runnable&lt;br /&gt;&lt;br /&gt; "VM
      Periodic Task Thread" prio=10 tid=0x3139b400 nid=0x8504 waiting on condition&lt;br /&gt;&lt;br /&gt; JNI global references: 2935&lt;/pre&gt;Warto zapoznać się z pełną dokumentacją narzędzi dostarczanych w ramach wybranej JVM, np. dla Sun JDK będzie to &lt;a href="http://java.sun.com/javase/6/docs/technotes/tools/"&gt;JDK Tools and Utilities&lt;/a&gt;. 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 &lt;a href="http://www.ibm.com/developerworks/java/jdk/"&gt;IBM JDK&lt;/a&gt; będzie to inny zestaw narzędzi, często wykraczający poza możliwości Sun JDK.&lt;br /&gt;&lt;br /&gt;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 &lt;span style="font-style: italic;"&gt;the two weeks slip in the schedule&lt;/span&gt;, o którym pisze &lt;span style="font-weight: bold;"&gt;Jirka
      Kovalsky&lt;/span&gt; (głównodowodzący programu NetCAT 6.5):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;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 (&lt;a
      href="http://qa.netbeans.org/processes/cat/65"&gt;http://qa.netbeans.org/processes/cat/65&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nowa wersja NetBeans IDE 6.5 dopiero &lt;span style="font-weight: bold;"&gt;15 października&lt;/span&gt;. 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.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-8844623482058095027?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Sun, 20 Jul 2008 20:49:43 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: NetBeans 6 i jego edytor PageFlow do faces-config.xml</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-6185481375279383010</guid>
      <link>http://blog.japila.pl/2008/07/netbeans-6-i-jego-edytor-pageflow-do.html</link>
      <description>Pamiętam, że już jakiś czas tematu zastanawiałem się nad zastosowaniem edytora &lt;span style="font-weight: bold;"&gt;PageFlow&lt;/span&gt; do edycji &lt;span style="font-weight: bold;"&gt;faces-config.xml&lt;/span&gt; - główny plik konfiguracyjny aplikacji &lt;span style="font-weight: bold;"&gt;JavaServer Faces (JSF)&lt;/span&gt;. 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.&lt;br /&gt;&lt;br /&gt;Głównym zadaniem edytora PageFlow, który służy do edycji pliku &lt;span style="font-weight: bold;"&gt;faces-config.xml&lt;/span&gt;, 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. &lt;a
      href="http://wiki.netbeans.org/PageFlowEditorUISpecification"&gt;Page Flow Editor Functional Specification&lt;/a&gt;). 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.&lt;br /&gt;&lt;br /&gt;Garść informacji o edytorze PageFlow dla
      faces-config.xml znajduje się w dokumencie &lt;a href="http://wiki.netbeans.org/PageFlowEditor"&gt;PageFlow Editor for NetBeans 6.0&lt;/a&gt; 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 &lt;a href="http://thoughtfulprogrammer.blogspot.com/2008/04/net-beans-61-page-flows.html"&gt;Net Beans (6.1) Page Flows&lt;/a&gt;, 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 &lt;span style="font-weight: bold;"&gt;JavaServer Faces&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://3.bp.blogspot.com/_wSeV_DMR2uA/SIEGQyW46KI/AAAAAAAABBs/w_MnPfTLDac/s1600-h/frameworks-jsf-jedynie.gif"&gt;&lt;img src="http://3.bp.blogspot.com/_wSeV_DMR2uA/SIEGQyW46KI/AAAAAAAABBs/w_MnPfTLDac/s320/frameworks-jsf-jedynie.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5224463928191936674" /&gt;&lt;/a&gt;Przy takiej konfiguracji PageFlow udostępniał jedynie 3 akcje dla stron JSP.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SIEFHEXQ7-I/AAAAAAAABBM/E_UoDT-Eeig/s1600-h/regular-jsp-menu.gif"&gt;&lt;img src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SIEFHEXQ7-I/AAAAAAAABBM/E_UoDT-Eeig/s320/regular-jsp-menu.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5224462661715029986" /&gt;&lt;/a&gt;Zastanawiałem się wciąż po co ten plus po prawej stronie (u góry zakryty przez menu &lt;span style="font-style:
      italic;"&gt;Delete&lt;/span&gt;). Kilkakrotnie napotykałem dyskusję dotyczącą &lt;span style="font-weight: bold;"&gt;Visual Web JavaServer Faces&lt;/span&gt; (w skrócie &lt;span style="font-weight: bold;"&gt;Visual Web&lt;/span&gt;) w kontekście budowania aplikacji JSF w NetBeans. &lt;span style="font-weight: bold;"&gt;Visual Web&lt;/span&gt; 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 &lt;span style="font-weight: bold;"&gt;Visual Web JavaServer Faces&lt;/span&gt; do kategorii &lt;span style="font-weight: bold;"&gt;Frameworks&lt;/span&gt; we właściwościach projektu projektu JSF strony JSP stworzone jako &lt;span style="font-weight: bold;"&gt;Visual Web JSF Page&lt;/span&gt; były specjalnie traktowane przez NetBeans.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://2.bp.blogspot.com/_wSeV_DMR2uA/SIEEwb2FFbI/AAAAAAAABBE/c7KVovU8614/s1600-h/frameworks.gif"&gt;&lt;img src="http://2.bp.blogspot.com/_wSeV_DMR2uA/SIEEwb2FFbI/AAAAAAAABBE/c7KVovU8614/s320/frameworks.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5224462272881300914" /&gt;&lt;/a&gt;Nadal były stronami JSP, ale poza zmianą wizualną w widoku &lt;span style="font-weight: bold;"&gt;Projects&lt;/span&gt;, która
      polegała na zmianie ikony związanej ze stronami, do ich edycji mogłem użyć edytora &lt;span style="font-weight: bold;"&gt;Design&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;JSP&lt;/span&gt; i &lt;span style="font-weight: bold;"&gt;Java&lt;/span&gt; w jednym (czego nie miałem do dyspozycji przy "zwykłych" stronach JSF).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_wSeV_DMR2uA/SIEFei18IyI/AAAAAAAABBU/dAO3GscR9xY/s1600-h/page1-pageflow.gif"&gt;&lt;img
      src="http://2.bp.blogspot.com/_wSeV_DMR2uA/SIEFei18IyI/AAAAAAAABBU/dAO3GscR9xY/s320/page1-pageflow.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5224463065033745186" /&gt;&lt;/a&gt;Zmiana również wpłynęła na dostępne menu w PageFlow związane ze stronami typu Visual Web.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SIEFlYl7ilI/AAAAAAAABBc/I9OF-LC5MhA/s1600-h/visual-jsp-menu.gif"&gt;&lt;img
      src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SIEFlYl7ilI/AAAAAAAABBc/I9OF-LC5MhA/s320/visual-jsp-menu.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5224463182541326930" /&gt;&lt;/a&gt;Pojawiły się 3 nowe akcje i możliwe stało się wiązanie (tworzenie przepływu/nawigacji) między elementami strony - przycisk (ang. &lt;span style="font-style: italic;"&gt;button&lt;/span&gt;) jako &lt;span style="font-weight: bold;"&gt;Add
      Button&lt;/span&gt;, odnośnik (ang. &lt;span style="font-style: italic;"&gt;hyperlink&lt;/span&gt;) jako &lt;span style="font-weight: bold;"&gt;Add Hyperlink&lt;/span&gt; oraz odnośnik z obrazkiem (ang. &lt;span style="font-style: italic;"&gt;image hyperlink&lt;/span&gt;) jako &lt;span style="font-weight: bold;"&gt;Add Image Hyperlink&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;Ostatecznie PageFlow prezentuje się następująco.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SIEF29U-x0I/AAAAAAAABBk/I0Az21K3ljU/s1600-h/pageflow.gif"&gt;&lt;img src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SIEF29U-x0I/AAAAAAAABBk/I0Az21K3ljU/s320/pageflow.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5224463484460123970" /&gt;&lt;/a&gt;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!&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-6185481375279383010?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 18 Jul 2008 21:22:45 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Słów kilka o Maven 2 w NetBeans 6.5, Sun Certified NetBeans IDE Specialist oraz "GWT w praktyce" Power Netu</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-976912983657644742</guid>
      <link>http://blog.japila.pl/2008/07/sw-kilka-o-maven-2-w-netbeans-65-sun.html</link>
      <description>&lt;span style="font-weight: bold;"&gt;Piotr Pietrzak&lt;/span&gt; w &lt;a href="http://jlaskowski.blogspot.com/2008/07/klasyfikatory-w-maven-2-oraz.html?showComment=1216107540000#c4984013617935802261"&gt;komentarzu&lt;/a&gt; do &lt;a href="http://jlaskowski.blogspot.com/2008/07/klasyfikatory-w-maven-2-oraz.html"&gt;Klasyfikatory w Maven 2 oraz polonizacja NetBeans IDE&lt;/a&gt; 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...&lt;a href="http://macintosh.pl/CORE/film.html"&gt;filmu&lt;/a&gt; (!) Wspaniała forma dyskusji w Sieci. Wierzę, że będą kolejne. Tylko, dlaczego nie ma głosu?! ;-)&lt;br /&gt;&lt;br /&gt;Temat pobrania źródeł do zależności projektu mavenowego w NetBeans sprowadza się do &lt;span style="font-weight: bold;"&gt;Add local sources&lt;/span&gt; pod prawym przyciskiem myszki dla wybranej zależności&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SH0TBERxRNI/AAAAAAAABAM/nh_-5N1Kzd8/s1600-h/add-local-sources.gif"&gt;&lt;img src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SH0TBERxRNI/AAAAAAAABAM/nh_-5N1Kzd8/s320/add-local-sources.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5223352051868714194" /&gt;&lt;/a&gt;bądź po prostu &lt;span style="font-weight: bold;"&gt;Download All Library Sources&lt;/span&gt; na węźle &lt;span
      style="font-weight: bold;"&gt;Libraries&lt;/span&gt; w projekcie.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SH0TGsOXnrI/AAAAAAAABAU/PKFPmQn4-oM/s1600-h/download-all-library-sources.gif"&gt;&lt;img src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SH0TGsOXnrI/AAAAAAAABAU/PKFPmQn4-oM/s320/download-all-library-sources.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5223352148491214514"
      /&gt;&lt;/a&gt;Co ciekawe, po pobraniu wszystkich źródeł, nazwy plików udekorowane są ikonką ze słoikiem i pakunkiem.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_wSeV_DMR2uA/SH0TL4OYYvI/AAAAAAAABAc/E8lPjRzvnj0/s1600-h/libraries-jar-bundle.gif"&gt;&lt;img src="http://3.bp.blogspot.com/_wSeV_DMR2uA/SH0TL4OYYvI/AAAAAAAABAc/E8lPjRzvnj0/s320/libraries-jar-bundle.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0"
      id="BLOGGER_PHOTO_ID_5223352237611836146" /&gt;&lt;/a&gt;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&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SH0TQx-urjI/AAAAAAAABAk/kjZZAPxvac8/s1600-h/local-maven-repo-spring-web.gif"&gt;&lt;img src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SH0TQx-urjI/AAAAAAAABAk/kjZZAPxvac8/s320/local-maven-repo-spring-web.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5223352321834921522" /&gt;&lt;/a&gt;a w edytorze jako podpowiedź otrzymuję (&lt;span style="font-weight:
      bold;"&gt;Ctrl+Spacja&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_wSeV_DMR2uA/SH0TWZduI8I/AAAAAAAABAs/8Z0D4Pbifh8/s1600-h/maven-editor-support-version.gif"&gt;&lt;img src="http://3.bp.blogspot.com/_wSeV_DMR2uA/SH0TWZduI8I/AAAAAAAABAs/8Z0D4Pbifh8/s320/maven-editor-support-version.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5223352418333238210" /&gt;&lt;/a&gt;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.&lt;br /&gt;&lt;br /&gt;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. &lt;span style="font-weight: bold;"&gt;Help &gt; Keyboard
      Shortcuts Card&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SH0TeEVxugI/AAAAAAAABA0/ZtKCMN09R0w/s1600-h/help-keyboard-shortcuts-card.gif"&gt;&lt;img src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SH0TeEVxugI/AAAAAAAABA0/ZtKCMN09R0w/s320/help-keyboard-shortcuts-card.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5223352550101727746" /&gt;&lt;/a&gt;po którym otwiera się dokument pdf ze
      skrótami. Wystarczyło &lt;span style="font-weight: bold;"&gt;Ctrl+F&lt;/span&gt; (szukaj), wpisanie ciągu &lt;span style="font-style: italic;"&gt;type&lt;/span&gt;, &amp;lt;Enter&gt; i mam - &lt;span style="font-weight: bold;"&gt;Ctrl-O/Alt-Shift-O Go to type/file&lt;/span&gt;. 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.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SH0TmfZj6DI/AAAAAAAABA8/05AFKKZmT7k/s1600-h/gototype-ncdfe.gif"&gt;&lt;img src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SH0TmfZj6DI/AAAAAAAABA8/05AFKKZmT7k/s320/gototype-ncdfe.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5223352694804310066" /&gt;&lt;/a&gt;Tylko jedno mi doskwiera teraz - dlaczego eclipsowe Ctrl+O w edytorze
      Java to &lt;span style="font-weight: bold;"&gt;Ctrl+Shift+F12&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;Na grupie NetCAT 6.5 Jirka (głównodowodzący programem) poprosił o ocenę przygotowywanego certyfikatu &lt;span style="font-weight: bold;"&gt;Sun Certified NetBeans IDE Specialist&lt;/span&gt;. 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 &lt;a href="http://certification.sun.com/sesCert/"&gt;ankiecie Sun Certified NetBeans IDE Specialist&lt;/a&gt;. 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 ;-)&lt;br /&gt;&lt;br /&gt;Na koniec wiadomość z ostatniej chwili - pojawiła się ciekawa oferta na
      półce wydawnictwa Power Net - &lt;a href="http://www.powernet.pl/ksiazka.php?id=4"&gt;GWT w praktyce&lt;/a&gt; autorstwa Roberta Coopera oraz Charles'a Collinsa. Książka została przetłumaczona przez &lt;span style="font-weight: bold;"&gt;Marcina Leszczyńskiego&lt;/span&gt;, 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!&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-976912983657644742?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Tue, 15 Jul 2008 21:22:30 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Klasyfikatory w Maven 2 oraz polonizacja NetBeans IDE</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-6811253330235109972</guid>
      <link>http://blog.japila.pl/2008/07/klasyfikatory-w-maven-2-oraz.html</link>
      <description>Już jakiś czas minął od zgłoszenia usprawnienia związanego z niedostępnością dokumentacji javadoc w dystrybucji Apache Wicket (&lt;a href="http://issues.apache.org/jira/browse/WICKET-1587"&gt;WICKET-1587 Include javadoc in the distro&lt;/a&gt;). Okazało się, że właśnie dzisiaj zamknięto moje zgłoszenie jako &lt;span style="font-style: italic;"&gt;Duplicate&lt;/span&gt; ze wskazaniem na kolejne zgłoszenie &lt;a href="http://issues.apache.org/jira/browse/WICKET-543"&gt;WICKET-543 need
      javadocs embedded in the Wicket 1.3 zip file&lt;/a&gt;. W WICKET-543 zgłoszenie kończy się wskazaniem na plik dokumentacji w publicznym repozytorium mavenowym Wicketa - &lt;a href="http://repo1.maven.org/maven2/org/apache/wicket/wicket"&gt;http://repo1.maven.org/maven2/org/apache/wicket/wicket&lt;/a&gt;. 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.&lt;br /&gt;&lt;br /&gt;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 &lt;a href="http://m2eclipse.sonatype.org/"&gt;m2eclipse&lt;/a&gt;, która umożliwia pobranie źródeł dla zadanych zależności (&lt;span style="font-weight: bold;"&gt;Maven &gt; Download Sources&lt;/span&gt;), ale już w NetBeans mimo, dostępności wtyczki &lt;a
      href="http://mevenide.codehaus.org/m2-site/"&gt;Mavenide-NetBeans&lt;/a&gt;, 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.&lt;br /&gt;&lt;br /&gt;Rozróżnienie artefaktów pochodzących z pojedyńczego projektu (modułu) odbywa się z użyciem &lt;span style="font-weight: bold;"&gt;klasyfikatora&lt;/span&gt; (ang. &lt;span style="font-style:
      italic;"&gt;classifier&lt;/span&gt;), które jest kolejnym elementem rozróżniania artefaktów w Maven 2 zgodnie z zasadą nazewniczą przedstawioną w rozdziale &lt;a href="http://maven.apache.org/pom.html#POM_Relationships"&gt;POM Relationships&lt;/a&gt;. Najbardziej powszechnym użyciem klasyfikatora to wskazanie pliku z dokumentacją javadoc (klasyfikator: &lt;span style="font-weight: bold;"&gt;javadoc&lt;/span&gt;) oraz źródłami (klasyfikator: &lt;span style="font-weight:
      bold;"&gt;sources&lt;/span&gt;). Deklaracja zależności w projekcie mavenowym odbywa się w pliku &lt;span style="font-weight: bold;"&gt;pom.xml&lt;/span&gt;, np.:&lt;pre&gt; &amp;lt;dependencies&gt;&lt;br /&gt; &amp;lt;dependency&gt;&lt;br /&gt; &amp;lt;groupId&gt;org.apache.wicket&amp;lt;/groupId&gt;&lt;br /&gt; &amp;lt;artifactId&gt;wicket&amp;lt;/artifactId&gt;&lt;br /&gt; &amp;lt;version&gt;1.4-m3&amp;lt;/version&gt;&lt;br /&gt; &amp;lt;/dependency&gt;&lt;br /&gt; &amp;lt;/dependencies&gt;&lt;br
      /&gt;&lt;/pre&gt;i dotyczy zazwyczaj artefaktów, które są plikami jar (domyślna wartość dla elementu &lt;span style="font-style: italic;"&gt;dependency/type&lt;/span&gt; to jar) z pustym klasyfikatorem. Wskazanie na zasób (artefakt) o klasyfikatorze &lt;span style="font-style: italic;"&gt;javadoc&lt;/span&gt; wymaga skorzystania z elementu &lt;span style="font-weight: bold;"&gt;classifier&lt;/span&gt; z wartością &lt;span style="font-style: italic;"&gt;javadoc&lt;/span&gt;. 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 &lt;span style="font-style: italic;"&gt;javadoc&lt;/span&gt; czy &lt;span style="font-style: italic;"&gt;sources&lt;/span&gt; (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ę).&lt;br /&gt;&lt;br /&gt;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 &lt;a href="http://maven.apache.org/plugins/maven-assembly-plugin/"&gt;maven-assembly-plugin&lt;/a&gt;, 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 &lt;a href="http://maven.apache.org/plugins/maven-eclipse-plugin/"&gt;maven-eclipse-plugin&lt;/a&gt; generująca definicję projektu eclipsowego na podstawie pom.xml pozwala na określenie wymagania podpięcia javadoc czy źródeł do projektu - parametry &lt;span style="font-weight: bold;"&gt;-DdownloadJavadocs=true&lt;/span&gt; i &lt;span style="font-weight:
      bold;"&gt;-DdownloadSources=true&lt;/span&gt;, odpowiednio (patrz &lt;a href="http://maven.apache.org/plugins/maven-eclipse-plugin/examples/attach-library-sources.html"&gt;Attach Library Sources and Javadocs&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;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ą.&lt;br /&gt;&lt;br /&gt;Kiedy teraz przyjdzie mi pracować z projektem mavenowym w środowisku Eclipse bez pomocy wtyczki m2eclipse wystarczy uruchomić polecenie&lt;pre&gt; mvn eclipse:eclipse -DdownloadSources=true
      -DdownloadJavadocs=true&lt;br /&gt;&lt;/pre&gt;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.&lt;br /&gt;&lt;br /&gt;Od kilku dobrych miesięcy trwają prace nad polonizacją NetBeans IDE 6. Prace trwają i mimo nadchodzącej wersji &lt;span style="font-weight: bold;"&gt;NetBeans IDE
      6.5&lt;/span&gt; (od 14-tego rozpoczynają się prace w &lt;a href="http://qa.netbeans.org/processes/cat/65/index.html"&gt;NetCAT 6.5&lt;/a&gt;), 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 &lt;a href="http://wiki.netbeans.org/PolishTranslation"&gt;zespołu polonizującego NetBeans&lt;/a&gt;. Proponuję zacząć już dzisiaj.&lt;div
      class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-6811253330235109972?l=blog.japila.pl" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 14 Jul 2008 21:51:34 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Zaproszenie do NetCAT 6.5 oraz NetBeans Dream Team jednego dnia</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-1917546586859845292</guid>
      <link>http://jlaskowski.blogspot.com/2008/07/zaproszenie-do-netcat-65-oraz-netbeans.html</link>
      <description>Dzisiaj spędziłem czas w cieniu rozpracowania zawiłości &lt;a href="http://www.ibm.com/software/webservers/appserv/was/"&gt;IBM WebSphere Application Server 6.1&lt;/a&gt; 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 &lt;a href="http://www.ibm.com/software/integration/wps/"&gt;IBM WebSphere Process Server 6.0.2&lt;/a&gt; w ich najdrobniejszych szczegółach i jeszcze nie było dnia, abym nie dowiedział się czegoś nowego. Zabawy co nie miara!&lt;br /&gt;&lt;br /&gt;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 - &lt;a href="http://www.netbeans.org"&gt;NetBeans&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Pierwsze z nich to zaproszenie do programu &lt;a href="http://qa.netbeans.org/processes/cat/65/index.html"&gt;NetCAT 6.5&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Welcome to the NetCAT 6.5 program!&lt;br /&gt;&lt;br /&gt;Dear NetCAT 6.5 applicant,&lt;br /&gt;&lt;br /&gt;
      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.&lt;br /&gt;&lt;br /&gt; 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].&lt;br /&gt;&lt;br /&gt;[1] http://qa.netbeans.org/processes/cat/65/etiquette.html&lt;br /&gt;&lt;br /&gt; 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!&lt;br /&gt;&lt;br /&gt;Best regards,&lt;br /&gt;--&lt;br /&gt;Jiri Kovalsky&lt;br
      /&gt;NetCAT 6.5 Program Coordinator&lt;br /&gt;http://qa.netbeans.org/processes/cat/65/index.html&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Drugie zaproszenie to jeszcze większa niespodzianka - zaproszenie do grupy &lt;a href="http://wiki.netbeans.org/wiki/view/NetBeansDreamTeam"&gt;NetBeans Dream Team&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;You are formally invited to join the NetBeans Dream Team&lt;br /&gt;&lt;br /&gt;Hello and congratulations,&lt;br /&gt;&lt;br /&gt;You
      are invited to join the NetBeans Dream Team. Please read more about us at:&lt;br /&gt;http://wiki.netbeans.org/NetBeansDreamTeam&lt;br /&gt;&lt;br /&gt;You were selected using the process located at:&lt;br /&gt;http://wiki.netbeans.org/NBDTNewMemberRules&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;You may read more about
      our mission at:&lt;br /&gt;http://wiki.netbeans.org/DTMissionStatementAndProcess&lt;br /&gt;&lt;br /&gt;and some things we would like to work on at:&lt;br /&gt;http://wiki.netbeans.org/NetbeansDreamTeamIdeasAndProjects&lt;br /&gt;&lt;br /&gt;We sincerely hope you accept this invitation and we look forward to working with you to make our NetBeans community better.&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;br /&gt;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)&lt;br /&gt;&lt;br /&gt;2) What is your name?&lt;br
      /&gt;&lt;br /&gt;3) What is your netbeans user ID? This helps us see your issues in IZ and other community contributions.&lt;br /&gt;&lt;br /&gt;4) Where do you live?&lt;br /&gt;&lt;br /&gt;5) What are some interesting things about you: hobbies, family, etc?&lt;br /&gt;&lt;br /&gt;6) What are your favorite NB features?&lt;br /&gt;&lt;br /&gt;7) What are some interesting features you would like to add to the IDE?&lt;br /&gt;&lt;br /&gt;8) Are you a NetBeans RCP/Platform developer/user?&lt;br
      /&gt;&lt;br /&gt;9) What are some interesting features you would like to add to the RCP/Platform (if a user)?&lt;br /&gt;&lt;br /&gt;10) What do you like most about the NetBeans community?&lt;br /&gt;&lt;br /&gt;11) What are some things you would most like to change in the NetBeans community?&lt;br /&gt;&lt;br /&gt;12) What are some other open-source communities you are involved?&lt;br /&gt;&lt;br /&gt;13) What are your blog and home page addresses?&lt;br /&gt;&lt;br /&gt;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)&lt;br /&gt;&lt;br /&gt;Thank you for your attention,&lt;br /&gt;&lt;br /&gt;Wade Chandler&lt;br /&gt;&lt;br /&gt; ==================&lt;br /&gt;Wade Chandler, CCE&lt;br /&gt;Software Engineer and Developer, Certified Forensic Computer Examiner, NetBeans Dream Team Member, and NetBeans Board Member&lt;br
      /&gt;http://www.certified-computer-examiner.com&lt;br /&gt;http://wiki.netbeans.org/wiki/view/NetBeansDreamTeam&lt;br /&gt;http://www.netbeans.org&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nic dodać, nic ująć. Dzisiejszy dzień przebiegł niezwykle interesująco. &lt;span style="font-style: italic;"&gt;Z wyróżnieniami przychodzą obowiązki&lt;/span&gt;, 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.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-1917546586859845292?l=jlaskowski.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 11 Jul 2008 21:45:01 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: NetBeans IDE 6.5M1 dostępny i algorytmiczna oferta pracy z Mój Startup</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-1733910992020963772</guid>
      <link>http://jlaskowski.blogspot.com/2008/07/netbeans-ide-65m1-dostpny-i.html</link>
      <description>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 &lt;a href="http://bits.netbeans.org/download/6.5/m1/"&gt;NetBeans IDE 6.5 Milestone 1&lt;/a&gt; (&lt;span style="font-weight: bold;"&gt;NetBeans IDE 6.5M1&lt;/span&gt;). Wspominałem o programie &lt;span
      style="font-weight: bold;"&gt;NetBeans Community Acceptance Test (NetCAT)&lt;/span&gt; dotyczącym wersji 6.5 w &lt;a href="http://jlaskowski.blogspot.com/2008/07/umidzynarodowienie-w-jboss-seam-netcat.html"&gt;Umiędzynarodowienie w JBoss Seam, NetCAT 6.5 oraz nowa grupa oferty-pracy-java&lt;/a&gt;, 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 &lt;span style="font-style: italic;"&gt;The only IDE you need!&lt;/span&gt; (za reklamą NetBeans IDE 6.5). W ogłoszeniu napisano:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;This stabilized development build contains the following new &amp;amp; noteworthy features:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style:
      italic;"&gt;PHP&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Enhanced Code Completion&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Database-related code snippets&lt;/span&gt;&lt;/li&gt;&lt;li style="font-style: italic;"&gt;Multiple project configurations&lt;/li&gt;&lt;li style="font-style: italic;"&gt;&lt;span&gt;Find Usages&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li style="font-style: italic;"&gt;Ajax&lt;ul&gt;&lt;li&gt;JavaScript
      Debugger&lt;/li&gt;&lt;li&gt;JavaScript Library Manager&lt;/li&gt;&lt;li&gt;Bundled JavaScript Libraries&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Groovy&lt;/span&gt;&lt;ul&gt;&lt;li style="font-style: italic;"&gt;Editor&lt;/li&gt;&lt;li style="font-style: italic;"&gt;Java SE Project Integration&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Grails support&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span
      style="font-style: italic;"&gt;Java&lt;/span&gt;&lt;ul&gt;&lt;li style="font-style: italic;"&gt;Javadoc Anlyzer&lt;/li&gt;&lt;li style="font-style: italic;"&gt;Call Hierarchy&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;CamelCase code completion&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Debugger&lt;/span&gt;&lt;ul&gt;&lt;li style="font-style: italic;"&gt;New Multithreaded Debugging Support&lt;/li&gt;&lt;li
      style="font-style: italic;"&gt;Debugging Window&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Current Thread Chooser&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li style="font-style: italic;"&gt;Additional enhancements have been made to&lt;ul&gt;&lt;li&gt;Web Frameworks (Spring, Hibernate, JSF, JSF CRUD Generator, JPA)&lt;/li&gt;&lt;li&gt;Ruby&lt;/li&gt;&lt;li&gt;Database&lt;/li&gt;&lt;li&gt;Mobility&lt;/li&gt;&lt;li&gt;GUI Builder&lt;/li&gt;&lt;li&gt;Web
      Services&lt;/li&gt;&lt;li&gt;Improvements to XML and Schema Tools&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-style: italic;"&gt;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.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;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.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bardzo imponująca lista funkcjonalności, nieprawdaż?&lt;br /&gt;&lt;br /&gt;Jestem stałym czytelnikiem bloga &lt;a href="http://mojstartup.pl"&gt;Mój Startup&lt;/a&gt;, w którym pojawiła się niezwykle
      ciekawie przedstawiona &lt;a href="http://mojstartup.pl/index.php/2008/06/19/praca-dla-programisty"&gt;oferta pracy dla programisty java&lt;/a&gt; zawierająca zadanko na znajomość algorytmiki. Ciekawym Waszych rozwiązań.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;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?)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;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 &lt;span
      style="font-style: italic;"&gt;w miejscu&lt;/span&gt;). 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 &lt;a href="http://groups.google.pl/group/oferty-pracy-java/"&gt;oferty-pracy-java&lt;/a&gt;, gdzie tego typu oferty powinny być normą. Czyżby
      nowa jakość na polskim rynku ofert pracy?!&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-1733910992020963772?l=jlaskowski.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 09 Jul 2008 22:17:52 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Umiędzynarodowienie w JBoss Seam, NetCAT 6.5 oraz nowa grupa oferty-pracy-java</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-806665980550387140</guid>
      <link>http://jlaskowski.blogspot.com/2008/07/umidzynarodowienie-w-jboss-seam-netcat.html</link>
      <description>W końcu natrafiłem na notkę odnośnie roli &lt;span style="font-weight: bold;"&gt;seam.properties&lt;/span&gt; w aplikacji w książce &lt;a href="http://www.apress.com/book/view/9781590597927"&gt;Beginning JBoss® Seam: From Novice to Professional&lt;/a&gt; wydawnictwa Apress oraz gdzieś w Sieci. Cała magia &lt;span style="font-style: italic;"&gt;seam.properties&lt;/span&gt; to przede wszystkim oznaczenie archiwum WAR lub JAR jako zawierające komponenty seamowe i stąd konieczność
      umieszczenia go w &lt;span style="font-weight: bold;"&gt;/WEB-INF/classes&lt;/span&gt; w aplikacji webowej, aby Seam zechciał rozważyć przeszukiwanie aplikacji w celu "namierzenia" klas oznaczonych adnotacją &lt;span style="font-weight: bold;"&gt;@Name&lt;/span&gt;. Plik &lt;span style="font-style: italic;"&gt;seam.properties&lt;/span&gt; może być całkowicie pusty - wystarczy jego istnienie. Trudno jednak zrozumieć, dlaczego umieszczenie definicji komponentów w &lt;span style="font-weight:
      bold;"&gt;components.xml&lt;/span&gt; działa, a już przeszukiwanie ich w archiwum nie. Czyż Seam nie dowiedział się właśnie poprzez plik &lt;span style="font-style: italic;"&gt;components.xml&lt;/span&gt;, ż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?! ;-)&lt;br /&gt;&lt;br /&gt;Dzisiaj na tapetę poszedł temat umiędzynarodowienia aplikacji seamowej (przypomina mi się temat &lt;a
      href="http://jlaskowski.blogspot.com/2008/05/umidzynarodowienie-w-apache-wicket.html"&gt;Umiędzynarodowienie w Apache Wicket&lt;/a&gt; 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 &lt;a href="http://jlaskowski.blogspot.com/2007/02/requiredmessage-i-resource-bundle.html"&gt;requiredMessage i resource-bundle - udoskonalona kontrola komunikatów w JSF
      1.2&lt;/a&gt;, &lt;a href="http://jlaskowski.blogspot.com/2006/01/uruchamiamy-pierwsz-aplikacj-w.html"&gt;Uruchamiamy pierwszą aplikację w technologii JavaServer Faces&lt;/a&gt;, &lt;a href="http://www.jaceklaskowski.pl/wiki/Tworzenie_aplikacji_z_JavaServer_Faces%2C_Apache_Maven_i_Apache_Geronimo"&gt;Tworzenie aplikacji z JavaServer Faces, Apache Maven i Apache Geronimo&lt;/a&gt; czy &lt;a
      href="http://www.jaceklaskowski.pl/wiki/JavaServer_Faces_i_Spring_Framework_w_parze_z_Apache_Maven_i_Apache_Geronimo"&gt;JavaServer Faces i Spring Framework w parze z Apache Maven i Apache Geronimo&lt;/a&gt;. Wszystkie dotykają tematu użycia &lt;span style="font-weight: bold;"&gt;message-bundle&lt;/span&gt; w &lt;span style="font-weight: bold;"&gt;faces-config.xml&lt;/span&gt;, kontrolki &lt;span style="font-weight: bold;"&gt;&amp;lt;f:loadBundle&gt;&lt;/span&gt; na stronie JSF, gdzie korzysta się z
      tłumaczeń oraz wskazanie na niego z danego pliku tłumaczeń - &lt;span style="font-weight: bold;"&gt;#{komunikaty['wprowadz_imie']}&lt;/span&gt;. Jest tego trochę do zapamiętania, co Seam zauważalnie skrócił.&lt;br /&gt;&lt;br /&gt;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ę &lt;span style="font-weight: bold;"&gt;messages&lt;/span&gt; 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ą &lt;span style="font-style: italic;"&gt;&amp;lt;f:loadBundle&gt;&lt;/span&gt;. Z Seamem wystarczy utworzyć pojedyńczy plik &lt;span style="font-weight: bold;"&gt;messages.properties&lt;/span&gt; dla wybranych języków i użyć
      konstrukcji &lt;span style="font-weight: bold;"&gt;#{messages['klucz']}&lt;/span&gt; w dowolnym miejscu strony JSF. Oczywiście istnieje możliwość zdefiniowania wielu plików tłumaczeń. "Gdzie?" - zapytasz. Oczywiście w opcjonalnym &lt;span style="font-weight: bold;"&gt;components.xml&lt;/span&gt;, który wraz z kilkoma innymi opcjonalnymi plikami xmlowymi przejął rolę obowiązkowego &lt;span style="font-style: italic;"&gt;faces-config.xml&lt;/span&gt; w JSF (podkreślam użycie słów &lt;span
      style="font-style: italic;"&gt;opcjonalny&lt;/span&gt; i &lt;span style="font-style: italic;"&gt;obowiązkowy&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Więcej informacji ze źródła o umiędzynarodowieniu aplikacji seamowych w dokumentacji Seama - &lt;a href="http://docs.jboss.com/seam/2.0.3.CR1/reference/en-US/html/i18n.html"&gt;Chapter 15. Internationalization, localization and themes&lt;/a&gt;, a w szczególności &lt;a
      href="http://docs.jboss.com/seam/2.0.3.CR1/reference/en-US/html/i18n.html#d0e9138"&gt;15.3.1. Defining labels&lt;/a&gt;. Podczas poznawania mechanizmu tłumaczeń w Seamie brakowało mi wiedzy, którą ostatecznie udało mi się znaleść na forum &lt;span style="font-weight: bold;"&gt;Seam Users&lt;/span&gt; w wątku &lt;a href="http://www.seamframework.org/Community/IncludingAResourceBundleNotCalledMessages"&gt;Including a resource bundle not called messages*&lt;/a&gt;.&lt;br /&gt;&lt;br
      /&gt;Umiędzynarodowienie mojej aplikacji seamowej, którą rozwijam od kilku dni, rozpocząłem od zmian w pliku &lt;span style="font-weight: bold;"&gt;components.xml&lt;/span&gt;, gdzie wskażę pliki tłumaczeń.&lt;pre&gt; &amp;lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;br /&gt; &amp;lt;components &lt;br /&gt; xmlns="http://jboss.com/products/seam/components"&lt;br /&gt; xmlns:core="http://jboss.com/products/seam/core"&lt;br /&gt; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;
      xsi:schemaLocation="http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.0.xsd&lt;br /&gt; http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.0.xsd"&gt;&lt;br /&gt; &amp;lt;core:init debug="true" /&gt;&lt;br /&gt; &amp;lt;core:resource-loader&gt;&lt;br /&gt; &amp;lt;core:bundle-names&gt;&lt;br /&gt; &amp;lt;value&gt;komunikaty&amp;lt;/value&gt;&lt;br /&gt; &amp;lt;value&gt;messages&amp;lt;/value&gt;&lt;br /&gt;
      &amp;lt;/core:bundle-names&gt;&lt;br /&gt; &amp;lt;/core:resource-loader&gt;&lt;br /&gt; &amp;lt;/components&gt;&lt;/pre&gt;Przypomnę, że jest to krok opcjonalny i domyślnie Seam poszukuje pliku &lt;span style="font-weight: bold;"&gt;messages.properties&lt;/span&gt; dla danego języka, np. &lt;span style="font-style: italic;"&gt;messages_pl.properties&lt;/span&gt; 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 &lt;span style="font-style: italic;"&gt;/WEB-INF/classes&lt;/span&gt;. W powyższej konfiguracji w components.xml dodałem również użycie pliku &lt;span style="font-style: italic;"&gt;komunikaty_pl.properties&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Opcjonalnie zdefiniowałem domyślny język aplikacji (polski) i inne wspierane języki (polski) w &lt;span style="font-style: italic;"&gt;faces-config.xml&lt;/span&gt;:&lt;pre&gt; &amp;lt;?xml version='1.0' encoding='UTF-8'?&gt;&lt;br /&gt;
      &amp;lt;faces-config version="1.2"&lt;br /&gt; xmlns="http://java.sun.com/xml/ns/javaee"&lt;br /&gt; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt; xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"&gt;&lt;br /&gt; &amp;lt;application&gt;&lt;br /&gt; &amp;lt;locale-config&gt;&lt;br /&gt; &amp;lt;default-locale&gt;pl&amp;lt;/default-locale&gt;&lt;br /&gt; &amp;lt;supported-locale&gt;pl&amp;lt;/supported-locale&gt;&lt;br
      /&gt; &amp;lt;/locale-config&gt;&lt;br /&gt; &amp;lt;view-handler&gt;com.sun.facelets.FaceletViewHandler&amp;lt;/view-handler&gt;&lt;br /&gt; &amp;lt;/application&gt;&lt;br /&gt; &amp;lt;/faces-config&gt;&lt;/pre&gt;W ten sposób zagwarantowałem, że jedynym słusznym językiem w aplikacji będzie polski. Wyboru nie ma.&lt;br /&gt;&lt;br /&gt;Zawartość pliku &lt;span style="font-weight: bold;"&gt;messages_pl.properties&lt;/span&gt;:&lt;pre&gt; kategoria.tytul=Administracja kategoriami&lt;/pre&gt;oraz
      &lt;span style="font-weight: bold;"&gt;komunikaty_pl.properties&lt;/span&gt;:&lt;pre&gt; kategoria.nazwa=Nazwa&lt;br /&gt; kategoria.opis=Opis&lt;/pre&gt;Oba pliki muszą znaleźć się na ścieżce klas, np. &lt;span style="font-style: italic;"&gt;/WEB-INF/classes&lt;/span&gt; w ramach archiwum war.&lt;br /&gt;&lt;br /&gt;Mając tak zdefiniowane pliki tłumaczeń zmodyfikowałem stronę &lt;span style="font-weight: bold;"&gt;kategoria.xhtml&lt;/span&gt;:&lt;pre&gt; &amp;lt;?xml version="1.0"
      encoding="utf-8"?&gt;&lt;br /&gt; &amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &lt;br /&gt; "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;&lt;br /&gt; &amp;lt;html xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.com/products/seam/taglib"&lt;br /&gt; xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"&gt;&lt;br /&gt; &amp;lt;head&gt;&lt;br /&gt; &amp;lt;title&gt;#{messages['kategoria.tytul']}&amp;lt;/title&gt;&lt;br /&gt;
      &amp;lt;/head&gt;&lt;br /&gt; &amp;lt;body&gt;&lt;br /&gt; &amp;lt;f:view&gt;&lt;br /&gt; &amp;lt;h:form&gt;&lt;br /&gt; &amp;lt;s:validateAll&gt;&lt;br /&gt; &amp;lt;h:panelGrid columns="2"&gt;&lt;br /&gt; #{messages['kategoria.nazwa']}: &amp;lt;h:inputText value="#{kategoria.nazwa}" required="true" /&gt;&lt;br /&gt; #{messages['kategoria.opis']}: &amp;lt;h:inputText value="#{kategoria.opis}" required="true" /&gt;&lt;br /&gt; &amp;lt;/h:panelGrid&gt;&lt;br /&gt; &amp;lt;/s:validateAll&gt;&lt;br
      /&gt; &amp;lt;h:messages /&gt;&lt;br /&gt; &amp;lt;h:commandButton value="Dodaj" action="#{kategoriaAgent.dodaj}" /&gt;&lt;br /&gt; &amp;lt;br /&gt;&lt;br /&gt; &amp;lt;h:outputText value="Brak kategorii" rendered="#{kategorie.rowCount==0}" /&gt;&lt;br /&gt; &amp;lt;h:dataTable var="ktgria" value="#{kategorie}" rendered="#{kategorie.rowCount&gt;0}"&gt;&lt;br /&gt; &amp;lt;h:column&gt;&lt;br /&gt; &amp;lt;f:facet name="header"&gt;&lt;br /&gt; &amp;lt;h:outputText value="Nazwa" /&gt;&lt;br /&gt;
      &amp;lt;/f:facet&gt;&lt;br /&gt; &amp;lt;h:commandLink value="#{ktgria.nazwa}" action="#{kategoriaAgent.wybierz}" /&gt;&lt;br /&gt; &amp;lt;/h:column&gt;&lt;br /&gt; &amp;lt;h:column&gt;&lt;br /&gt; &amp;lt;f:facet name="header"&gt;&lt;br /&gt; &amp;lt;h:outputText value="Opis" /&gt;&lt;br /&gt; &amp;lt;/f:facet&gt;&lt;br /&gt; &amp;lt;h:outputText value="#{ktgria.opis}" /&gt;&lt;br /&gt; &amp;lt;/h:column&gt;&lt;br /&gt; &amp;lt;h:column&gt;&lt;br /&gt; &amp;lt;h:commandButton value="Delete"
      action="#{kategoriaAgent.skasuj}" /&gt;&lt;br /&gt; &amp;lt;/h:column&gt;&lt;br /&gt; &amp;lt;/h:dataTable&gt;&lt;br /&gt; &amp;lt;h3&gt;&amp;lt;h:outputText value="#{kategoriaWybrana.nazwa}" /&gt;&amp;lt;/h3&gt;&lt;br /&gt; &amp;lt;div&gt;&amp;lt;h:outputText value="#{kategoriaWybrana.opis}" /&gt;&amp;lt;/div&gt;&lt;br /&gt; &amp;lt;/h:form&gt;&lt;br /&gt; &amp;lt;/f:view&gt;&lt;br /&gt; &amp;lt;/body&gt;&lt;br /&gt; &amp;lt;/html&gt;&lt;/pre&gt;Na uwagę zasługuje użycie &lt;span style="font-style:
      italic;"&gt;#{messages['kategoria.tytul']}&lt;/span&gt; w tytule poza sekcją &lt;span style="font-style: italic;"&gt;&amp;lt;f:view&gt;&lt;/span&gt; oraz &lt;span style="font-style: italic;"&gt;#{messages['kategoria.nazwa']}&lt;/span&gt; i &lt;span style="font-style: italic;"&gt;#{messages['kategoria.opis']}&lt;/span&gt; w &lt;span style="font-style: italic;"&gt;&amp;lt;h:panelGrid&gt;&lt;/span&gt;. Przypomnę, że wszystkie komunikaty trafiają do jednej zbiorczej mapy - &lt;span style="font-style:
      italic;"&gt;messages&lt;/span&gt;, więc należy zagwarantować unikalność zawartych w niej kluczy tłumaczeń, np. poprzedzając nazwą strony, w której się znajdują.&lt;br /&gt;&lt;br /&gt;Uruchomienie strony &lt;span style="font-style: italic;"&gt;kategoria.xhtml&lt;/span&gt;, to jak można się domyśleć pojawienie się napisów z plików tłumaczeń. Proste, nieprawdaż?&lt;br /&gt;&lt;br /&gt;Na zakończenie kilka słów spoza obszaru Seama. Właśnie pojawiło się zaproszenie do &lt;a
      href="http://qa.netbeans.org/processes/cat/65/index.html"&gt;NetBeans IDE 6.5 Community Acceptance Testing program (NetCAT)&lt;/a&gt;. 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 &lt;a href="http://www-306.ibm.com/software/webservers/appserv/was/"&gt;IBM WebSphere Application Server 6.1&lt;/a&gt; oraz &lt;a href="http://geronimo.apache.org"&gt;Apache Geronimo&lt;/a&gt;. 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.&lt;br /&gt;&lt;br /&gt;Kilka dni temu &lt;span style="font-weight: bold;"&gt;Michał B&lt;/span&gt;. podjął się tematu wyjaśnienia odmiany słowa &lt;span style="font-weight: bold;"&gt;Java&lt;/span&gt; i jego pisowni w komentarzu do &lt;a href="http://jlaskowski.blogspot.com/2008/01/w-sprawie-recenzja-ksiki-hibernate-od.html"&gt;W sprawie Recenzja książki "Hibernate. Od Nowicjusza do Profesjonalisty"&lt;/a&gt;. Odpowiedź od jego znajomego filologa trochę mnie
      zaskoczyła:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"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.&lt;br /&gt;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:)) "&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Zaskoczeni podobnie jak ja? Jestem zdania,
      że można odmieniać słowo Java w dowolnym zestawieniu, czyli &lt;span style="font-style: italic;"&gt;o javie&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;z javą&lt;/span&gt; i &lt;span style="font-style: italic;"&gt;bez javy&lt;/span&gt; (chociaż to ostatnie nie przechodzi mi jakoś przez gardło ;-))&lt;br /&gt;&lt;br /&gt;I na koniec informacja o dedykowanej grupie &lt;a href="http://groups.google.pl/group/oferty-pracy-java/"&gt;oferty-pracy-java&lt;/a&gt;, 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!&lt;br /&gt;&lt;br /&gt;Pytanie konkursowe: &lt;span style="font-weight: bold;"&gt;Jak nazywa się mapa tłumaczeń w
      Seamie?&lt;/span&gt; I takie bardzo zaawansowane: &lt;span style="font-weight: bold;"&gt;W jaki sposób (gdzie i jak) definiuje się wiele plików tłumaczeń w Seamie?&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-806665980550387140?l=jlaskowski.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 02 Jul 2008 22:46:33 +0000</pubDate>
    </item>
    <item>
      <title>Marek Kliś - różności okołojavowe i nie tylko: Mechanizm aktualizacji w NetBeans Platform</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-62160705063034256.post-7564724126942641737</guid>
      <link>http://marekklis.blogspot.com/2008/05/mechanizm-aktualizacji-w-netbeans.html</link>
      <description>Przyjrzyjmy się dzisiaj w jaki sposób możemy wykorzystać &lt;span style="font-style: italic;"&gt;Auto Update Service&lt;/span&gt; do rozprowadzania aktualizacji modułów w aplikacji opartej o &lt;a href="http://platform.netbeans.org"&gt;platformę NetBeans&lt;/a&gt;.&lt;br /&gt;W tym celu załóżmy nowy projekt typu &lt;span style="font-style: italic;"&gt;NetBeans Platform Application&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://3.bp.blogspot.com/_dqSd_vS7ivk/SDHT6AYXRjI/AAAAAAAAAM4/KA_GUcaWgvA/s1600-h/update01.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_dqSd_vS7ivk/SDHT6AYXRjI/AAAAAAAAAM4/KA_GUcaWgvA/s320/update01.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5202172038077695538" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;oraz projekt modułu o nazwie np &lt;span style="font-style:
      italic;"&gt;UpdateModule&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SDHUNgYXRkI/AAAAAAAAANA/FnFGZMXA_3Y/s1600-h/update03.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SDHUNgYXRkI/AAAAAAAAANA/FnFGZMXA_3Y/s320/update03.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5202172373085144642" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Po założeniu modułu okno
      projektów wygląda u mnie następująco:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dqSd_vS7ivk/SDHUlwYXRlI/AAAAAAAAANg/nePdH0vF7Gk/s1600-h/update06.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_dqSd_vS7ivk/SDHUlwYXRlI/AAAAAAAAANg/nePdH0vF7Gk/s320/update06.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5202172789696972370" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_dqSd_vS7ivk/SDHXkAYXRmI/AAAAAAAAANo/4_GP0e2NM34/s1600-h/update07.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_dqSd_vS7ivk/SDHXkAYXRmI/AAAAAAAAANo/4_GP0e2NM34/s320/update07.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center;
      cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5202176058167084642" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SDHX2gYXRnI/AAAAAAAAANw/EN94DfPvb08/s1600-h/update10.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SDHX2gYXRnI/AAAAAAAAANw/EN94DfPvb08/s320/update10.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5202176375994664562"
      /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Następnym krokiem jest dodanie do naszego modułu pliku typu &lt;span style="font-style: italic;"&gt;Update Center&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SDHYMgYXRoI/AAAAAAAAAN4/vCoegtaoGYs/s1600-h/update11.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SDHYMgYXRoI/AAAAAAAAAN4/vCoegtaoGYs/s320/update11.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor:
      hand;" border="0" id="BLOGGER_PHOTO_ID_5202176753951786626" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_dqSd_vS7ivk/SDHYbAYXRpI/AAAAAAAAAOA/0dM6XO5HiU8/s1600-h/update12.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_dqSd_vS7ivk/SDHYbAYXRpI/AAAAAAAAAOA/0dM6XO5HiU8/s320/update12.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5202177003059889810" /&gt;&lt;/a&gt;&lt;br
      /&gt;&lt;br /&gt;W tym przykładzie jako serwer przechowujący uaktualnienia wybrałem &lt;span style="font-style: italic;"&gt;localhost&lt;/span&gt;. Dokładny adres serwera z aktualizacjami (a konkretnie do pliku updates.xml opisującego aktualne moduły) znajduje się w pliku &lt;span style="font-style: italic;"&gt;Bundle.properties&lt;/span&gt; w pakiecie, do którego dodaliśmy &lt;span style="font-style: italic;"&gt;Update Center&lt;/span&gt;.&lt;br /&gt;Ponieważ szablon projektu &lt;span
      style="font-style: italic;"&gt;NetBeans Platform Application&lt;/span&gt; nie posiada zaznaczonych bibliotek &lt;span style="font-style: italic;"&gt;Auto Update&lt;/span&gt; musimy to zrobić ręcznie.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_dqSd_vS7ivk/SDHbQAYXRqI/AAAAAAAAAOI/I3x_5eiYmc4/s1600-h/update13.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_dqSd_vS7ivk/SDHbQAYXRqI/AAAAAAAAAOI/I3x_5eiYmc4/s320/update13.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align:
      center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5202180112616212130" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Teraz możemy już opublikować naszą "aplikację" (&lt;span style="font-style: italic;"&gt;Build ZIP Distibution&lt;/span&gt;). Rozpakujmy gdzieś archiwum i uruchommy aplikację. W menu &lt;span style="font-style: italic;"&gt;Help&lt;/span&gt; powinna być pozycja &lt;span style="font-style: italic;"&gt;Check for updates&lt;/span&gt;. Po wybraniu dostaniemy komunikat, że
      nasza aplikacja jest aktualna.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SDHcFgYXRrI/AAAAAAAAAOQ/DQB5S7FJRNI/s1600-h/update15.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SDHcFgYXRrI/AAAAAAAAAOQ/DQB5S7FJRNI/s320/update15.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5202181031739213490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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 &lt;span style="font-style: italic;"&gt;Specification version&lt;/span&gt; na wyższy numer.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_dqSd_vS7ivk/SDHcjQYXRsI/AAAAAAAAAOY/yo9dSU6SSzc/s1600-h/update17.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_dqSd_vS7ivk/SDHcjQYXRsI/AAAAAAAAAOY/yo9dSU6SSzc/s320/update17.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center;
      cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5202181542840321730" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Budujemy moduły poprzez &lt;span style="font-style: italic;"&gt;Create NBMs&lt;/span&gt;. Moduły (w naszym przypadku będzie to tylko jeden moduł) zostaną utworzone w podkatalogu projektu (&lt;span style="font-style: italic;"&gt;build/updates&lt;/span&gt;). Wystarczy zawartość tego katalogu przekopiować do katalogu, który jest głównym katalogiem naszego serwera www. Ja
      wykorzystałem serwer Apache.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SDHd7gYXRtI/AAAAAAAAAOg/75hH2Q0wbVk/s1600-h/update19.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SDHd7gYXRtI/AAAAAAAAAOg/75hH2Q0wbVk/s320/update19.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5202183058963777234" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_dqSd_vS7ivk/SDHerQYXRuI/AAAAAAAAAOo/zV74fSkVTic/s1600-h/update20.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_dqSd_vS7ivk/SDHerQYXRuI/AAAAAAAAAOo/zV74fSkVTic/s320/update20.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;"
      border="0" id="BLOGGER_PHOTO_ID_5202183879302530786" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Po zakończeniu procesu aktualizacji mamy już świeżą wersję aplikacji.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_dqSd_vS7ivk/SDHfsQYXRvI/AAAAAAAAAOw/Mws_qL3QGz0/s1600-h/update24.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_dqSd_vS7ivk/SDHfsQYXRvI/AAAAAAAAAOw/Mws_qL3QGz0/s320/update24.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor:
      hand;" border="0" id="BLOGGER_PHOTO_ID_5202184995994027762" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/62160705063034256-7564724126942641737?l=marekklis.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 19 May 2008 20:21:09 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Tworzenie aplikacji desktopowej z Java Desktop Application w NetBeans IDE 6.1 - część 2</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-1833590800358145693</guid>
      <link>http://jlaskowski.blogspot.com/2008/05/tworzenie-aplikacji-desktopowej-z-java_18.html</link>
      <description>W poprzednim artykule &lt;a href="http://www.jaceklaskowski.pl/w/index.php?title=Tworzenie_aplikacji_desktopowej_z_Java_Desktop_Application_w_NetBeans_IDE_6.1"&gt;Tworzenie aplikacji desktopowej z Java Desktop Application w NetBeans IDE 6.1&lt;/a&gt; przedstawiłem procedurę tworzenia aplikacji desktopowej "podpierając się" asystentem &lt;span style="font-weight: bold;"&gt;Java Desktop Application&lt;/span&gt; dostępnym w &lt;span style="font-weight: bold;"&gt;NetBeans IDE
      6.1&lt;/span&gt; oraz &lt;span style="font-weight: bold;"&gt;Java Persistence API (JPA)&lt;/span&gt; jako mechanizmem tworzenia odpowiednich struktur bazodanowych automatycznie. Głównym mankamentem aplikacji był brak korzystania z modelu z projektu &lt;span style="font-weight: bold;"&gt;przychodnia-model&lt;/span&gt;, gdzie pewne wartości były generowane automatycznie, a samo mapowanie encji odbywało się poprzez wydzielony plik mapowania &lt;span style="font-weight:
      bold;"&gt;META-INF/orm.xml&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;W artykule &lt;a href="http://www.jaceklaskowski.pl/wiki/Tworzenie_aplikacji_desktopowej_z_Java_Desktop_Application_w_NetBeans_IDE_6.1_-_cz%C4%99%C5%9B%C4%87_2"&gt;Tworzenie aplikacji desktopowej z Java Desktop Application w NetBeans IDE 6.1 - część 2&lt;/a&gt; przedstawiłem kolejne etapy udoskonalania aplikacji o wykorzystanie własnego modelu z projektu &lt;span style="font-weight: bold;"&gt;przychodnia-model&lt;/span&gt; z konfiguracją
      JPA z projektu &lt;span style="font-weight: bold;"&gt;przychodnia-generatortabel&lt;/span&gt;. Dużo dobrej zabawy w wykonaniu NetBeans IDE 6.1 i projektem Java Desktop Application.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;p.s. Nadchodząca konferencja &lt;a href="http://www.javarsovia.pl"&gt;JAVArsovia 2008&lt;/a&gt; 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!&lt;div class="blogger-post-footer"&gt;&lt;img
      src="https://blogger.googleusercontent.com/tracker/20941681-1833590800358145693?l=jlaskowski.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Sun, 18 May 2008 19:35:00 +0000</pubDate>
    </item>
    <item>
      <title>Marek Kliś - różności okołojavowe i nie tylko: Materiały z prelekcji</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-62160705063034256.post-4400555598633073883</guid>
      <link>http://marekklis.blogspot.com/2008/05/materiay-z-prelekcji.html</link>
      <description>Jeśli ktoś jest zainteresowany, to materiały z mojej prelekcji nt NetBeans Platform są dostępne na stronie &lt;a href="http://www.java.pl/?page_id=10"&gt;PJUGu&lt;/a&gt;. Na stronie tej znajdują się również materiały z poprzednich spotkań.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/62160705063034256-4400555598633073883?l=marekklis.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Sun, 18 May 2008 17:31:45 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Tworzenie aplikacji desktopowej z Java Desktop Application w NetBeans IDE 6.1</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-2070756130676672814</guid>
      <link>http://jlaskowski.blogspot.com/2008/05/tworzenie-aplikacji-desktopowej-z-java.html</link>
      <description>W środę żona zrobiła mi niesamowitą niespodziankę! Bodajże na miesiąc przed spytała jedynie, czy mam czas w środę o 19:00 i tyle. Jakbym mógł odmówić mojej Agatce?! Oczywiście wszystkie możliwe inicjatywy przeniosłem zaraz na bezpieczniejszy czwartek i cierpliwie czekałem. W końcu okazało się, że owa niespodzianka to wyjście do &lt;a href="http://www.teatrbajka.pl"&gt;Teatru Bajka&lt;/a&gt; na przedstawienie &lt;a href="http://teatrbajka.pl/repertuar/golo_i_wesolo"&gt;Goło i
      wesoło&lt;/a&gt;. Jeju, ale to było przedstawienie! Prawie umarłem ze śmiechu. Płacz murowany! Do tej pory kiedykolwiek przypomnę ją sobie, nie mogę powstrzymać się ze śmiechu. To jest obowiązkowy spektakl, dla każdego lubującego się w dobrze dobranym humorze z doborową obsadą aktorską. Po prostu cudeńko. Nie będę rozpisywał się na temat sztuki, bo szkoda byłoby uchylić chociażby rąbek tajemnicy na temat sztuki. Wystarczy, że napiszę, że jestem gotów iść na nią kolejny raz. Normalnie Góra, Żmuda,
      Bugi, Gustaw (szczególnie w drugiej części), Norbert i Kierownik to mistrzostwo świata w dobrym humorze. Ubaw po pachy! Dzięki Agata za wspaniały wybór!&lt;br /&gt;&lt;br /&gt;A wracając do Javy to ostatnio natrafiłem na ciekawe zadanie, które dotyczyło stworzenia aplikacji desktopowej korzystającej z bazy danych. Czasu na jej utworzenie nie było wiele i wskazano na &lt;span style="font-weight: bold;"&gt;NetBeans IDE 6.1&lt;/span&gt; jako narzędzie, które w ciekawy sposób upraszcza jej tworzenie za
      pomocą projektu &lt;span style="font-weight: bold;"&gt;Java Desktop Application&lt;/span&gt;. Podczas rozpoznawania funkcjonalności NetBeans natrafiłem na ciekawy wycinek specyfikacji Java Persistence API (JPA), gdzie mapowanie relacji jeden-do-wielu (adnotacja @OneToMany lub element &amp;lt;one-to-many&gt;) można sprowadzić do konfiguracji opartej o 2 tabele z pojedyńczym kluczem obcym (z domyślnie wykorzystywanych 3 tabel z dwoma kluczami obcymi w tabeli łączącej). Użyteczna funkcjonalność NetBeans
      IDE 6.1 i ciekawostka JPA to równie ciekawie spędzony czas, co zaowocowało nowym artykułem &lt;a href="http://www.jaceklaskowski.pl/wiki/Tworzenie_aplikacji_desktopowej_z_Java_Desktop_Application_w_NetBeans_IDE_6.1"&gt;Tworzenie aplikacji desktopowej z Java Desktop Application w NetBeans IDE 6.1&lt;/a&gt;. Zapraszam do lektury, a znudzonych siedzeniem przed kompem na spektakl &lt;span style="font-weight: bold;"&gt;Goło i wesoło&lt;/span&gt;. Koniecznie napisz, jak podobał się spektakl. Dla mnie był
      najwyższych lotów.&lt;br /&gt;&lt;br /&gt;p.s. Kilka godzin temu przejeżdżałem koło podwrocławskiej wioski &lt;span style="font-weight: bold;"&gt;Jugowiec&lt;/span&gt; (a może to było miasto?). Jakby na przypomnienie, że niedługo &lt;a href="http://www.javarsovia.pl"&gt;JAVArsovia 2008&lt;/a&gt; (dokładnie za 2 tygodnie - &lt;span style="font-weight: bold;"&gt;31 maja 2008&lt;/span&gt;), gdzie jugowiczów będzie co nie miara. Ciekawe, czy będzie ktoś z podwrocławskiego Jugowca? Zapraszam! Wstęp
      wolny.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-2070756130676672814?l=jlaskowski.blogspot.com" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 16 May 2008 19:19:24 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: NetBeans Blogging Contest: Winner!</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-6886298508724311643</guid>
      <link>http://jlaskowski.blogspot.com/2008/05/netbeans-blogging-contest-winner.html</link>
      <description>Dzisiaj zostałem nagrodzony dwukrotnie. Najpierw wystąpiłem na spotkaniu &lt;a href="http://www.warszawa.jug.pl/"&gt;Warszawa JUG&lt;/a&gt; z prezentacją o &lt;span style="font-weight: bold;"&gt;Apache Wicket&lt;/span&gt;, gdzie padło tyle pytań i pojawiło się tyle wyjątków, że w ostatnim miesiącu nie zdobyłem tyle wiedzy, co właśnie podczas 31. spotkania! Przygotowuję się z tematem o &lt;span style="font-weight: bold;"&gt;Apache Wicket i OSGi&lt;/span&gt; na nadchodzącą konferencję
      &lt;a href="http://www.javarsovia.pl/"&gt;JAVArsovia 2008&lt;/a&gt;, która jest organizowana przez grupę Warszawa JUG w dniu &lt;span style="font-weight: bold;"&gt;31 maja 2008&lt;/span&gt; w Warszawie i nie ukrywałem, że możliwość wystąpienia z Wicketem na 2 tygodnie przed konferencją jest dla mnie próbą generalną mojego przygotowania oraz zebrania dodatkowych wskazówek o potencjalnych obszarach, które należy uzupełnić, omówić, itp. Wierzę, że znalazły się osoby na spotkaniu, którym Wicket przypadł
      do gustu, a niewielka liczba przykładów gwarantuje, że jeszcze ciekawiej przed nimi. Z przyjemnością zebrałbym garść uwag odnośnie mojego wystąpienia i co powinienem dopracować, aby moje wystąpienie na JAVArsovia 2008 otrzymało miano najciekawiej prowadzonej (świadomie nie napisałem najciekawszej, gdyż temat jednego może zainteresować, a drugiego skłonić do odespania ostatniej niedospanej nocy - pozdrowienia dla dzisiejszych śpiochów! ;-))&lt;br /&gt;&lt;br /&gt;Na chwilę przed wystąpieniem miałem
      możliwość zajrzeć do następującej wiadomości zatytułowanej &lt;span style="font-weight: bold;"&gt;NetBeans Blogging Contest: Winner!&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Jacek:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Congratulations! Your blog entry on NetBeans 6.1 was selected by our panel of judges as a winner of our NetBeans Blogging Contest. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:
      italic;"&gt;[...]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Your blog entry will be promoted on the NetBeans Blogging Contest homepage.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Zamarłem! Nie żebym nie liczył na wygraną, bo w końcu uczestniczyłem w konkursie i udało mi się znaleźć czas na ewaluację kilku funkcjonalności właśnie, aby ostatecznie zostać wyróżnionym, ale kiedy już zostałem nagrodzony, to o tym wszystkim się zapomina, a nawet jest się zaskoczonym. Na stronie &lt;a
      href="http://www.netbeans.org/competition/blog-contest.html"&gt;NetBeans IDE 6.1 Blogging Contest&lt;/a&gt; można znaleźć szczegóły konkursu i jego nagrodzonych, wśród których jestem i ja z tematem o &lt;a href="http://jlaskowski.blogspot.com/2008/04/nowoci-netbeans-ide-61-spring-framework.html"&gt;wsparciu Spring Framework przez NetBeans IDE 6.1&lt;/a&gt;. Tym samym chciałbym podziękować jury, a w szczególności stałej czytelniczce i członkini jury - &lt;span style="font-weight: bold;"&gt;Magdalenie
      Gołdyn&lt;/span&gt;. Dziękuję Magda za cierpliwość i wskazanie!&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20941681-6886298508724311643?l=jlaskowski.blogspot.com" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Tue, 13 May 2008 21:06:40 +0000</pubDate>
    </item>
    <item>
      <title>Marek Kliś - różności okołojavowe i nie tylko: PJUG - prelekcja nt. NetBeans Platform</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-62160705063034256.post-7725727315439789700</guid>
      <link>http://marekklis.blogspot.com/2008/05/pjug-prelekcja-nt-netbeans-platform.html</link>
      <description>W najbliższy czwartek (15 maja 2008) o godzinie 19:00 będę miał zaszczyt poprowadzić prelekcję na temat &lt;a href="http://platform.netbeans.org"&gt;platformy NetBeans&lt;/a&gt; w ramach czwartkowych spotkań &lt;a href="http://www.java.pl"&gt;PJUGu&lt;/a&gt;.&lt;br /&gt;Podczas prelekcji powstanie od podstaw prosta aplikacja, która będzie mogła działać samodzielnie bądź jako rozszerzenie NetBeans IDE.&lt;br /&gt;Jeśli czas i słuchacze pozwolą ;) to postaram się zaprezentować także
      bibliotekę &lt;a href="http://graph.netbeans.org"&gt;Visual Library&lt;/a&gt;, która jest częścią platformy.&lt;br /&gt;Istnieje możliwość wcześniejszej &lt;a href="http://www.jugevents.org/jugevents/event/show.html?id=3779"&gt;rejestracji&lt;/a&gt; na to spotkanie.&lt;br /&gt;&lt;br /&gt;Serdecznie zapraszam.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/62160705063034256-7725727315439789700?l=marekklis.blogspot.com" alt="" height="1" width="1"
      /&gt;&lt;/div&gt;</description>
      <pubDate>Sun, 11 May 2008 16:05:04 +0000</pubDate>
    </item>
    <item>
      <title>Marek Kliś - różności okołojavowe i nie tylko: NetBeans 6.1 oficjalnie już jest</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-62160705063034256.post-4096532494778116771</guid>
      <link>http://marekklis.blogspot.com/2008/04/netbeans-61-oficjalnie-ju-jest.html</link>
      <description>Dzisiaj ukazała się nowa, świeża wersja środowiska &lt;a href="http://www.netbeans.org"&gt;NetBeans&lt;/a&gt; oznaczona numerkiem 6.1.&lt;br /&gt;&lt;br /&gt;Jeśli chodzi o platformę to nowością (to chyba zbyt szumne słowo) jest nowy szablon projektu &lt;span style="font-style: italic;"&gt;NetBeans Platform Application&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SBYP9bd_ZpI/AAAAAAAAAMQ/E3ikxRz9CJ0/s1600-h/NetBeansPlatformApplication.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SBYP9bd_ZpI/AAAAAAAAAMQ/E3ikxRz9CJ0/s320/NetBeansPlatformApplication.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5194356768238429842" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Szablon ten posiada już zaznaczone najpopularniejsze moduły
      wykorzystywane przy tworzeniu typowej aplikacji opartej o platformę.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dqSd_vS7ivk/SBYQerd_ZqI/AAAAAAAAAMY/15wlYfRTl10/s1600-h/libraries.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_dqSd_vS7ivk/SBYQerd_ZqI/AAAAAAAAAMY/15wlYfRTl10/s320/libraries.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5194357339469080226" /&gt;&lt;/a&gt;&lt;div
      class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/62160705063034256-4096532494778116771?l=marekklis.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 28 Apr 2008 18:04:54 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Nowości NetBeans 6.1 - Hibernate Framework Support w cięciu kosztów dostępu do danych relacyjnych</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-7808959085662437252</guid>
      <link>http://jlaskowski.blogspot.com/2008/04/nowoci-netbeans-61-hibernate-framework.html</link>
      <description>Otrzymałem prośbę o sprawdzenie artykułu, który napisałem jeszcze w &lt;span style="font-weight: bold;"&gt;2006&lt;/span&gt; roku o Hibernate - &lt;a href="http://jlaskowski.blogspot.com/2006/02/hibernate-tniemy-koszty-dostpu-do.html"&gt;Hibernate - tniemy koszty dostępu do danych relacyjnych&lt;/a&gt;. Hibernate i jego wsparcie w NetBeans 6.1 było jedną z rzeczy, które niedawno postanowiłem sprawdzić, więc w czasach pieczenia wielu pieczeni na jednym ogniu tym razem nie będzie inaczej -
      sprawdzę aktualność artykułu i wsparcie NetBeans dla Hibernate.&lt;br /&gt;&lt;br /&gt;Krótka lektura dokumentu &lt;a href="http://wiki.netbeans.org/NB61NewAndNoteWorthy"&gt;NetBeans 6.1 Milestones New and Noteworthy&lt;/a&gt; i można zabrać się do pracy.&lt;br /&gt;&lt;br /&gt;Instaluję wtyczkę NetBeans dla Hibernate - &lt;span style="font-weight: bold;"&gt;Tools &gt; Plugins&lt;/span&gt;, zaznaczam &lt;span style="font-weight: bold;"&gt;Hibernate Support&lt;/span&gt; oraz &lt;span
      style="font-weight: bold;"&gt;Hibernate 3.2.5 Library&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SApAO7R89EI/AAAAAAAAA0Y/I-jS6mW8nd8/s1600-h/plugins.gif"&gt;&lt;img src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SApAO7R89EI/AAAAAAAAA0Y/I-jS6mW8nd8/s320/plugins.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5191032145673253954" /&gt;&lt;/a&gt;&lt;br /&gt;i &lt;span
      style="font-weight: bold;"&gt;Install&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl+Shift+N&lt;/span&gt; i z kategorii &lt;span style="font-weight: bold;"&gt;Java&lt;/span&gt; wybieram &lt;span style="font-weight: bold;"&gt;Java Application&lt;/span&gt;. &lt;span style="font-weight: bold;"&gt;Next &gt;&lt;/span&gt;. Definiuję szczegóły aplikacji&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://2.bp.blogspot.com/_wSeV_DMR2uA/SApAjbR89GI/AAAAAAAAA0o/Z-SF9XI7KTM/s1600-h/new-java-application.gif"&gt;&lt;img src="http://2.bp.blogspot.com/_wSeV_DMR2uA/SApAjbR89GI/AAAAAAAAA0o/Z-SF9XI7KTM/s320/new-java-application.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5191032497860572258" /&gt;&lt;/a&gt;&lt;br /&gt;Tworzę klasę encji &lt;span style="font-weight: bold;"&gt;User&lt;/span&gt;. &lt;span
      style="font-weight: bold;"&gt;Ctrl+N&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Java &gt; Java Class&lt;/span&gt;. W edytorze klasy User wciskam &lt;span style="font-weight: bold;"&gt;Alt+Insert&lt;/span&gt; i wybieram &lt;span style="font-weight: bold;"&gt;Add Property...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SApAwLR89HI/AAAAAAAAA0w/CEA_EjHfcG0/s1600-h/add-property.gif"&gt;&lt;img
      src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SApAwLR89HI/AAAAAAAAA0w/CEA_EjHfcG0/s320/add-property.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5191032716903904370" /&gt;&lt;/a&gt;&lt;br /&gt;i definiuję atrybuty &lt;span style="font-weight: bold;"&gt;id&lt;/span&gt;, a następnie &lt;span style="font-weight: bold;"&gt;imie&lt;/span&gt; i &lt;span style="font-weight: bold;"&gt;nazwisko&lt;/span&gt;.&lt;br
      /&gt;&lt;br /&gt;Klasa prezentuje się następująco:&lt;pre&gt; package pl.jaceklaskowski.hibernate;&lt;br /&gt;&lt;br /&gt; public class User {&lt;br /&gt;&lt;br /&gt; private int id;&lt;br /&gt; private String imie;&lt;br /&gt; private String nazwisko;&lt;br /&gt;&lt;br /&gt; public int getId() {&lt;br /&gt; return id;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void setId(int id) {&lt;br /&gt; this.id = id;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public String getImie() {&lt;br /&gt; return
      imie;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void setImie(String imie) {&lt;br /&gt; this.imie = imie;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public String getNazwisko() {&lt;br /&gt; return nazwisko;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void setNazwisko(String nazwisko) {&lt;br /&gt; this.nazwisko = nazwisko;&lt;br /&gt; }&lt;br /&gt; }&lt;/pre&gt;Dodaję bibliotekę &lt;span style="font-weight: bold;"&gt;Hibernate 3.2.5&lt;/span&gt; do projektu. Wybieram &lt;span style="font-weight:
      bold;"&gt;Properties&lt;/span&gt; projektu i przechodzę do &lt;span style="font-weight: bold;"&gt;Libraries&lt;/span&gt;, gdzie korzystam z &lt;span style="font-weight: bold;"&gt;Add Library...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SApA97R89II/AAAAAAAAA04/oVaISXoufpg/s1600-h/add-library.gif"&gt;&lt;img src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SApA97R89II/AAAAAAAAA04/oVaISXoufpg/s320/add-library.gif" alt="" style="display: block; margin: 0px auto 10px;
      text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5191032953127105666" /&gt;&lt;/a&gt;&lt;br /&gt;zatwierdzam wybór przyciskiem &lt;span style="font-weight: bold;"&gt;Add Library&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_wSeV_DMR2uA/SApBIbR89JI/AAAAAAAAA1A/GMAvFou02f8/s1600-h/project-properties.gif"&gt;&lt;img src="http://2.bp.blogspot.com/_wSeV_DMR2uA/SApBIbR89JI/AAAAAAAAA1A/GMAvFou02f8/s320/project-properties.gif" alt=""
      style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5191033133515732114" /&gt;&lt;/a&gt;&lt;br /&gt;i &lt;span style="font-weight: bold;"&gt;OK&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Przechodzę do klasy HibernateExample i kopiuję zawartość klasy z artykułu. &lt;span style="font-weight: bold;"&gt;Ctrl+Shift+I&lt;/span&gt;, aby uzupełnić pakiety klas Hibernate (uwaga na klasę &lt;span style="font-weight:
      bold;"&gt;Configuration&lt;/span&gt;, która powinna być &lt;span style="font-weight: bold;"&gt;org.hibernate.cfg.Configuration&lt;/span&gt; oraz &lt;span style="font-weight: bold;"&gt;Transaction&lt;/span&gt; z pakietu &lt;span style="font-weight: bold;"&gt;org.hibernate&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Ostatecznie klasa wygląda następująco:&lt;pre&gt; package pl.jaceklaskowski.hibernate;&lt;br /&gt;&lt;br /&gt; import java.util.Iterator;&lt;br /&gt; import java.util.List;&lt;br /&gt; import
      org.hibernate.Criteria;&lt;br /&gt; import org.hibernate.Session;&lt;br /&gt; import org.hibernate.SessionFactory;&lt;br /&gt; import org.hibernate.Transaction;&lt;br /&gt; import org.hibernate.cfg.Configuration;&lt;br /&gt;&lt;br /&gt; public class HibernateExample {&lt;br /&gt;&lt;br /&gt; private final static SessionFactory factory;&lt;br /&gt; &lt;br /&gt; static {&lt;br /&gt; // 1. Inicjalizacja Hibernate&lt;br /&gt; Configuration cfg = new Configuration().configure();&lt;br /&gt;&lt;br /&gt; //
      2. Utworzenie fabryki sesji Hibernate&lt;br /&gt; factory = cfg.buildSessionFactory();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public static void main(String[] args) {&lt;br /&gt; HibernateExample m = new HibernateExample();&lt;br /&gt; m.createUsers();&lt;br /&gt; m.displayUsers();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void createUsers() {&lt;br /&gt; // 3. Otwarcie sesji Hibernate&lt;br /&gt; Session session = factory.openSession();&lt;br /&gt;&lt;br /&gt; // 4. Rozpoczęcie transakcji&lt;br
      /&gt; Transaction tx = session.beginTransaction();&lt;br /&gt;&lt;br /&gt; // 5. Utworzenie użytkownika&lt;br /&gt; User u = new User();&lt;br /&gt; u.setImie("Jacek");&lt;br /&gt; u.setNazwisko("Laskowski");&lt;br /&gt;&lt;br /&gt; // 6. Zapisanie użytkownika w bazie danych&lt;br /&gt; session.save(u);&lt;br /&gt;&lt;br /&gt; // 7. Zatwierdzenie transakcji&lt;br /&gt; tx.commit();&lt;br /&gt;&lt;br /&gt; // 8. Zamknięcie sesji Hibernate&lt;br /&gt; session.close();&lt;br /&gt; }&lt;br /&gt;&lt;br
      /&gt; public void displayUsers() {&lt;br /&gt; // 3. Otwarcie sesji Hibernate&lt;br /&gt; Session session = factory.openSession();&lt;br /&gt;&lt;br /&gt; // 4. Rozpoczęcie transakcji&lt;br /&gt; Transaction tx = session.beginTransaction();&lt;br /&gt;&lt;br /&gt; // 5. Utworzenie zapytania SQL do bazy o listę użytkowników&lt;br /&gt; Criteria criteria = session.createCriteria(User.class);&lt;br /&gt;&lt;br /&gt; // 6. Wykonanie zapytania SQL&lt;br /&gt; List users = criteria.list();&lt;br
      /&gt;&lt;br /&gt; // 7. Iterowanie po wyniku zapytania SQL&lt;br /&gt; for (Iterator it = users.iterator(); it.hasNext();) {&lt;br /&gt; User user = (User) it.next();&lt;br /&gt; System.out.println(user);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; // 8. Zatwierdzenie transakcji&lt;br /&gt; tx.commit();&lt;br /&gt;&lt;br /&gt; // 9. Zamknięcie sesji Hibernate&lt;br /&gt; session.close();&lt;br /&gt; }&lt;br /&gt; }&lt;/pre&gt;Tworzę plik &lt;span style="font-weight: bold;"&gt;hibernate.cfg.xml&lt;/span&gt;
      - &lt;span style="font-weight: bold;"&gt;Ctrl+N, XML &gt; XML Document&lt;/span&gt;. Nadaję mu nazwę &lt;span style="font-weight: bold;"&gt;hibernate.cfg&lt;/span&gt; (rozszerzenie &lt;span style="font-weight: bold;"&gt;xml&lt;/span&gt; dodawane jest automatycznie) i umieszczam w katalogu &lt;span style="font-weight: bold;"&gt;src&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SApBkLR89KI/AAAAAAAAA1I/US3fxL4fa4w/s1600-h/hibernate-cfg-xml.gif"&gt;&lt;img
      src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SApBkLR89KI/AAAAAAAAA1I/US3fxL4fa4w/s320/hibernate-cfg-xml.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5191033610257101986" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Next&lt;/span&gt; i &lt;span style="font-weight: bold;"&gt;Finish&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Plik konfiguracyjny aplikacji opartej o Hibernate - &lt;span
      style="font-weight: bold;"&gt;hibernate.cfg.xml&lt;/span&gt; - przedstawia się następująco (zmieniłem nazwę pakietu, a w zasadzie katalogu, gdzie Hibernate będzie poszukiwał pliku mapowania dla encji User):&lt;pre&gt; &amp;lt;?xml version='1.0' encoding='utf-8'?&gt;&lt;br /&gt; &amp;lt;!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"&lt;br /&gt; "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;&lt;br /&gt;
      &amp;lt;hibernate-configuration&gt;&lt;br /&gt; &amp;lt;session-factory&gt;&lt;br /&gt; &amp;lt;property name="connection.driver_class"&gt;org.hsqldb.jdbcDriver&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="connection.url"&gt;jdbc:hsqldb:.&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="connection.username"&gt;sa&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="connection.password"&gt;&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt;
      &amp;lt;property name="connection.pool_size"&gt;1&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="dialect"&gt;org.hibernate.dialect.HSQLDialect&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="current_session_context_class"&gt;thread&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="cache.provider_class"&gt;org.hibernate.cache.NoCacheProvider&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="show_sql"&gt;true&lt;br /&gt;
      &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="hbm2ddl.auto"&gt;create&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;mapping resource="pl/jaceklaskowski/hibernate/User.hbm.xml"/&gt;&lt;br /&gt; &amp;lt;/session-factory&gt;&lt;br /&gt; &amp;lt;/hibernate-configuration&gt;&lt;/pre&gt;(Ech to formatowanie w NetBeans - dlaczego znaczniki zamykające są w nowej linii?!)&lt;br /&gt;&lt;br /&gt;Tworzę plik mapowania dla encji User w katalogu &lt;span style="font-weight:
      bold;"&gt;src/pl/jaceklaskowski/hibernate/User.hbm.xml&lt;/span&gt; - &lt;span style="font-weight: bold;"&gt;Ctrl+N&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;XML &gt; XML Document&lt;/span&gt; i z wcześniej podświetlonym pakietem &lt;span style="font-weight: bold;"&gt;pl.jaceklaskowski.hibernate&lt;/span&gt; w oknie &lt;span style="font-weight: bold;"&gt;Projects&lt;/span&gt; mam już uzupełnione pole &lt;span style="font-weight: bold;"&gt;Folder&lt;/span&gt; w asystencie tworzenia pliku
      xml. Ostatecznie plik &lt;span style="font-weight: bold;"&gt;User.hbm.xml&lt;/span&gt; prezentuje się następująco:&lt;pre&gt; &amp;lt;?xml version='1.0' encoding='utf-8'?&gt;&lt;br /&gt; &amp;lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"&lt;br /&gt; "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;&lt;br /&gt; &amp;lt;hibernate-mapping package="pl.jaceklaskowski.hibernate"&gt;&lt;br /&gt; &amp;lt;class name="User" table="User"&gt;&lt;br /&gt;
      &amp;lt;id name="id"&gt;&lt;br /&gt; &amp;lt;generator class="native"/&gt;&lt;br /&gt; &amp;lt;/id&gt;&lt;br /&gt; &amp;lt;property name="imie" column="T_IMIE" length="10" not-null="true"/&gt;&lt;br /&gt; &amp;lt;property name="nazwisko" column="T_NAZWISKO" length="25" not-null="true"/&gt;&lt;br /&gt; &amp;lt;/class&gt;&lt;br /&gt; &amp;lt;/hibernate-mapping&gt;&lt;/pre&gt;Podczas edycji pojawił się błąd w NetBeans, który zgłosiłem jako &lt;a
      href="http://www.netbeans.org/issues/show_bug.cgi?id=133253"&gt;133253: AE: Token length=0 &amp;lt;= 0&lt;/a&gt;, który zanim opublikowałem wpis został oznaczony jako duplikat błędu poprawionego w najnowszej wersji rozwojowej NetBeans 6.1 - kolejny powód porzucenia RC1. Po wystąpieniu tego błędu, praca z edytorem XML należała do niezwykle nieprzyjemnych (delikatnie mówiąc).&lt;br /&gt;&lt;br /&gt;Pora na dodanie kilku bibliotek pomocniczych dla Hibernate (i tutaj kolejny raz pojawia się zaleta
      stosowania narzędzia, które samodzielnie zadbałoby o zarządzanie zależnościami, np. &lt;a href="http://maven.apache.org"&gt;Apache Maven 2&lt;/a&gt;). Ale moment, przecież dodanie biblioteki Hibernate w NetBeans to jest dokładnie ten krok - wszystkie konieczne zależności zostały również dodane (!) Do czegoś się jednak ten NetBeans 6.1 przydał ;-)&lt;br /&gt;&lt;br /&gt;Pierwsze uruchomienie aplikacji za pomocą &lt;span style="font-weight: bold;"&gt;Run&lt;/span&gt; (skrót klawiszowy &lt;span
      style="font-weight: bold;"&gt;F6&lt;/span&gt;) kończy się błędem:&lt;pre&gt; java.lang.ClassNotFoundException: org.hsqldb.jdbcDriver&lt;br /&gt; at java.net.URLClassLoader$1.run(URLClassLoader.java:200)&lt;br /&gt; at java.security.AccessController.doPrivileged(Native Method)&lt;br /&gt; at java.net.URLClassLoader.findClass(URLClassLoader.java:188)&lt;br /&gt; at java.lang.ClassLoader.loadClass(ClassLoader.java:306)&lt;br /&gt; at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)&lt;br
      /&gt; at java.lang.ClassLoader.loadClass(ClassLoader.java:251)&lt;br /&gt; at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)&lt;br /&gt; at java.lang.Class.forName0(Native Method)&lt;br /&gt; at java.lang.Class.forName(Class.java:169)&lt;br /&gt; at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:100)&lt;br /&gt; at org.hibernate.connection.DriverManagerConnectionProvider.configure(DriverManagerConnectionProvider.java:61)&lt;br /&gt; at
      org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124)&lt;br /&gt; at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:56)&lt;br /&gt; at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:414)&lt;br /&gt; at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62)&lt;br /&gt; at
      org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)&lt;br /&gt; at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)&lt;br /&gt; at pl.jaceklaskowski.hibernate.HibernateExample.(HibernateExample.java:21)&lt;br /&gt; java.lang.ExceptionInInitializerError&lt;br /&gt; Caused by: org.hibernate.HibernateException: JDBC Driver class not found: org.hsqldb.jdbcDriver&lt;br /&gt; at
      org.hibernate.connection.DriverManagerConnectionProvider.configure(DriverManagerConnectionProvider.java:66)&lt;br /&gt; at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124)&lt;br /&gt; at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:56)&lt;br /&gt; at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:414)&lt;br /&gt; at
      org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62)&lt;br /&gt; at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)&lt;br /&gt; at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)&lt;br /&gt; at pl.jaceklaskowski.hibernate.HibernateExample.(HibernateExample.java:21)&lt;br /&gt; Caused by: java.lang.ClassNotFoundException: org.hsqldb.jdbcDriver&lt;br /&gt; at java.net.URLClassLoader$1.run(URLClassLoader.java:200)&lt;br /&gt; at
      java.security.AccessController.doPrivileged(Native Method)&lt;br /&gt; at java.net.URLClassLoader.findClass(URLClassLoader.java:188)&lt;br /&gt; at java.lang.ClassLoader.loadClass(ClassLoader.java:306)&lt;br /&gt; at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)&lt;br /&gt; at java.lang.ClassLoader.loadClass(ClassLoader.java:251)&lt;br /&gt; at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)&lt;br /&gt; at java.lang.Class.forName0(Native Method)&lt;br /&gt; at
      java.lang.Class.forName(Class.java:169)&lt;br /&gt; at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:100)&lt;br /&gt; at org.hibernate.connection.DriverManagerConnectionProvider.configure(DriverManagerConnectionProvider.java:61)&lt;br /&gt; ... 7 more&lt;/pre&gt;Jak najbardziej zrozumiałe biorąc pod uwagę, że korzystam z HSQLDB, a nigdzie nie zadeklarowałem tej potrzeby poza plikiem konfiguracyjnym Hibernate'a - hibernate.cfg.xml (linia &lt;span style="font-weight:
      bold;"&gt;&amp;lt;property name="connection.driver_class"&gt;org.hsqldb.jdbcDriver&amp;lt;/property&gt;&lt;/span&gt;). Dodaję bibliotekę HSQLDB do projektu - &lt;span style="font-weight: bold;"&gt;Properties &gt; Libraries &gt; Add Library...&lt;/span&gt; i okazuje się, że nie ma wsparcia dla niego wsparcia w NetBeans 6.1. Jest jednak wsparcie (gotowa do użycia biblioteka) dla Java DB (Apache Derby) oraz MySQL. Zmieniam konfigurację Hibernate, tak aby w użyciu była baza danych Java DB (jestem zbyt
      leniwy, aby pobierać HSQLDB z sieci, skoro mogę skorzystać z czegoś co mam pod ręką).&lt;br /&gt;&lt;br /&gt;Dodaję bibliotekę &lt;span style="font-weight: bold;"&gt;Java DB Driver&lt;/span&gt; do projektu.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SApCy7R89LI/AAAAAAAAA1Q/DrzZBpb99rg/s1600-h/javadb-driver.gif"&gt;&lt;img src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SApCy7R89LI/AAAAAAAAA1Q/DrzZBpb99rg/s320/javadb-driver.gif" alt="" style="display: block; margin: 0px auto
      10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5191034963171800242" /&gt;&lt;/a&gt;&lt;br /&gt;Muszę również zmienić plik hibernate.cfg.xml (nie muszę oczywiście zmieniać innych części aplikacji, które są niezależne od wykorzystywanej bazy danych). Tutaj przyadłoby się wsparcie NetBeans dla pracy z Hibernate, w którym zdefiniowałbym źródło danych, a plik konfiguracyjny zostałby zmodyfikowany w odpowiedni sposób, ukrywając przede mną tajniki konfiguracji
      Hibernate i Java DB. Na razie muszę to zrobić ręcznie (podeprę się moim artykułem o OpenJPA z Derby - &lt;a href="http://www.jaceklaskowski.pl/wiki/Java_Persistence_API_z_OpenJPA_i_Derby_oraz_TestNG_z_Eclipse_IDE_w_tle#Definicja_jednostki_utrwalania_-_persistence.xml"&gt;Java Persistence API z OpenJPA i Derby oraz TestNG z Eclipse IDE w tle&lt;/a&gt; oraz &lt;a href="http://www.jaceklaskowski.pl/wiki/Hibernate_jako_dostawca_JPA_w_samodzielnej_aplikacji"&gt;Hibernate jako dostawca JPA w samodzielnej
      aplikacji&lt;/a&gt;). Zmieniony plik hibernate.cfg.xml prezentuje sie następująco:&lt;pre&gt; &amp;lt;?xml version='1.0' encoding='utf-8'?&gt;&lt;br /&gt; &amp;lt;!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"&lt;br /&gt; "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;&lt;br /&gt; &amp;lt;hibernate-configuration&gt;&lt;br /&gt; &amp;lt;session-factory&gt;&lt;br /&gt; &amp;lt;property
      name="connection.driver_class"&gt;org.apache.derby.jdbc.EmbeddedDriver&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="connection.url"&gt;jdbc:derby:derbyDB;create=true&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="connection.username"&gt;app&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="connection.password"&gt;app&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="connection.pool_size"&gt;1&lt;br /&gt;
      &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="dialect"&gt;org.hibernate.dialect.DerbyDialect&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="current_session_context_class"&gt;thread&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="cache.provider_class"&gt;org.hibernate.cache.NoCacheProvider&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="show_sql"&gt;true&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property
      name="hbm2ddl.auto"&gt;create&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;mapping resource="pl/jaceklaskowski/hibernate/User.hbm.xml"/&gt;&lt;br /&gt; &amp;lt;/session-factory&gt;&lt;br /&gt; &amp;lt;/hibernate-configuration&gt;&lt;/pre&gt;Ponownie uruchamiam aplikację - &lt;span style="font-weight: bold;"&gt;F6&lt;/span&gt; i...aplikacja kończy się błędem o braku poprawnej składni SQL.&lt;pre&gt; INFO: exporting generated schema to database&lt;br /&gt; Apr 19, 2008 12:37:38 PM
      org.hibernate.tool.hbm2ddl.SchemaExport create&lt;br /&gt; SEVERE: Unsuccessful: create table User (id integer not null, T_IMIE varchar(10) not null, T_NAZWISKO varchar(25) not null, primary key (id))&lt;br /&gt; Apr 19, 2008 12:37:38 PM org.hibernate.tool.hbm2ddl.SchemaExport create&lt;br /&gt; SEVERE: Syntax error: Encountered "User" at line 1, column 14.&lt;br /&gt; Apr 19, 2008 12:37:38 PM org.hibernate.tool.hbm2ddl.SchemaExport execute&lt;br /&gt; INFO: schema export complete&lt;br /&gt;
      Hibernate: insert into User (T_IMIE, T_NAZWISKO, id) values (?, ?, ?)&lt;br /&gt; Apr 19, 2008 12:37:38 PM org.hibernate.util.JDBCExceptionReporter logExceptions&lt;br /&gt; WARNING: SQL Error: -1, SQLState: 42X01&lt;br /&gt; Apr 19, 2008 12:37:38 PM org.hibernate.util.JDBCExceptionReporter logExceptions&lt;br /&gt; SEVERE: Syntax error: Encountered "User" at line 1, column 13.&lt;br /&gt; Apr 19, 2008 12:37:38 PM org.hibernate.event.def.AbstractFlushingEventListener performExecutions&lt;br /&gt;
      SEVERE: Could not synchronize database state with session&lt;br /&gt; org.hibernate.exception.SQLGrammarException: could not insert: [pl.jaceklaskowski.hibernate.User]&lt;br /&gt; at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)&lt;br /&gt; at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)&lt;br /&gt; at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2267)&lt;br /&gt; at
      org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2660)&lt;br /&gt; at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:56)&lt;br /&gt; at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)&lt;br /&gt; at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)&lt;br /&gt; at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)&lt;br /&gt; at
      org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)&lt;br /&gt; at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)&lt;br /&gt; at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)&lt;br /&gt; at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)&lt;br /&gt; at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)&lt;br /&gt; at
      pl.jaceklaskowski.hibernate.HibernateExample.createUsers(HibernateExample.java:46)&lt;br /&gt; at pl.jaceklaskowski.hibernate.HibernateExample.main(HibernateExample.java:26)&lt;br /&gt; Caused by: java.sql.SQLSyntaxErrorException: Syntax error: Encountered "User" at line 1, column 13.&lt;br /&gt; at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)&lt;br /&gt; at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)&lt;br /&gt; at
      org.apache.derby.client.am.Connection.prepareStatement(Unknown Source)&lt;br /&gt; at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:505)&lt;br /&gt; at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:94)&lt;br /&gt; at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:87)&lt;br /&gt; at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:222)&lt;br /&gt; at
      org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2224)&lt;br /&gt; ... 12 more&lt;br /&gt; Caused by: org.apache.derby.client.am.SqlException: Syntax error: Encountered "User" at line 1, column 13.&lt;br /&gt; at org.apache.derby.client.am.Statement.completeSqlca(Unknown Source)&lt;br /&gt; at org.apache.derby.client.net.NetStatementReply.parsePrepareError(Unknown Source)&lt;br /&gt; at org.apache.derby.client.net.NetStatementReply.parsePRPSQLSTTreply(Unknown
      Source)&lt;br /&gt; at org.apache.derby.client.net.NetStatementReply.readPrepareDescribeOutput(Unknown Source)&lt;br /&gt; at org.apache.derby.client.net.StatementReply.readPrepareDescribeOutput(Unknown Source)&lt;br /&gt; at org.apache.derby.client.net.NetStatement.readPrepareDescribeOutput_(Unknown Source)&lt;br /&gt; at org.apache.derby.client.am.Statement.readPrepareDescribeOutput(Unknown Source)&lt;br /&gt; at org.apache.derby.client.am.PreparedStatement.readPrepareDescribeInputOutput(Unknown
      Source)&lt;br /&gt; at org.apache.derby.client.am.PreparedStatement.flowPrepareDescribeInputOutput(Unknown Source)&lt;br /&gt; at org.apache.derby.client.am.PreparedStatement.prepare(Unknown Source)&lt;br /&gt; at org.apache.derby.client.am.Connection.prepareStatementX(Unknown Source)&lt;br /&gt; ... 18 more&lt;br /&gt; Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not insert: [pl.jaceklaskowski.hibernate.User]&lt;br /&gt; at
      org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)&lt;br /&gt; at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)&lt;br /&gt; at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2267)&lt;br /&gt; at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2660)&lt;br /&gt; at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:56)&lt;br /&gt; at
      org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)&lt;br /&gt; at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)&lt;br /&gt; at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)&lt;br /&gt; at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)&lt;br /&gt; at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)&lt;br /&gt; at
      org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)&lt;br /&gt; at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)&lt;br /&gt; at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)&lt;br /&gt; at pl.jaceklaskowski.hibernate.HibernateExample.createUsers(HibernateExample.java:46)&lt;br /&gt; at pl.jaceklaskowski.hibernate.HibernateExample.main(HibernateExample.java:26)&lt;br /&gt; Caused by: java.sql.SQLSyntaxErrorException: Syntax error: Encountered
      "User" at line 1, column 13.&lt;br /&gt; at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)&lt;br /&gt; at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)&lt;br /&gt; at org.apache.derby.client.am.Connection.prepareStatement(Unknown Source)&lt;br /&gt; at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:505)&lt;br /&gt; at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:94)&lt;br /&gt; at
      org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:87)&lt;br /&gt; at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:222)&lt;br /&gt; at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2224)&lt;br /&gt; ... 12 more&lt;br /&gt; Caused by: org.apache.derby.client.am.SqlException: Syntax error: Encountered "User" at line 1, column 13.&lt;br /&gt; at org.apache.derby.client.am.Statement.completeSqlca(Unknown
      Source)&lt;br /&gt; at org.apache.derby.client.net.NetStatementReply.parsePrepareError(Unknown Source)&lt;br /&gt; at org.apache.derby.client.net.NetStatementReply.parsePRPSQLSTTreply(Unknown Source)&lt;br /&gt; at org.apache.derby.client.net.NetStatementReply.readPrepareDescribeOutput(Unknown Source)&lt;br /&gt; at org.apache.derby.client.net.StatementReply.readPrepareDescribeOutput(Unknown Source)&lt;br /&gt; at org.apache.derby.client.net.NetStatement.readPrepareDescribeOutput_(Unknown
      Source)&lt;br /&gt; at org.apache.derby.client.am.Statement.readPrepareDescribeOutput(Unknown Source)&lt;br /&gt; at org.apache.derby.client.am.PreparedStatement.readPrepareDescribeInputOutput(Unknown Source)&lt;br /&gt; at org.apache.derby.client.am.PreparedStatement.flowPrepareDescribeInputOutput(Unknown Source)&lt;br /&gt; at org.apache.derby.client.am.PreparedStatement.prepare(Unknown Source)&lt;br /&gt; at org.apache.derby.client.am.Connection.prepareStatementX(Unknown Source)&lt;br /&gt; ... 18
      more&lt;/pre&gt;Patrząc na komentarze użytkowników do mojego wpisu &lt;a href="http://jlaskowski.blogspot.com/2006/02/hibernate-tniemy-koszty-dostpu-do.html"&gt;Hibernate - tniemy koszty dostępu do danych relacyjnych&lt;/a&gt; wielu prosiło o możliwość podejrzenia struktury bazodanowej po uruchomieniu aplikacji, więc skorzystam z bazy dostarczanej przez NetBeans - &lt;span style="font-weight: bold;"&gt;sample&lt;/span&gt;. W międzyczasie musiałem zrestartować NetBeans i dopiero po tym zauważam, że
      NetBeans 6.1 rozpoznaje pliki hibernate i upraszcza ich edycję - działa podpowiadanie elementów pliku konfiguracyjnego Hibernate (!) &lt;span style="font-weight: bold;"&gt;Ctrl+Spacja&lt;/span&gt; działa i w dodatku podmienia starą konfigurację (elementy bez prefiksu hibernate na te, z prefiksem).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SApDdLR89MI/AAAAAAAAA1Y/GM4DxFywgk8/s1600-h/hibernate-xml-view.gif"&gt;&lt;img
      src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SApDdLR89MI/AAAAAAAAA1Y/GM4DxFywgk8/s320/hibernate-xml-view.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5191035689021273282" /&gt;&lt;/a&gt;&lt;br /&gt;czy&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SApDn7R89NI/AAAAAAAAA1g/y5QT7TDW3I0/s1600-h/derby-dialect.gif"&gt;&lt;img
      src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SApDn7R89NI/AAAAAAAAA1g/y5QT7TDW3I0/s320/derby-dialect.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5191035873704867026" /&gt;&lt;/a&gt;&lt;br /&gt;Kolejną ciekawostką wsparcia NetBeans 6.1 dla projektów korzystających z Hibernate jest oznaczenie dedykowaną ikoną Hibernate plików konfiguracyjnych hibernate.cfg.xml oraz User.hbm.xml (wydaje mi się, że NetBeans
      początkowo ich nie rozpoznawał, ale dopiero po restarcie mam wrażenie, że pliki zostały rozpoznane jako hibernetowe i oznaczone odpowiednią ikoną).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SApEGLR89OI/AAAAAAAAA1o/hug6dUXbgPc/s1600-h/netbeans-hibernatecfgxml.gif"&gt;&lt;img src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SApEGLR89OI/AAAAAAAAA1o/hug6dUXbgPc/s320/netbeans-hibernatecfgxml.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor:
      pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5191036393395909858" /&gt;&lt;/a&gt;&lt;br /&gt;oraz udostępnienie specjalizowanego edytora:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_wSeV_DMR2uA/SApEOrR89PI/AAAAAAAAA1w/QwO2wk26zhU/s1600-h/hibernate-editor.gif"&gt;&lt;img src="http://3.bp.blogspot.com/_wSeV_DMR2uA/SApEOrR89PI/AAAAAAAAA1w/QwO2wk26zhU/s320/hibernate-editor.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor:
      hand;" border="0" id="BLOGGER_PHOTO_ID_5191036539424797938" /&gt;&lt;/a&gt;&lt;br /&gt;Dodam do tego, że w &lt;a href="http://jlaskowski.blogspot.com/2006/02/hibernate-tniemy-koszty-dostpu-do.html"&gt;Hibernate - tniemy koszty dostępu do danych relacyjnych&lt;/a&gt; miałem w pliku hibernate.cfg.xml zdefiniowane &lt;span style="font-weight: bold;"&gt;&amp;lt;property name="hbm2ddl.auto"&gt;create&amp;lt;/property&gt;&lt;/span&gt;, a w &lt;a
      href="http://www.jaceklaskowski.pl/w/index.php?title=Hibernate_jako_dostawca_JPA_w_samodzielnej_aplikacji#Utworzenie_konfiguracji_JPA_-_persistence.xml"&gt;Hibernate jako dostawca JPA w samodzielnej aplikacji&lt;/a&gt; &lt;span style="font-weight: bold;"&gt;&amp;lt;property name="hibernate.hbm2ddl.auto" value="update"/&gt;&lt;/span&gt; i jako że nie pamiętałem, jaką wartość powinien mieć ten parametr, aby baza była każdorazowo tworzona przy startcie aplikacji skorzystałem z pomocy NetBeans 6.1
      (zamiast, jak to w takich momentach robię, Google. Zdaje się, że rośnie nam ciekawa konkurencja dla Google w postaci NetBeans 6.1 ;-)).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SApE2LR89QI/AAAAAAAAA14/HAxWb480Ydw/s1600-h/edit-hibernate-property.gif"&gt;&lt;img src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SApE2LR89QI/AAAAAAAAA14/HAxWb480Ydw/s320/edit-hibernate-property.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor:
      hand;" border="0" id="BLOGGER_PHOTO_ID_5191037218029630722" /&gt;&lt;/a&gt;&lt;br /&gt;Po tych zachwytach i pomocy ze strony NetBeans plik hibernate.cfg.xml wygląda następująco:&lt;pre&gt; &amp;lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;br /&gt; &amp;lt;!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"&lt;br /&gt; "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;&lt;br /&gt; &amp;lt;hibernate-configuration&gt;&lt;br /&gt;
      &amp;lt;session-factory&gt;&lt;br /&gt; &amp;lt;property name="hibernate.connection.driver_class"&gt;org.apache.derby.jdbc.ClientDriver&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="hibernate.connection.url"&gt;jdbc:derby://localhost:1527/sample&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="hibernate.connection.username"&gt;app&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="hibernate.connection.password"&gt;app&lt;br /&gt;
      &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="hibernate.connection.pool_size"&gt;1&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="hibernate.current_session_context_class"&gt;thread&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="hibernate.cache.provider_class"&gt;org.hibernate.cache.NoCacheProvider&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="hibernate.dialect"&gt;org.hibernate.dialect.DerbyDialect&lt;br /&gt;
      &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="hibernate.show_sql"&gt;true&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="hibernate.format_sql"&gt;true&lt;br /&gt; &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;property name="hibernate.hbm2ddl.auto"&gt;create-drop&amp;lt;/property&gt;&lt;br /&gt; &amp;lt;mapping resource="pl/jaceklaskowski/hibernate/User.hbm.xml"/&gt;&lt;br /&gt; &amp;lt;/session-factory&gt;&lt;br /&gt;
      &amp;lt;/hibernate-configuration&gt;&lt;/pre&gt;Uruchamiam Java DB - w oknie &lt;span style="font-weight: bold;"&gt;Services&lt;/span&gt;, kategoria &lt;span style="font-weight: bold;"&gt;Databases&lt;/span&gt; i na &lt;span style="font-weight: bold;"&gt;Java DB&lt;/span&gt; wybieram &lt;span style="font-weight: bold;"&gt;Start Server&lt;/span&gt; (niestety poza nieaktywnym menu &lt;span style="font-weight: bold;"&gt;Start Server&lt;/span&gt; nie ma wizualnego oznaczenia, np. w postaci zielonej
      strzałki jak na serwerach, że baza już jest uruchomiona).&lt;br /&gt;&lt;br /&gt;Ponowne uruchomienie i ponowny błąd. Co jest?! Po kilku próbach okazuje się, że Java DB nie akceptuje nazwy tabeli USER (nawet edytor SQL nie podświetla USER na zielono, co już wskazuje na jakiś błąd).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_wSeV_DMR2uA/SApFMrR89RI/AAAAAAAAA2A/voXOYY86-jU/s1600-h/netbeans-sql-command.gif"&gt;&lt;img
      src="http://3.bp.blogspot.com/_wSeV_DMR2uA/SApFMrR89RI/AAAAAAAAA2A/voXOYY86-jU/s320/netbeans-sql-command.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5191037604576687378" /&gt;&lt;/a&gt;&lt;br /&gt;Sprawdzam w dokumentacji &lt;a href="http://db.apache.org/derby/docs/10.2/ref/rrefsqlj24513.html"&gt;Apache Derby 10.2 CREATE TABLE statement&lt;/a&gt; i sama struktura polecenia jest dobra, a w dodatku nic nie
      widzę o zakazie stosowania USER jako nazwy bazy danych. Hmmm, coś tu jest nie tak. Ale co?! Nie zastanawiając się długo zmieniam nazwę tabeli, na którą jest mapowana klasa User na UZYTKOWNIK w pliku User.hbm.xml.&lt;pre&gt; &amp;lt;?xml version='1.0' encoding='utf-8'?&gt;&lt;br /&gt; &amp;lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"&lt;br /&gt; "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;&lt;br /&gt; &amp;lt;hibernate-mapping
      package="pl.jaceklaskowski.hibernate"&gt;&lt;br /&gt; &amp;lt;class name="User" table="UZYTKOWNIK"&gt;&lt;br /&gt; &amp;lt;id name="id" &gt;&lt;br /&gt; &amp;lt;generator class="native"/&gt;&lt;br /&gt; &amp;lt;/id&gt;&lt;br /&gt; &amp;lt;property name="imie" column="T_IMIE" length="10" not-null="true"/&gt;&lt;br /&gt; &amp;lt;property name="nazwisko" column="T_NAZWISKO" length="25" not-null="true"/&gt;&lt;br /&gt; &amp;lt;/class&gt;&lt;br /&gt; &amp;lt;/hibernate-mapping&gt;&lt;/pre&gt;Ponownie
      &lt;span style="font-weight: bold;"&gt;F6&lt;/span&gt; i już działa jak należy. W końcu! Teraz mógłbym wrócić do konfiguracji z wbudowaną bazą danych, ale to pozostawiam jako zadanie domowe dla zainteresowanych.&lt;br /&gt;&lt;br /&gt;Pytanie konkursowe: &lt;span style="font-weight: bold;"&gt;Jaka jest domyślna nazwa pliku konfiguracyjnego Hibernate?&lt;/span&gt; (nagród proszę nie oczekiwać).&lt;br /&gt;&lt;br /&gt;Pełna aplikacja &lt;span style="font-weight: bold;"&gt;HibernateExample&lt;/span&gt;
      dostępna jest do pobrania jako &lt;a href="http://www.jaceklaskowski.pl/aplikacje/HibernateExample.zip"&gt;HibernateExample.zip&lt;/a&gt;. Miłej hibernacji!&lt;div class="blogger-post-footer"&gt;&lt;img src="http://res1.blogblog.com/tracker/20941681-7808959085662437252?l=jlaskowski.blogspot.com" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Sat, 19 Apr 2008 19:51:13 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Pierwsze kroki z MDA w wykonaniu AndroMDA</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-5158164017407379746</guid>
      <link>http://jlaskowski.blogspot.com/2008/04/pierwsze-kroki-z-mda-w-wykonaniu.html</link>
      <description>Po &lt;a href="http://jlaskowski.blogspot.com/2008/04/pierwsze-kroki-z-uml-w-netbeans-61.html?showComment=1208393520000#c4420066973228810761"&gt;komentarzu Krzyśka&lt;/a&gt; do wpisu &lt;a href="http://jlaskowski.blogspot.com/2008/04/pierwsze-kroki-z-uml-w-netbeans-61.html"&gt;Pierwsze kroki z UML w NetBeans 6.1&lt;/a&gt;, w którym wspomniał o &lt;span style="font-weight: bold;"&gt;MDA&lt;/span&gt; i lekturze artykułu Mariusza Wójcika &lt;a
      href="http://mariuszwojcik.blogspot.com/2007/03/aplikacje-webowe-jak-je-ogarn.html"&gt;Spring Framework - projektowanie aplikacji w oparciu o koncepcję MDA&lt;/a&gt; nie miałem wątpliwości, że po wczorajszej zabawie z UML dzisiaj pora spróbować sił z MDA - &lt;span style="font-weight: bold;"&gt;Model-Driven Architecture&lt;/span&gt;. Podejście MDA pozwala na tworzenie aplikacji bazując na modelach UML niezależnie od docelowego środowiska uruchomieniowego i użytych technologii, które są transformowane
      do aplikacji wynikowej za pomocą pewnych magicznych transformat. W innych słowach możnaby założyć, że wystarczy jedynie trochę porysować i po dodaniu pewnych atrybutów utworzenie aplikacji to jedynie wydanie polecenia Generate. Trochę się człowiek nasłuchał o tego typu programowaniu, że fajne i takie tam, ale praktycznej wiedzy żadnej. Czas to zmienić.&lt;br /&gt;&lt;br /&gt;Rozpocząłem od wspomnianego artykułu Mariusza, a później zajrzałem na strony &lt;a
      href="http://www.andromda.org/"&gt;AndroMDA&lt;/a&gt;. Zacząłem od dostępnej dokumentacji, gdzie w &lt;a href="http://galaxy.andromda.org/index.php?option=com_content&amp;amp;task=view&amp;amp;id=105&amp;amp;Itemid=89"&gt;Environment Setup&lt;/a&gt; napisano:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Install Maven - A repository containing all versioned dependencies. This repository is used during the build and deploy processes (very similar to the .NET Global Assembly Cache
      concept).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Użycie Mavena do tworzenia aplikacji zawsze spotyka się z moją aprobatą, więc nie miałem złudzeń, że dzisiaj będzie znowu przyjemnie. Wzmianka o .Net w kontekście Mavena była zaskakująca. Może ktoś coś napisać o tym .NET Global Assembly Cache w kilku krótkich, żołnierskich zdaniach? Ja tu wierzę, że pomysły nowatorskie płynące z projektów otwartych, a tu się okazuje, że w .Net to już dawno wszystko (?) było ;-)&lt;br /&gt;&lt;br /&gt;Właśnie niedawno
      wyszła wersja &lt;span style="font-weight: bold;"&gt;Apache Maven 2.0.9&lt;/span&gt;, więc przy okazji uaktualnimy ją i popróbujemy się z AndroMDA.&lt;br /&gt;&lt;br /&gt;Uwaga na potencjalny błąd w tandemie Maven-AndroMDA:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;(Note that as of this writing, the latest version of Maven is 2.0.7, but it has a minor issue with AndroMDA 3.2 - this has been fixed in the latest snapshot release. Advanced users may wish to install Maven 2.0.7, but
      you will have to manually delete the section in app\pom.xml.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dzisiejszy pomysł to stworzenie aplikacij webowej z wykorzystaniem AndroMDA, które realizuje specyfikację MDA. Zamiast, jak to polecano w dokumentacji AndroMDA, uruchomienia aplikacji na JBAS skorzystam z aktrakcyjniejszej funkcjonalnie oferty serwera Java EE 5, potencjalnie Apache Geronimo (chociaż w obwodzie oczekuje i GlassFish).&lt;pre&gt; jlaskowski@work /cygdrive/c/projs/sandbox&lt;br /&gt; $ mvn
      -v&lt;br /&gt; Maven version: 2.0.9&lt;br /&gt; Java version: 1.5.0_14&lt;br /&gt; OS name: "windows xp" version: "5.1" arch: "x86" Family: "windows"&lt;br /&gt;&lt;br /&gt; jlaskowski@work /cygdrive/c/projs/sandbox&lt;br /&gt; $ mvn archetype:create -DgroupId=pl.jaceklaskowski.jsf.mda -DartifactId=mda-webapp&lt;br /&gt; [INFO] Scanning for projects...&lt;br /&gt; [INFO] Searching repository for plugin with prefix: 'archetype'.&lt;br /&gt; [INFO]
      ------------------------------------------------------------------------&lt;br /&gt; [INFO] Building Maven Default Project&lt;br /&gt; [INFO] task-segment: [archetype:create] (aggregator-style)&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;br /&gt; ...&lt;br /&gt; [INFO] OldArchetype created in dir: c:\projs\sandbox\mda-webapp&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;br /&gt; [INFO] BUILD
      SUCCESSFUL&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;/pre&gt;Uruchamiam &lt;span style="font-weight: bold;"&gt;NetBeans IDE 6.1 RC1&lt;/span&gt; i importuję projekt, aby zmodyfikować &lt;span style="font-weight: bold;"&gt;pom.xml&lt;/span&gt; (plik konfiguracyjny "serce" projektu mavenowego). Wcześniej zainstalowałem netbeansową wtyczkę wspierającą projekty mavenowe (patrz &lt;a
      href="http://jlaskowski.blogspot.com/2008/04/tworzenie-wtyczek-maven-2-z-netbeans.html"&gt;Tworzenie wtyczek Maven 2 z NetBeans IDE 6.1&lt;/a&gt;), więc wystarczy &lt;span style="font-weight: bold;"&gt;Ctrl+Shift+O&lt;/span&gt; i wybrać katalog, który stworzyłem wcześniej ręcznie (auć, przecież mogłem to stworzyć z poziomu NB!).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_wSeV_DMR2uA/SAc4keCL8HI/AAAAAAAAAz8/nAFqSM9r9ZQ/s1600-h/mda-webapp-imported.gif"&gt;&lt;img
      src="http://2.bp.blogspot.com/_wSeV_DMR2uA/SAc4keCL8HI/AAAAAAAAAz8/nAFqSM9r9ZQ/s320/mda-webapp-imported.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5190179294756466802" /&gt;&lt;/a&gt;&lt;br /&gt; Po zmianach pom.xml prezentuje się następująco:&lt;pre&gt; &amp;lt;project xmlns="http://maven.apache.org/POM/4.0.0" &lt;br /&gt; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 &lt;br /&gt; http://maven.apache.org/maven-v4_0_0.xsd"&gt;&lt;br /&gt; &amp;lt;modelVersion&gt;4.0.0&amp;lt;/modelVersion&gt;&lt;br /&gt; &amp;lt;groupId&gt;pl.jaceklaskowski.jsf.mda&amp;lt;/groupId&gt;&lt;br /&gt; &amp;lt;artifactId&gt;mda-webapp&amp;lt;/artifactId&gt;&lt;br /&gt; &amp;lt;version&gt;1.0&amp;lt;/version&gt;&lt;br /&gt; &amp;lt;name&gt;Aplikacja webowa z pomocą (Andro)MDA, Maven2 i NetBeans 6.1&amp;lt;/name&gt;&lt;br /&gt;
      &amp;lt;url&gt;http://www.jaceklaskowski.pl&amp;lt;/url&gt;&lt;br /&gt; &amp;lt;build&gt;&lt;br /&gt; &amp;lt;defaultGoal&gt;compile&amp;lt;/defaultGoal&gt;&lt;br /&gt; &amp;lt;plugins&gt;&lt;br /&gt; &amp;lt;plugin&gt;&lt;br /&gt; &amp;lt;groupId&gt;org.andromda.maven.plugins&amp;lt;/groupId&gt;&lt;br /&gt; &amp;lt;artifactId&gt;andromdapp-maven-plugin&amp;lt;/artifactId&gt;&lt;br /&gt; &amp;lt;version&gt;3.2&amp;lt;/version&gt;&lt;br /&gt; &amp;lt;/plugin&gt;&lt;br /&gt; &amp;lt;/plugins&gt;&lt;br
      /&gt; &amp;lt;/build&gt;&lt;br /&gt; &amp;lt;repositories&gt;&lt;br /&gt; &amp;lt;repository&gt;&lt;br /&gt; &amp;lt;id&gt;andromda&amp;lt;/id&gt;&lt;br /&gt; &amp;lt;name&gt;AndroMDA Repository&amp;lt;/name&gt;&lt;br /&gt; &amp;lt;url&gt;http://team.andromda.org/maven2&amp;lt;/url&gt;&lt;br /&gt; &amp;lt;/repository&gt;&lt;br /&gt; &amp;lt;/repositories&gt;&lt;br /&gt; &amp;lt;pluginRepositories&gt;&lt;br /&gt; &amp;lt;pluginRepository&gt;&lt;br /&gt; &amp;lt;id&gt;andromda&amp;lt;/id&gt;&lt;br
      /&gt; &amp;lt;name&gt;AndroMDA Repository&amp;lt;/name&gt;&lt;br /&gt; &amp;lt;url&gt;http://team.andromda.org/maven2&amp;lt;/url&gt;&lt;br /&gt; &amp;lt;/pluginRepository&gt;&lt;br /&gt; &amp;lt;/pluginRepositories&gt;&lt;br /&gt; &amp;lt;dependencies&gt;&lt;br /&gt; &amp;lt;dependency&gt;&lt;br /&gt; &amp;lt;groupId&gt;junit&amp;lt;/groupId&gt;&lt;br /&gt; &amp;lt;artifactId&gt;junit&amp;lt;/artifactId&gt;&lt;br /&gt; &amp;lt;version&gt;3.8.1&amp;lt;/version&gt;&lt;br /&gt;
      &amp;lt;scope&gt;test&amp;lt;/scope&gt;&lt;br /&gt; &amp;lt;/dependency&gt;&lt;br /&gt; &amp;lt;/dependencies&gt;&lt;br /&gt; &amp;lt;/project&gt;&lt;/pre&gt;Wybieram &lt;span style="font-weight: bold;"&gt;Build&lt;/span&gt; z menu kontekstowego projektu (zaznaczam projekt w widoku &lt;span style="font-weight: bold;"&gt;Projects&lt;/span&gt; i z menu pod prawym przyciskiem myszki wybieram Build). BUILD SUCCESSFUL w oknie Output upewnia mnie, że wszystko jest jak należy.&lt;br /&gt;&lt;br /&gt;W
      sekcji &lt;a href="http://galaxy.andromda.org/index.php?option=com_content&amp;amp;task=view&amp;amp;id=105&amp;amp;Itemid=89"&gt;Install a UML tool&lt;/a&gt; proponuje się skorzystanie z narzędzia UML, w którym zobrazuję mój pomysł nowej aplikacji webowej, którą następnie wyeksportuję w odpowiednim formacie zrozumiałym dla AndroMDA. Mam dostęp do wszystkich wymienionych produktów, ale do &lt;a href="http://www.ibm.com/software/awdtools/architect/swarchitect/"&gt;IBM Rational Software
      Architect&lt;/a&gt; (obecnie w wersji &lt;span style="font-weight: bold;"&gt;7.0.0.6&lt;/span&gt;), który wspiera &lt;span style="font-weight: bold;"&gt;UML2/EMF&lt;/span&gt; jest mi najbliżej skorzystam z niego (mógłbym również skorzystać z NetBeans IDE 6.1 i jego wsparcia UMLa, ale skoro nie jest wymieniony na stronie na razie odpada).&lt;br /&gt;&lt;br /&gt;We wskazanej gotowej aplikacji na stronie &lt;a
      href="http://galaxy.andromda.org/index.php?option=com_content&amp;amp;task=view&amp;amp;id=112&amp;amp;Itemid=89"&gt;TimeTracker Tour&lt;/a&gt; można znaleźć plik &lt;span style="font-weight: bold;"&gt;readme.txt&lt;/span&gt;, w którym napisano:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The project located in this directory has been generated by Naresh Bhatia using the andromdapp:generate Maven plugin.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Fajnie wiedzieć, że przynajmniej część
      mojej pracy mogę zrzucić na barki mavena. Spróbujmy dowiedzieć się więcej o tej wtyczce z pomocą &lt;a href="http://maven.apache.org/plugins/maven-help-plugin/"&gt;mvn help:describe&lt;/a&gt; (tak mógłbym wszystko wyczytać w pliku, albo na stronie, ale pomyślałem, że pochwalę się moją znajomością Maven-Fu ;-)).&lt;pre&gt; jlaskowski@work ~&lt;br /&gt; $ mvn help:describe -Dplugin=org.andromda.maven.plugins:andromdapp-maven-plugin:3.2&lt;br /&gt; [INFO] Scanning for projects...&lt;br /&gt; [INFO]
      Searching repository for plugin with prefix: 'help'.&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;br /&gt; [INFO] Building Maven Default Project&lt;br /&gt; [INFO] task-segment: [help:describe] (aggregator-style)&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;br /&gt; [INFO] [help:describe]&lt;br /&gt; [INFO] Plugin: 'org.andromda.maven.plugins:andromdapp-maven-plugin:3.2'&lt;br /&gt;
      -----------------------------------------------&lt;br /&gt; Group Id: org.andromda.maven.plugins&lt;br /&gt; Artifact Id: andromdapp-maven-plugin&lt;br /&gt; Version: 3.2&lt;br /&gt; Goal Prefix: andromdapp&lt;br /&gt; Description:&lt;br /&gt;&lt;br /&gt; A plugin for running AndroMDA's AndroMDApp application generator&lt;br /&gt; to generate Maven2 AndroMDA powered applications.&lt;/pre&gt;albo nawet z parametrem &lt;span style="font-weight: bold;"&gt;-Dmedium=true&lt;/span&gt;, który przedstawi
      funkcjonalność wtyczki w okrojonej postaci (dla czytających o mocnych nerwach proponuje się opcję &lt;span style="font-weight: bold;"&gt;-Dfull=true&lt;/span&gt;. Uprasza się o zapięcie pasów przez uruchomieniem polecenia ;-)).&lt;pre&gt; jlaskowski@work ~&lt;br /&gt; $ mvn help:describe -Dplugin=org.andromda.maven.plugins:andromdapp-maven-plugin:3.2 -Dmedium=true&lt;br /&gt; [INFO] Scanning for projects...&lt;br /&gt; [INFO] Searching repository for plugin with prefix: 'help'.&lt;br /&gt; [INFO]
      ------------------------------------------------------------------------&lt;br /&gt; [INFO] Building Maven Default Project&lt;br /&gt; [INFO] task-segment: [help:describe] (aggregator-style)&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;br /&gt; [INFO] [help:describe]&lt;br /&gt; [INFO] Plugin: 'org.andromda.maven.plugins:andromdapp-maven-plugin:3.2'&lt;br /&gt; -----------------------------------------------&lt;br /&gt; Group Id:
      org.andromda.maven.plugins&lt;br /&gt; Artifact Id: andromdapp-maven-plugin&lt;br /&gt; Version: 3.2&lt;br /&gt; Goal Prefix: andromdapp&lt;br /&gt; Description:&lt;br /&gt;&lt;br /&gt; A plugin for running AndroMDA's AndroMDApp application generator&lt;br /&gt; to generate Maven2 AndroMDA powered applications.&lt;br /&gt;&lt;br /&gt; Mojos:&lt;br /&gt;&lt;br /&gt; Goal: 'clean-structure'&lt;br /&gt; Description:&lt;br /&gt; Removes the an AndroMDApp generated application structure.&lt;br /&gt;&lt;br
      /&gt; Goal: 'generate'&lt;br /&gt; Description:&lt;br /&gt; AndroMDA application generator Mojo.&lt;br /&gt;&lt;br /&gt; Goal: 'build'&lt;br /&gt; Description:&lt;br /&gt; A Mojo used for executing the build goals from the top level project.&lt;br /&gt;&lt;br /&gt; Goal: 'deploy'&lt;br /&gt; Description:&lt;br /&gt; Provides the deployment of applications to a given directory.&lt;br /&gt;&lt;br /&gt; Goal: 'eclipse'&lt;br /&gt; Description:&lt;br /&gt; Writes the necessary .classpath and .project
      files for a new eclipse application.&lt;br /&gt;&lt;br /&gt; Goal: 'maven'&lt;br /&gt; Description:&lt;br /&gt; Allows the execution of maven from a given project (searches for nested pom.xml files and executes Maven)&lt;br /&gt;&lt;br /&gt; Goal: 'schema'&lt;br /&gt; Description:&lt;br /&gt; Provides the ability to drop database schemas.&lt;br /&gt;&lt;br /&gt; Goal: 'instrument-scripts'&lt;br /&gt; Description:&lt;br /&gt; Allows for the {@link ScriptClassGenerator} mojo to be invoked. on one or
      more given classes.&lt;br /&gt;&lt;br /&gt; Goal: 'undeploy'&lt;br /&gt; Description:&lt;br /&gt; Provides the undeployment of applications from a given directory.&lt;/pre&gt;Importuję aplikację &lt;span style="font-weight: bold;"&gt;timetracker-completed&lt;/span&gt; do NB i wykonuję &lt;span style="font-weight: bold;"&gt;Clean and Build&lt;/span&gt; (przecież nie będę tego robił z linii poleceń, kiedy dotykam MDA, nieprawdaż?). Jedna uwaga, projekt TimeTracker po zaimportowaniu zostanie oznaczony
      przez NB jako posiadający błędy i wykonanie budowania spowoduje rozwiązanie problemów (niedostępności bibliotek w lokalnym repozytorium mavena). Trochę to trwa zanim aplikacja zostanie zbudowana, aż po około 2-3 minutach pojawia się [ERROR]BUILD FAILURE. Hmm, czyżbym tracił cierpliwość? Próbuję innymi technikami - z menu kontekstowego projektu TimeTracker wybieram &lt;span style="font-weight: bold;"&gt;Open Required Projects&lt;/span&gt; (wcześniej jedynie otworzyłem projekt główny) i sprawdzam klasę
      &lt;span style="font-weight: bold;"&gt;UserVOComparator&lt;/span&gt; (projekt &lt;span style="font-weight: bold;"&gt;TimeTracker Common (jar)&lt;/span&gt;). Najwyraźniej nie ma klasy UserVO w projekcie. Wykonanie polecenia&lt;pre&gt; jlaskowski@work /cygdrive/c/temp/timetracker-completed&lt;br /&gt; $ find . -name UserVO.java -print&lt;/pre&gt;nie napawa optymizmem. Może ten plik jest tworzony dynamicznie podczas budowania? Zgodnie z dokumentacją powinienem &lt;span style="font-weight: bold;"&gt;mvn
      install&lt;/span&gt; w katalogu głównym aplikacji. Niech będzie.&lt;pre&gt; jlaskowski@work /cygdrive/c/temp/timetracker-completed&lt;br /&gt; $ mvn install&lt;br /&gt; [INFO] Scanning for projects...&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;br /&gt; [ERROR] FATAL ERROR&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;br /&gt; [INFO] An invalid artifact was detected.&lt;br /&gt;&lt;br /&gt; This
      artifact might be in your project's POM, or it might have been included transitively&lt;br /&gt; during the resolution process. Here is the information we do have for&lt;br /&gt;&lt;br /&gt; o GroupID: org.andromda.timetracker&lt;br /&gt; o ArtifactID: timetracker-common&lt;br /&gt; o Version: &amp;lt;&amp;lt;&amp;lt; MISSING &gt;&gt;&gt;&lt;br /&gt; o Type: jar&lt;br /&gt;&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;br /&gt; [INFO] Trace&lt;br /&gt;
      org.apache.maven.artifact.InvalidArtifactRTException: For artifact {org.andromda.timetracker:timetracker-common:null:jar}:&lt;br /&gt; The version cannot be empty.&lt;br /&gt; at org.apache.maven.artifact.DefaultArtifact.validateIdentity(DefaultArtifact.java:147)&lt;br /&gt; at org.apache.maven.artifact.DefaultArtifact.&amp;lt;init&gt;(DefaultArtifact.java:122)&lt;br /&gt; at org.apache.maven.artifact.factory.DefaultArtifactFactory.createArtifact(DefaultArtifactFactory.java:158)&lt;br /&gt; at
      org.apache.maven.artifact.factory.DefaultArtifactFactory.createDependencyArtifact(DefaultArtifactFactory.java:58)&lt;br /&gt; at org.apache.maven.project.DefaultMavenProjectBuilder.createManagedVersionMap(DefaultMavenProjectBuilder.java:452)&lt;br /&gt; at org.apache.maven.project.DefaultMavenProjectBuilder.buildInternal(DefaultMavenProjectBuilder.java:912)&lt;br /&gt; at org.apache.maven.project.DefaultMavenProjectBuilder.buildFromSourceFileInternal(DefaultMavenProjectBuilder.java:506)&lt;br /&gt;
      at org.apache.maven.project.DefaultMavenProjectBuilder.build(DefaultMavenProjectBuilder.java:198)&lt;br /&gt; at org.apache.maven.DefaultMaven.getProject(DefaultMaven.java:583)&lt;br /&gt; at org.apache.maven.DefaultMaven.collectProjects(DefaultMaven.java:461)&lt;br /&gt; at org.apache.maven.DefaultMaven.collectProjects(DefaultMaven.java:534)&lt;br /&gt; at org.apache.maven.DefaultMaven.getProjects(DefaultMaven.java:365)&lt;br /&gt; at
      org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:292)&lt;br /&gt; at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:129)&lt;br /&gt; at org.apache.maven.cli.MavenCli.main(MavenCli.java:287)&lt;br /&gt; at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&lt;br /&gt; at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)&lt;br /&gt; at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)&lt;br /&gt; at
      java.lang.reflect.Method.invoke(Method.java:585)&lt;br /&gt; at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)&lt;br /&gt; at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)&lt;br /&gt; at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)&lt;br /&gt; at org.codehaus.classworlds.Launcher.main(Launcher.java:375)&lt;/pre&gt;Pięknie! Napawa optymizmem do dalszej ewaluacji, co?&lt;br /&gt;&lt;br /&gt;Kończę rozdział i po chwili jestem w &lt;a
      href="http://galaxy.andromda.org/index.php?option=com_content&amp;amp;task=view&amp;amp;id=107&amp;amp;Itemid=89"&gt;Starter App&lt;/a&gt;. Zamiast jednak tworzyć aplikację z linii poleceń, skorzystam z NB.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl+Shift+N&lt;/span&gt; i z kategorii &lt;span style="font-weight: bold;"&gt;Maven&lt;/span&gt; wybieram &lt;span style="font-weight: bold;"&gt;Maven Project&lt;/span&gt;. Wciskam przycisk &lt;span style="font-weight:
      bold;"&gt;Add...&lt;/span&gt; gdzie podaję dane wtyczki, którą wykorzystam do tworzenia aplikacji.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SAc7a-CL8JI/AAAAAAAAA0I/7--zBVSfef4/s1600-h/archetype-details.gif"&gt;&lt;img src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SAc7a-CL8JI/AAAAAAAAA0I/7--zBVSfef4/s320/archetype-details.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5190182430082592914"
      /&gt;&lt;/a&gt;&lt;br /&gt;Jak się okazuje takie podejście nie przejdzie, gdyż NB zakończy pracę z:&lt;pre&gt; [ERROR]BUILD ERROR&lt;br /&gt; ------------------------------------------------------------------------&lt;br /&gt; Error creating from archetype&lt;br /&gt;&lt;br /&gt; Embedded error: The META-INF/maven/archetype.xml descriptor cannot be found.&lt;/pre&gt;Wracam na linię poleceń. Już będę grzeczny.&lt;pre&gt; jlaskowski@work /cygdrive/c/projs/sandbox&lt;br /&gt; $ mvn
      org.andromda.maven.plugins:andromdapp-maven-plugin:3.2:generate&lt;br /&gt; [INFO] Scanning for projects...&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;br /&gt; [INFO] Building Maven Default Project&lt;br /&gt; [INFO] task-segment: [org.andromda.maven.plugins:andromdapp-maven-plugin:3.2:generate] (aggregator-style)&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;br /&gt; [INFO]
      [andromdapp:generate]&lt;br /&gt; log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester).&lt;br /&gt; log4j:WARN Please initialize the log4j system properly.&lt;br /&gt; INFO [AndroMDA] discovered andromdapp type --&gt; 'j2ee'&lt;br /&gt; INFO [AndroMDA] discovered andromdapp type --&gt; 'richclient'&lt;br /&gt;&lt;br /&gt; Please choose the type of application to generate [j2ee, richclient]&lt;br /&gt; j2ee&lt;br /&gt;&lt;br /&gt; Please enter the location in which
      your new application will be created (i.e. f:/java/development):&lt;br /&gt; c:/projs/sandbox&lt;br /&gt;&lt;br /&gt; Please enter your first and last name (i.e. Chad Brandon):&lt;br /&gt; Jacek Laskowski&lt;br /&gt;&lt;br /&gt; Which kind of modeling tool will you use? [uml1.4, uml2, emf-uml2]:&lt;br /&gt; emf-uml2&lt;br /&gt;&lt;br /&gt; Please enter the name of your J2EE project (i.e. Animal Quiz):&lt;br /&gt; Powitanie&lt;br /&gt;&lt;br /&gt; Please enter an id for your J2EE project (i.e.
      animalquiz):&lt;br /&gt; mda-powitanie&lt;br /&gt;&lt;br /&gt; Please enter a version for your project (i.e. 1.0-SNAPSHOT):&lt;br /&gt; 1.0&lt;br /&gt;&lt;br /&gt; Please enter the root package name for your J2EE project (i.e. org.andromda.samples.animalquiz):&lt;br /&gt; pl.jaceklaskowski.powitanie&lt;br /&gt;&lt;br /&gt; Would you like an EAR or standalone WAR? [ear, war]:&lt;br /&gt; ear&lt;br /&gt;&lt;br /&gt; Please enter the type of transactional/persistence cartridge to use [hibernate, ejb,
      ejb3, spring, none]:&lt;br /&gt; ejb3&lt;br /&gt;&lt;br /&gt; Please enter the database backend for the persistence layer&lt;br /&gt; [hypersonic, mysql, oracle, db2, informix, mssql, pointbase, postgres, sybase, sabdb, progress, derby]:&lt;br /&gt; derby&lt;br /&gt;&lt;br /&gt; Will your project need workflow engine capabilities? (it uses jBPM and Hibernate3)? [yes, no]:&lt;br /&gt; no&lt;br /&gt;&lt;br /&gt; Will your project have a web user interface? [yes, no]:&lt;br /&gt; yes&lt;br /&gt;&lt;br
      /&gt; Would you like your web user interface to use JSF or Struts? [jsf, struts]:&lt;br /&gt; jsf&lt;br /&gt;&lt;br /&gt; Would you like to use Facelets or JSP as your view type for JSF? [facelets, jsp]:&lt;br /&gt; facelets&lt;br /&gt;&lt;br /&gt; Would you like to use the JBoss Seam application framework? [yes, no]:&lt;br /&gt; yes&lt;br /&gt;&lt;br /&gt; Would you like to be able to expose your services as web services? [yes, no]:&lt;br /&gt; yes&lt;br /&gt;&lt;br /&gt; Would you like to use the
      JSR181 (webservice defined by annotations) EJB3 cartridge specific implementation? [yes, no]:&lt;br /&gt; yes&lt;br /&gt; -------------------------------------------------------------------------------------&lt;br /&gt; G e n e r a t i n g A n d r o M D A P o w e r e d A p p l i c a t i o n&lt;br /&gt; -------------------------------------------------------------------------------------&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/app/src/main/application/META-INF/jboss-app.xml'&lt;br
      /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/app/src/main/config/mda-powitanie-ds.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/app/pom.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/core/target/classes/META-INF/ejb-jar.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/core/pom.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/pom.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/readme.txt'&lt;br /&gt; Output:
      'file:/c:/projs/sandbox/mda-powitanie/common/pom.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/src/main/config/mappings/WebMergeMappings.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/src/main/config/andromda.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/src/main/uml/mda-powitanie.uml2'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/pom.xml'&lt;br /&gt; Output:
      'file:/c:/projs/sandbox/mda-powitanie/web/src/main/properties/messages.properties'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/web/pom.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/web/target/mda-powitanie-web-1.0/WEB-INF/web.xml'&lt;br /&gt; -------------------------------------------------------------------------------------&lt;br /&gt; New application generated to --&gt; 'file:/c:/projs/sandbox/mda-powitanie/'&lt;br /&gt; Instructions for your new application --&gt;
      'file:/c:/projs/sandbox/mda-powitanie/readme.txt'&lt;br /&gt; -------------------------------------------------------------------------------------&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;br /&gt; [INFO] BUILD SUCCESSFUL&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;/pre&gt;Otwieram projekt &lt;span style="font-weight: bold;"&gt;mda-powitanie&lt;/span&gt; i projekty zależne w NB (Ctrl+Shift+O).
      Teraz jest czysto (z ostrzeżeniami, których udam, że nie zauważam).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SAc74-CL8KI/AAAAAAAAA0Q/M8vyrELU5Tg/s1600-h/powitanie-projects.gif"&gt;&lt;img src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SAc74-CL8KI/AAAAAAAAA0Q/M8vyrELU5Tg/s320/powitanie-projects.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5190182945478668450" /&gt;&lt;/a&gt;&lt;br /&gt;Jak w
      poprzednim projekcie w katalogu głównym znajduje się plik &lt;span style="font-weight: bold;"&gt;readme.txt&lt;/span&gt; (widoczny w NB w oknie &lt;span style="font-weight: bold;"&gt;Files&lt;/span&gt;, gdyż &lt;span style="font-weight: bold;"&gt;Projects&lt;/span&gt; ukrywa pliki, których nierozpoznaje).&lt;br /&gt;&lt;br /&gt;Wykonuję &lt;span style="font-weight: bold;"&gt;mvn install&lt;/span&gt; w wydaniu NB, tj. &lt;span style="font-weight: bold;"&gt;Clean and Build&lt;/span&gt;. W pobieranych
      zależnościach, podczas budowania, pojawiają się &lt;span style="font-weight: bold;"&gt;myfaces-impl-1.1.1&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;tomahawk-1.1.1&lt;/span&gt;, aż kończę z&lt;pre&gt; ------------------------------------------------------------------------&lt;br /&gt; [ERROR]BUILD ERROR&lt;br /&gt; ------------------------------------------------------------------------&lt;br /&gt; Failed to resolve artifact.&lt;br /&gt;&lt;br /&gt; Missing:&lt;br /&gt; ----------&lt;br
      /&gt; 1) org.andromda.profiles.uml14:andromda-profile-seam:xml.zip:1.0-SNAPSHOT&lt;br /&gt;&lt;br /&gt; Try downloading the file manually from the project website.&lt;br /&gt;&lt;br /&gt; Then, install it using the command:&lt;br /&gt; mvn install:install-file -DgroupId=org.andromda.profiles.uml14 -DartifactId=andromda-profile-seam \&lt;br /&gt; -Dversion=1.0-SNAPSHOT -Dpackaging=xml.zip -Dfile=/path/to/file&lt;br /&gt;&lt;br /&gt; Path to dependency:&lt;br /&gt; 1)
      pl.jaceklaskowski.powitanie:mda-powitanie-mda:pom:1.0&lt;br /&gt; 2) org.andromda.profiles.uml14:andromda-profile-seam:xml.zip:1.0-SNAPSHOT&lt;br /&gt;&lt;br /&gt; ----------&lt;br /&gt; 1 required artifact is missing.&lt;br /&gt;&lt;br /&gt; for artifact:&lt;br /&gt; pl.jaceklaskowski.powitanie:mda-powitanie-mda:pom:1.0&lt;br /&gt;&lt;br /&gt; from the specified remote repositories:&lt;br /&gt; central (http://repo1.maven.org/maven2),&lt;br /&gt; andromda
      (http://team.andromda.org/maven2)&lt;/pre&gt;Ech, znowu kłopoty. Kasuję projekt i zaczynam jeszcze raz, tyle że bez Seama i Web Services (po tylu problemach stałem się mniej wymagający).&lt;pre&gt; jlaskowski@work /cygdrive/c/projs/sandbox&lt;br /&gt; $ mvn org.andromda.maven.plugins:andromdapp-maven-plugin:3.2:generate&lt;br /&gt; [INFO] Scanning for projects...&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;br /&gt; [INFO] Building Maven Default
      Project&lt;br /&gt; [INFO] task-segment: [org.andromda.maven.plugins:andromdapp-maven-plugin:3.2:generate] (aggregator-style)&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;br /&gt; [INFO] [andromdapp:generate]&lt;br /&gt; log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester).&lt;br /&gt; log4j:WARN Please initialize the log4j system properly.&lt;br /&gt; INFO [AndroMDA] discovered andromdapp type --&gt; 'j2ee'&lt;br
      /&gt; INFO [AndroMDA] discovered andromdapp type --&gt; 'richclient'&lt;br /&gt;&lt;br /&gt; Please choose the type of application to generate [j2ee, richclient]&lt;br /&gt; j2ee&lt;br /&gt;&lt;br /&gt; Please enter the location in which your new application will be created (i.e. f:/java/development):&lt;br /&gt; c:/projs/sandbox&lt;br /&gt;&lt;br /&gt; Please enter your first and last name (i.e. Chad Brandon):&lt;br /&gt; Jacek Laskowski&lt;br /&gt;&lt;br /&gt; Which kind of modeling tool will you
      use? [uml1.4, uml2, emf-uml2]:&lt;br /&gt; emf-uml2&lt;br /&gt;&lt;br /&gt; Please enter the name of your J2EE project (i.e. Animal Quiz):&lt;br /&gt; Powitanie&lt;br /&gt;&lt;br /&gt; Please enter an id for your J2EE project (i.e. animalquiz):&lt;br /&gt; mda-powitanie&lt;br /&gt;&lt;br /&gt; Please enter a version for your project (i.e. 1.0-SNAPSHOT):&lt;br /&gt; 1.0&lt;br /&gt;&lt;br /&gt; Please enter the root package name for your J2EE project (i.e. org.andromda.samples.animalquiz):&lt;br /&gt;
      pl.jaceklaskowski.powitanie&lt;br /&gt;&lt;br /&gt; Would you like an EAR or standalone WAR? [ear, war]:&lt;br /&gt; ear&lt;br /&gt;&lt;br /&gt; Please enter the type of transactional/persistence cartridge to use [hibernate, ejb, ejb3, spring, none]:&lt;br /&gt; ejb3&lt;br /&gt;&lt;br /&gt; Please enter the database backend for the persistence layer &lt;br /&gt; [hypersonic, mysql, oracle, db2, informix, mssql, pointbase, postgres, sybase, sabdb, progress, derb&lt;br /&gt; derby&lt;br /&gt;&lt;br
      /&gt; Will your project need workflow engine capabilities? (it uses jBPM and Hibernate3)? [yes, no]:&lt;br /&gt; no&lt;br /&gt;&lt;br /&gt; Will your project have a web user interface? [yes, no]:&lt;br /&gt; yes&lt;br /&gt;&lt;br /&gt; Would you like your web user interface to use JSF or Struts? [jsf, struts]:&lt;br /&gt; jsf&lt;br /&gt;&lt;br /&gt; Would you like to use Facelets or JSP as your view type for JSF? [facelets, jsp]:&lt;br /&gt; facelets&lt;br /&gt;&lt;br /&gt; Would you like to use the
      JBoss Seam application framework? [yes, no]:&lt;br /&gt; no&lt;br /&gt;&lt;br /&gt; Would you like to be able to expose your services as web services? [yes, no]:&lt;br /&gt; no&lt;br /&gt; -------------------------------------------------------------------------------------&lt;br /&gt; G e n e r a t i n g A n d r o M D A P o w e r e d A p p l i c a t i o n&lt;br /&gt; -------------------------------------------------------------------------------------&lt;br /&gt; Output:
      'file:/c:/projs/sandbox/mda-powitanie/app/src/main/application/META-INF/jboss-app.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/app/src/main/config/mda-powitanie-ds.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/app/pom.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/core/target/classes/META-INF/ejb-jar.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/core/pom.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/pom.xml'&lt;br
      /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/readme.txt'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/common/pom.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/src/main/config/mappings/WebMergeMappings.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/src/main/config/andromda.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/src/main/uml/mda-powitanie.uml2'&lt;br /&gt; Output:
      'file:/c:/projs/sandbox/mda-powitanie/mda/pom.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/web/src/main/properties/messages.properties'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/web/pom.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/web/target/mda-powitanie-web-1.0/WEB-INF/web.xml'&lt;br /&gt; -------------------------------------------------------------------------------------&lt;br /&gt; New application generated to --&gt;
      'file:/c:/projs/sandbox/mda-powitanie/'&lt;br /&gt; Instructions for your new application --&gt; 'file:/c:/projs/sandbox/mda-powitanie/readme.txt'&lt;br /&gt; -------------------------------------------------------------------------------------&lt;/pre&gt;Ponownie otwarcie projektu w NB i Clean and Build, które kończy się:&lt;pre&gt; INFO [AndroMDA] completed model processing --&gt; TIME: 10.688[s], RESOURCES WRITTEN: 118&lt;br /&gt; [andromdapp:eclipse {execution: default}]&lt;br /&gt; Project file
      written --&gt; 'C:\projs\sandbox\mda-powitanie\.project'&lt;br /&gt; found project pl.jaceklaskowski.powitanie:mda-powitanie-common:jar:1.0&lt;br /&gt; found project pl.jaceklaskowski.powitanie:mda-powitanie-core:ejb:1.0&lt;br /&gt; found project pl.jaceklaskowski.powitanie:mda-powitanie-web:war:1.0&lt;br /&gt; ------------------------------------------------------------------------&lt;br /&gt; [ERROR]BUILD ERROR&lt;br /&gt;
      ------------------------------------------------------------------------&lt;br /&gt; Error creating eclipse configuration&lt;br /&gt;&lt;br /&gt; Embedded error: Unable to download the artifact from any repository&lt;br /&gt;&lt;br /&gt; Try downloading the file manually from the project website.&lt;br /&gt;&lt;br /&gt; Then, install it using the command:&lt;br /&gt; mvn install:install-file -DgroupId=org.jboss -DartifactId=jboss-remoting \&lt;br /&gt; -Dversion=4.0.4-GA -Dpackaging=jar
      -Dfile=/path/to/file&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; org.jboss:jboss-remoting:jar:4.0.4-GA&lt;br /&gt;&lt;br /&gt; from the specified remote repositories:&lt;br /&gt; central (http://repo1.maven.org/maven2),&lt;br /&gt; andromda (http://team.andromda.org/maven2)&lt;/pre&gt;co jednak mnie nie przeraża, bo sam projekt został zbudowany, a jedynie projekt eclipsowy się nie utworzył.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;..po chwili...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;No
      dobrze, dobrze - zajmę się i tym (co, jak się zaraz okaże, nie było właściwą decyzją). Do głównego pom.xml projektu dodaję&lt;pre&gt; &amp;lt;repository&gt;&lt;br /&gt; &amp;lt;id&gt;jboss.com&amp;lt;/id&gt;&lt;br /&gt; &amp;lt;name&gt;JBoss Repository&amp;lt;/name&gt;&lt;br /&gt; &amp;lt;url&gt;http://repository.jboss.com/maven2/&amp;lt;/url&gt;&lt;br /&gt; &amp;lt;/repository&gt;&lt;/pre&gt;i ponownie podchodzę do &lt;span style="font-weight: bold;"&gt;Clean and Build&lt;/span&gt;. Znowu błąd.
      Dziwne, ale tego &lt;span style="font-weight: bold;"&gt;jboss-remoting&lt;/span&gt; nie ma w repozytorium jboss.com. Jest jednak w wersji &lt;span style="font-weight: bold;"&gt;4.0.5-GA&lt;/span&gt; w &lt;a href="http://team.andromda.org/maven2/org/jboss/jboss-remoting/"&gt;repozytorium andromda (http://team.andromda.org/maven2)&lt;/a&gt;. Wniosek: wtyczka &lt;span style="font-weight: bold;"&gt;andromdapp-maven-plugin&lt;/span&gt; w wersji &lt;span style="font-weight: bold;"&gt;3.2&lt;/span&gt;
      tworzy projekt z przestarzałymi (i niedostępnymi) zależnościami. Na &lt;a href="http://galaxy.andromda.org/docs/andromda-maven-plugins/andromdapp-maven-plugin/index.html"&gt;stronie wtyczki andromdapp-maven-plugin&lt;/a&gt; data ostatniej publikacji to 01 Mar 2008 11:53 CET, jednakże jest to dla wersji 3.3-SNAPSHOT. Nie ma wielkiego wyboru jak popróbować jej.&lt;br /&gt;&lt;br /&gt;Na szczęście projekt AndroMDA przewidział taką sytuację, że chciałbym skorzystać z wtyczki poza projektem, gdzie w
      pom.xml mógłbym zdefiniować zależność i udostępnił gotowy plik zip z koniecznymi artefaktami mavenowymi do rozpakowania w lokalnym repozytorium mavena.&lt;pre&gt; jlaskowski@work /cygdrive/c/projs/sandbox&lt;br /&gt; $ cd c:/.m2&lt;br /&gt;&lt;br /&gt; jlaskowski@work /cygdrive/c/.m2&lt;br /&gt; $ wget -c \&lt;br /&gt; http://team.andromda.org/maven2/org/andromda/maven/plugins/\&lt;br /&gt; andromdapp-maven-plugin/3.3-SNAPSHOT/andromdapp-maven-plugin-install-3.3-SNAPSHOT.zip&lt;br /&gt; ...&lt;br
      /&gt; 12:13:49 (153.83 KB/s) - `andromdapp-maven-plugin-install-3.3-SNAPSHOT.zip' saved [80881/80881]&lt;br /&gt;&lt;br /&gt; jlaskowski@work /cygdrive/c/.m2&lt;br /&gt; $ jar -xvf andromdapp-maven-plugin-install-3.3-SNAPSHOT.zip&lt;br /&gt; created: org/&lt;br /&gt; created: org/andromda/&lt;br /&gt; created: org/andromda/maven/&lt;br /&gt; created: org/andromda/maven/plugins/&lt;br /&gt; created: org/andromda/maven/plugins/andromdapp-maven-plugin/&lt;br /&gt; created:
      org/andromda/maven/plugins/andromdapp-maven-plugin/3.3-SNAPSHOT/&lt;br /&gt; inflated: org/andromda/maven/plugins/andromdapp-maven-plugin/3.3-SNAPSHOT/andromdapp-maven-plugin-3.3-SNAPSHOT.jar&lt;br /&gt; inflated: org/andromda/maven/plugins/andromdapp-maven-plugin/3.3-SNAPSHOT/andromdapp-maven-plugin-3.3-SNAPSHOT.pom&lt;br /&gt; inflated: org/andromda/maven/plugins/andromdapp-maven-plugin/maven-metadata-local.xml&lt;/pre&gt;Gotowe! Znowu podchodzę do stworzenia projektu z wtyczką
      andromdapp-maven-plugin w wersji 3.3-SNAPSHOT.&lt;pre&gt; jlaskowski@work /cygdrive/c/projs/sandbox&lt;br /&gt; $ mvn org.andromda.maven.plugins:andromdapp-maven-plugin:3.3-SNAPSHOT:generate&lt;br /&gt; [INFO] Scanning for projects...&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;br /&gt; [ERROR] BUILD ERROR&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;br /&gt; [INFO] Failed to resolve artifact.&lt;br
      /&gt;&lt;br /&gt; GroupId: org.andromda.maven.plugins&lt;br /&gt; ArtifactId: andromda-maven-plugins&lt;br /&gt; Version: 3.3-SNAPSHOT&lt;br /&gt;&lt;br /&gt; Reason: Unable to download the artifact from any repository&lt;br /&gt;&lt;br /&gt; org.andromda.maven.plugins:andromda-maven-plugins:pom:3.3-SNAPSHOT&lt;br /&gt;&lt;br /&gt; from the specified remote repositories:&lt;br /&gt; ibiblio.org (http://repo1.maven.org/maven2)&lt;/pre&gt;Tego już za wiele! Wracam do wtyczki w wersji 3.2 i rezygnuję z
      EJB3, co powinno znieść wymaganie odnośnie jakichkolwiek zależności jbossowych.&lt;pre&gt; jlaskowski@work /cygdrive/c/projs/sandbox&lt;br /&gt; $ mvn org.andromda.maven.plugins:andromdapp-maven-plugin:3.2:generate&lt;br /&gt; [INFO] Scanning for projects...&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;br /&gt; [INFO] Building Maven Default Project&lt;br /&gt; [INFO] task-segment: [org.andromda.maven.plugins:andromdapp-maven-plugin:3.2:generate]
      (aggregator-style)&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;br /&gt; [INFO] [andromdapp:generate]&lt;br /&gt; log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester).&lt;br /&gt; log4j:WARN Please initialize the log4j system properly.&lt;br /&gt; INFO [AndroMDA] discovered andromdapp type --&gt; 'j2ee'&lt;br /&gt; INFO [AndroMDA] discovered andromdapp type --&gt; 'richclient'&lt;br /&gt;&lt;br /&gt; Please choose
      the type of application to generate [j2ee, richclient]&lt;br /&gt; j2ee&lt;br /&gt;&lt;br /&gt; Please enter the location in which your new application will be created (i.e. f:/java/development):&lt;br /&gt; c:/projs/sandbox&lt;br /&gt;&lt;br /&gt; Please enter your first and last name (i.e. Chad Brandon):&lt;br /&gt; Jacek Laskowski&lt;br /&gt;&lt;br /&gt; Which kind of modeling tool will you use? [uml1.4, uml2, emf-uml2]:&lt;br /&gt; emf-uml2&lt;br /&gt;&lt;br /&gt; Please enter the name of your
      J2EE project (i.e. Animal Quiz):&lt;br /&gt; Powitanie&lt;br /&gt;&lt;br /&gt; Please enter an id for your J2EE project (i.e. animalquiz):&lt;br /&gt; mda-powitanie&lt;br /&gt;&lt;br /&gt; Please enter a version for your project (i.e. 1.0-SNAPSHOT):&lt;br /&gt; 1.0&lt;br /&gt;&lt;br /&gt; Please enter the root package name for your J2EE project (i.e. org.andromda.samples.animalquiz):&lt;br /&gt; pl.jaceklaskowski.powitanie&lt;br /&gt;&lt;br /&gt; Would you like an EAR or standalone WAR? [ear,
      war]:&lt;br /&gt; ear&lt;br /&gt;&lt;br /&gt; Please enter the type of transactional/persistence cartridge to use [hibernate, ejb, ejb3, spring, none]:&lt;br /&gt; none&lt;br /&gt;&lt;br /&gt; Will your project need workflow engine capabilities? (it uses jBPM and Hibernate3)? [yes, no]:&lt;br /&gt; no&lt;br /&gt;&lt;br /&gt; Will your project have a web user interface? [yes, no]:&lt;br /&gt; yes&lt;br /&gt;&lt;br /&gt; Would you like your web user interface to use JSF or Struts? [jsf, struts]:&lt;br
      /&gt; jsf&lt;br /&gt;&lt;br /&gt; Would you like to use Facelets or JSP as your view type for JSF? [facelets, jsp]:&lt;br /&gt; jsp&lt;br /&gt;&lt;br /&gt; Would you like to be able to expose your services as web services? [yes, no]:&lt;br /&gt; no&lt;br /&gt; -------------------------------------------------------------------------------------&lt;br /&gt; G e n e r a t i n g A n d r o M D A P o w e r e d A p p l i c a t i o n&lt;br /&gt;
      -------------------------------------------------------------------------------------&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/app/src/main/application/META-INF/jboss-app.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/app/src/main/config/mda-powitanie-ds.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/app/pom.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/pom.xml'&lt;br /&gt; Output:
      'file:/c:/projs/sandbox/mda-powitanie/readme.txt'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/common/pom.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/src/main/config/mappings/WebMergeMappings.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/src/main/config/andromda.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/src/main/uml/mda-powitanie.uml2'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/mda/pom.xml'&lt;br /&gt;
      Output: 'file:/c:/projs/sandbox/mda-powitanie/web/src/main/properties/messages.properties'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/web/pom.xml'&lt;br /&gt; Output: 'file:/c:/projs/sandbox/mda-powitanie/web/target/mda-powitanie-web-1.0/WEB-INF/web.xml'&lt;br /&gt; -------------------------------------------------------------------------------------&lt;br /&gt; New application generated to --&gt; 'file:/c:/projs/sandbox/mda-powitanie/'&lt;br /&gt; Instructions for your new application
      --&gt; 'file:/c:/projs/sandbox/mda-powitanie/readme.txt'&lt;br /&gt; -------------------------------------------------------------------------------------&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;br /&gt; [INFO] BUILD SUCCESSFUL&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;/pre&gt;Ponownie Clean and Build w NB.&lt;pre&gt;
      ------------------------------------------------------------------------&lt;br /&gt; [ERROR]BUILD ERROR&lt;br /&gt; ------------------------------------------------------------------------&lt;br /&gt; Failed to resolve artifact.&lt;br /&gt;&lt;br /&gt; Missing:&lt;br /&gt; ----------&lt;br /&gt; 1) org.andromda.cartridges:andromda-jsf-cartridge-components:jar:unknown&lt;br /&gt;&lt;br /&gt; Try downloading the file manually from the project website.&lt;br /&gt;&lt;br /&gt; Then, install it using the
      command:&lt;br /&gt; mvn install:install-file -DgroupId=org.andromda.cartridges -DartifactId=andromda-jsf-cartridge-components \&lt;br /&gt; -Dversion=unknown -Dpackaging=jar -Dfile=/path/to/file&lt;br /&gt;&lt;br /&gt; Path to dependency:&lt;br /&gt; 1) pl.jaceklaskowski.powitanie:mda-powitanie-web:war:1.0&lt;br /&gt; 2) org.andromda.cartridges:andromda-jsf-cartridge-components:jar:unknown&lt;br /&gt;&lt;br /&gt; 2) oracle.adf.view.faces:adf-faces-api:jar:unknown&lt;br /&gt;&lt;br /&gt; Try
      downloading the file manually from the project website.&lt;br /&gt;&lt;br /&gt; Then, install it using the command:&lt;br /&gt; mvn install:install-file -DgroupId=oracle.adf.view.faces -DartifactId=adf-faces-api \&lt;br /&gt; -Dversion=unknown -Dpackaging=jar -Dfile=/path/to/file&lt;br /&gt;&lt;br /&gt; Path to dependency:&lt;br /&gt; 1) pl.jaceklaskowski.powitanie:mda-powitanie-web:war:1.0&lt;br /&gt; 2) oracle.adf.view.faces:adf-faces-api:jar:unknown&lt;br /&gt;&lt;br /&gt; 3)
      org.apache.myfaces:tomahawk:jar:unknown&lt;br /&gt;&lt;br /&gt; Try downloading the file manually from the project website.&lt;br /&gt;&lt;br /&gt; Then, install it using the command:&lt;br /&gt; mvn install:install-file -DgroupId=org.apache.myfaces -DartifactId=tomahawk \&lt;br /&gt; -Dversion=unknown -Dpackaging=jar -Dfile=/path/to/file&lt;br /&gt;&lt;br /&gt; Path to dependency:&lt;br /&gt; 1) pl.jaceklaskowski.powitanie:mda-powitanie-web:war:1.0&lt;br /&gt; 2)
      org.apache.myfaces:tomahawk:jar:unknown&lt;br /&gt;&lt;br /&gt; 4) org.apache.myfaces:myfaces-api:jar:unknown&lt;br /&gt;&lt;br /&gt; Try downloading the file manually from the project website.&lt;br /&gt;&lt;br /&gt; Then, install it using the command:&lt;br /&gt; mvn install:install-file -DgroupId=org.apache.myfaces -DartifactId=myfaces-api \&lt;br /&gt; -Dversion=unknown -Dpackaging=jar -Dfile=/path/to/file&lt;br /&gt;&lt;br /&gt; Path to dependency:&lt;br /&gt; 1)
      pl.jaceklaskowski.powitanie:mda-powitanie-web:war:1.0&lt;br /&gt; 2) org.apache.myfaces:myfaces-api:jar:unknown&lt;br /&gt;&lt;br /&gt; ----------&lt;br /&gt; 4 required artifacts are missing.&lt;br /&gt;&lt;br /&gt; for artifact:&lt;br /&gt; pl.jaceklaskowski.powitanie:mda-powitanie-web:war:1.0&lt;br /&gt;&lt;br /&gt; from the specified remote repositories:&lt;br /&gt; central (http://repo1.maven.org/maven2),&lt;br /&gt; andromda (http://team.andromda.org/maven2)&lt;/pre&gt;Teraz jest jeszcze
      gorzej. Na dzisiaj koniec tego ewaluowania AndroMDA. Teraz już wiem, dlaczego tak niewielu korzysta z MDA. Fajne w założeniach, ale po prostu nie działa (albo ja coś pokręciłem i zamiast dać się prowadzić za rękę to przekombinowałem). Może ktoś ma jakieś sugestie gdzie, co i jak należałoby wykonać, aby skorzystać jednak z AndroMDA? Jakieś doświadczenia z narzędziem, albo jego konkurentami mile widziane.&lt;br /&gt;&lt;br /&gt;I pytanie konkursowe: &lt;span style="font-weight: bold;"&gt;Co oznacza
      skrót MDA?&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;"&lt;span style="font-weight: bold;"&gt;M&lt;/span&gt;oja &lt;span style="font-weight: bold;"&gt;D&lt;/span&gt;roga &lt;span style="font-weight: bold;"&gt;A&lt;/span&gt;gatko!" (szczęśliwi, którzy mogą tak tytułować listy do swej ukochanej)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;M&lt;/span&gt;am &lt;span style="font-weight: bold;"&gt;D&lt;/span&gt;ość, &lt;span style="font-weight: bold;"&gt;A&lt;/span&gt;le się nie
      poddaję&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;M&lt;/span&gt;odel-&lt;span style="font-weight: bold;"&gt;D&lt;/span&gt;riven &lt;span style="font-weight: bold;"&gt;A&lt;/span&gt;rchitecture&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;M&lt;/span&gt;an&lt;span style="font-weight: bold;"&gt;D&lt;/span&gt;aryn&lt;span style="font-weight: bold;"&gt;A&lt;/span&gt; gwarowo&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Nagród nie ma.</description>
      <pubDate>Thu, 17 Apr 2008 12:24:09 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Pierwsze kroki z UML w NetBeans 6.1</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-336698523024033492</guid>
      <link>http://jlaskowski.blogspot.com/2008/04/pierwsze-kroki-z-uml-w-netbeans-61.html</link>
      <description>&lt;span style="font-weight: bold;"&gt;UML (Unified Modelling Language)&lt;/span&gt; nigdy nie należał do moich podstawowych narzędzi programistycznych, którymi posługiwałem się podczas tworzenia oprogramowania. Ostatnimi jednak czasy odczuwam niedosyt różnorodności sposobów przedstawiania swoich myśli i zauważam, że mowa (jakkolwiek wyćwiczona) nierzadko przedstawia je właściwie. UML jest językiem obrazowania idei i słowo &lt;span style="font-style: italic;"&gt;obrazowanie&lt;/span&gt;,
      jakkolwiek nie stosowane szeroko w tym kontekście, jak najbardziej mi tu pasuje i wyraża, co autor miał na myśli. Język UML jest sposobem wizualnego przedstawiania myśli i pomaga w ich relacji innym. Warto się zainteresować UMLem i mimo nieczęstego użycia w naszych projektach, zacząć go stosować (nawet mimo braku jego użycia przez cały zespół projektowy, gdyż dobre rzeczy same się reklamują i raz zauważony w użyciu UML może stać się podstawowym językiem wymiany informacji). Więcej o UML na stronach
      "producenta" - &lt;a href="http://www.uml.org"&gt;http://www.uml.org&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Dzisiaj miałem przyjemność przeczytać wpis &lt;a href="http://netbeanside61.blogspot.com/2008/03/expectation-driven-developement-in.html"&gt;Expectation driven developement in NetBeans IDE 6.1 Beta&lt;/a&gt;, gdzie autor zastosował umlowy diagram klas do zademonstrowania, co będzie tworzył, a dalej, w komentarzach, znalazłem informację o wsparciu UMLa przez NetBeans 6.1. Dodając do tego moje (wciąż
      bierne) zainteresowanie UMLem i trwający konkurs &lt;a href="http://www.netbeans.org/competition/blog-contest.html"&gt;NetBeans IDE 6.1 Beta Blogging Contest&lt;/a&gt; mogłem ponownie upiec dwie pieczenie na jednym ogniu - zapoznać się z UMLem i sprawdzić jego wsparcie w NetBeans 6.1, a w dodatku zgłosić mój wpis w konkursie (to w sumie daje aż 3 pieczenie na jednym ogniu!).&lt;br /&gt;&lt;br /&gt;Zacząłem od lektury artykułu w sekcji UML NetBeansa - &lt;a
      href="http://www.netbeans.org/kb/60/uml/why-model.html"&gt;Why Model With UML?&lt;/a&gt;, gdzie napisano &lt;span style="font-style: italic;"&gt;This article serves as a primer for the basic concepts of UML&lt;/span&gt; oraz &lt;span style="font-style: italic;"&gt;This article is written for those engineers who can never find time to model a project before starting to code and for those engineers who have not yet considered creating models of their systems prior to coding them&lt;/span&gt;, aż w
      końcu &lt;span style="font-style: italic;"&gt;This article presents some methods and strategies to help you be more efficient and possibly even save time&lt;/span&gt;. To jakby stworzone specjalnie dla mnie! Po 10 minutach miałem go za sobą. Mimo, że wiele tez przedstawionych w artykule było mi znanych, artykuł czytałem z wielkim zainteresowaniem. Obawiałem się początkowo, że będzie trochę przydługi, ale był w sam raz i zaprezentował UML w sposób nie pozostawiający złudzeń, że jest to obowiązkowy
      sposób na rozpoczęcie projektu, każdego projektu.&lt;br /&gt;&lt;br /&gt;Kolejny artykuł w serii wprowadzenia UMLa to &lt;a href="http://www.netbeans.org/kb/60/uml/fe.html"&gt;UML: Developing Applications&lt;/a&gt;. Trochę mnie przeraziło &lt;span style="font-style: italic;"&gt;Expected duration: 25 minutes&lt;/span&gt;, ale pomyślałem, że skrócę tu i tam, abym jedynie rozeznał się gdzie i jak zacząć, aby ostatecznie przeczytać artykuł i samemu coś stworzyć. Podczas lektury artykułu zdecydowałem się
      go nieznacznie uatrakcyjnić, w ten sposób, że w artykule tworzona jest aplikacja desktopowa, a ja postanowiłem stworzyć aplikację webową. Oni desktopową, ja webową.&lt;br /&gt;&lt;br /&gt;Nie siląć się na wymyślny przykład postanowiłem stworzyć aplikację webową, która będzie witała użytkownika w języku, który jest przez niego wybrany jako domyślny w przeglądarce.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl+Shift+N&lt;/span&gt; i z kategorii &lt;span style="font-weight:
      bold;"&gt;Web&lt;/span&gt; wybrałem &lt;span style="font-weight: bold;"&gt;Web Application&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Podałem dane projektu:&lt;br /&gt;&lt;br /&gt;Project Name: &lt;span style="font-weight: bold;"&gt;PowitanieWebApp&lt;/span&gt;&lt;br /&gt;Server: &lt;span style="font-weight: bold;"&gt;GlassFish V2&lt;/span&gt;&lt;br /&gt;Context Path: &lt;span style="font-weight: bold;"&gt;/powitanie&lt;/span&gt;&lt;br /&gt;Frameworks: &lt;span style="font-weight: bold;"&gt;JavaServer
      Faces&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I zatwierdziłem je &lt;span style="font-weight: bold;"&gt;Finish&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl+Shift+N&lt;/span&gt; i z kategorii &lt;span style="font-weight: bold;"&gt;UML&lt;/span&gt; wybrałem &lt;span style="font-weight: bold;"&gt;Java-Platform Model&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://3.bp.blogspot.com/_wSeV_DMR2uA/SAZsj-CL79I/AAAAAAAAAys/eMLFYeMnU8s/s1600-h/java-platform-model.gif"&gt;&lt;img src="http://3.bp.blogspot.com/_wSeV_DMR2uA/SAZsj-CL79I/AAAAAAAAAys/eMLFYeMnU8s/s320/java-platform-model.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5189954985794465746" /&gt;&lt;/a&gt;&lt;br /&gt;Opis tego typu projektu - &lt;span style="font-weight: bold;"&gt;Java-Platform
      Model&lt;/span&gt; - bardzo wymyślny:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Creates a platform-dependent modeling project in the system with empty containers for your model and elements. As you create and populate your model, Java modeling (business) rules are applied to the model.&lt;/span&gt;&lt;br /&gt;Nic nie zrozumiałem!&lt;br /&gt;&lt;br /&gt;Wciskam &lt;span style="font-weight: bold;"&gt;Next &gt;&lt;/span&gt; i jako w polu &lt;span style="font-weight:
      bold;"&gt;Project Name&lt;/span&gt; wpisuję &lt;span style="font-weight: bold;"&gt;PowitanieWebAppUML&lt;/span&gt;. &lt;span style="font-weight: bold;"&gt;Finish&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Wybieram &lt;span style="font-weight: bold;"&gt;Class Diagram&lt;/span&gt; o nazwie &lt;span style="font-weight: bold;"&gt;PowitanieClassDiagram&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://2.bp.blogspot.com/_wSeV_DMR2uA/SAZs5uCL7-I/AAAAAAAAAy0/0Z-KNMrzKHY/s1600-h/create-new-diagram.gif"&gt;&lt;img src="http://2.bp.blogspot.com/_wSeV_DMR2uA/SAZs5uCL7-I/AAAAAAAAAy0/0Z-KNMrzKHY/s320/create-new-diagram.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5189955359456620514" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Finish&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Pojawi
      się edytor UML z diagramem klas. Po prawej stronie pojawi się paleta elementów UML.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SAZtFeCL7_I/AAAAAAAAAy8/6gg9SmUWXkQ/s1600-h/palette.gif"&gt;&lt;img src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SAZtFeCL7_I/AAAAAAAAAy8/6gg9SmUWXkQ/s320/palette.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5189955561320083442" /&gt;&lt;/a&gt;&lt;br
      /&gt;Utworzyłem klasę &lt;span style="font-weight: bold;"&gt;Powitanie&lt;/span&gt; z mapą pozdrowień (zaznaczam element &lt;span style="font-weight: bold;"&gt;Class&lt;/span&gt; i przeciągam do edytora. &lt;span style="font-weight: bold;"&gt;Enter&lt;/span&gt; i podaję nazwę &lt;span style="font-weight: bold;"&gt;Powitanie&lt;/span&gt;). Tworzę pakiet &lt;span style="font-weight: bold;"&gt;pl.jaceklaskowski.jsf.uml&lt;/span&gt; z użyciem elementu &lt;span style="font-weight:
      bold;"&gt;Package&lt;/span&gt;. Ciekawym podejściem jest umożliwienie stworzenia wielu elementów danego typu (na przykład pakietów) i nadawanie im nazw przez Enter, czyli lewy przycisk myszy, Enter, wpisuję nazwę i ponownie Enter, i tak z kolejnymi elementami.&lt;br /&gt;&lt;br /&gt;Definiuję atrybut &lt;span style="font-weight: bold;"&gt;Map&amp;lt;String, String&gt; powitania = new HashMap&amp;lt;String, String&gt;()&lt;/span&gt; i kasuję operację &lt;span style="font-weight:
      bold;"&gt;setPowitania&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Dodałem operację (metodę) &lt;span style="font-weight: bold;"&gt;addPowitanie(String jezyk, String powitanie)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SAZtmeCL8AI/AAAAAAAAAzE/-eHHcthOeHk/s1600-h/powitanie-class-diagram.gif"&gt;&lt;img src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SAZtmeCL8AI/AAAAAAAAAzE/-eHHcthOeHk/s320/powitanie-class-diagram.gif" alt="" style="display: block; margin: 0px auto 10px;
      text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5189956128255766530" /&gt;&lt;/a&gt;&lt;br /&gt;Prawym przyciskiem na projekcie &lt;span style="font-weight: bold;"&gt;PowitanieWebAppUML&lt;/span&gt; wybieram menu &lt;span style="font-weight: bold;"&gt;Generate Code&lt;/span&gt;, gdzie jako &lt;span style="font-weight: bold;"&gt;Target Project&lt;/span&gt; podaję &lt;span style="font-weight: bold;"&gt;PowitanieWebApp&lt;/span&gt;. Zatwierdzam &lt;span
      style="font-weight: bold;"&gt;OK&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Projekt &lt;span style="font-weight: bold;"&gt;PowitanieWebApp&lt;/span&gt; zostanie oznaczony jako błędny (czerwona ikona na nazwie projektu), gdyż Map oraz HashMap są podane bez ich pakietów. Otwieram &lt;span style="font-weight: bold;"&gt;Powitanie.java&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Ctrl+Shift+I&lt;/span&gt; i &lt;span style="font-weight: bold;"&gt;Enter&lt;/span&gt;. Po chwili NetBeans rozpozna zmiany i
      zniesie komunikat błędu. Jest czysto.&lt;br /&gt;&lt;br /&gt;Dodaję ciało do konstruktora i metody addPowitanie. Ostatecznie klasa prezentuje się następująco:&lt;pre&gt; package pl.jaceklaskowski.jsf.uml;&lt;br /&gt;&lt;br /&gt; import java.util.HashMap;&lt;br /&gt; import java.util.Map;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; // &lt;br /&gt; // #[regen=yes,id=DCE.0C3BC662-D50C-31DA-16B7-26AFB9E13435]&lt;br /&gt; // &lt;br /&gt; public class Powitanie {&lt;br /&gt;&lt;br /&gt; // &lt;br /&gt; //
      #[regen=yes,id=DCE.20E0A115-46D3-0681-089A-41017816B6C6]&lt;br /&gt; // &lt;br /&gt; private Map powitania = new HashMap();&lt;br /&gt;&lt;br /&gt; // &lt;br /&gt; // #[regen=yes,id=DCE.5585E6DF-BAC1-C496-0665-DEC6A9BA153E]&lt;br /&gt; // &lt;br /&gt; public Powitanie () {&lt;br /&gt; // zdefiniuj kilka powitań&lt;br /&gt; powitania.put("en", "Hi!");&lt;br /&gt; powitania.put("pl", "Cześć!");&lt;br /&gt; powitania.put("de", "MoinMoin!");&lt;br /&gt; powitania.put("ru", "Zdrastwujcie!");&lt;br /&gt;
      }&lt;br /&gt;&lt;br /&gt; // &lt;br /&gt; // #[regen=yes,id=DCE.5AB5D39E-7AF1-D127-881C-3F9F766AE597]&lt;br /&gt; // &lt;br /&gt; public void addPowitanie (String jezyk, String powitanie) {&lt;br /&gt; powitania.put(jezyk, powitanie);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; // &lt;br /&gt; // #[regen=yes,regenBody=yes,id=DCE.383F3A78-B7A8-812E-E5D4-B13087852CFE]&lt;br /&gt; // &lt;br /&gt; public Map getPowitania () {&lt;br /&gt; return powitania;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; }&lt;/pre&gt;Owe
      znaczniki &amp;lt;editor-fold&gt; są związane z powiązaniem klasy z diagramem UML.&lt;br /&gt;&lt;br /&gt;Pora na zdefiniowanie nowopowstałej klasy jako ziarna zarządzanego JSF. Tutaj niestety jedynym sposobem jest edycja pliku konfiguracyjnego aplikacji jsf - &lt;span style="font-weight: bold;"&gt;faces-config.xml&lt;/span&gt;. Ale moment! Niespodzianka! Możliwość definiowania ziaren jest możliwa poprzez &lt;span style="font-weight: bold;"&gt;Add Managed Bean...&lt;/span&gt; w widoku XML edytora
      faces-config.xml. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_wSeV_DMR2uA/SAZuI-CL8BI/AAAAAAAAAzM/qC1M-7W44Jw/s1600-h/faces-config.gif"&gt;&lt;img src="http://3.bp.blogspot.com/_wSeV_DMR2uA/SAZuI-CL8BI/AAAAAAAAAzM/qC1M-7W44Jw/s320/faces-config.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5189956720961253394" /&gt;&lt;/a&gt;&lt;br /&gt;Tego wcześniej nie wiedziałem, ani nie napotkałem w
      artykułach netbeansowych. Choćby dlatego warto było zacząć naukę UML (i już mi się będzie UML w wykonaniu NetBeans mile kojarzył ;-))&lt;br /&gt;&lt;br /&gt;Definiuję nowe ziarno &lt;span style="font-weight: bold;"&gt;powitanie&lt;/span&gt;, wybieram klasę z listy &lt;span style="font-weight: bold;"&gt;Browse...&lt;/span&gt; o zasięgu &lt;span style="font-weight: bold;"&gt;session&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://2.bp.blogspot.com/_wSeV_DMR2uA/SAZuXuCL8CI/AAAAAAAAAzU/RshBXbQpBUs/s1600-h/add-managed-bean.gif"&gt;&lt;img src="http://2.bp.blogspot.com/_wSeV_DMR2uA/SAZuXuCL8CI/AAAAAAAAAzU/RshBXbQpBUs/s320/add-managed-bean.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5189956974364323874" /&gt;&lt;/a&gt;&lt;br /&gt;Zatwierdzam przyciskiem &lt;span style="font-weight: bold;"&gt;Add&lt;/span&gt;.&lt;br
      /&gt;&lt;br /&gt;Plik faces-config.xml prezentuje się następująco:&lt;pre&gt; &amp;lt;?xml version='1.0' encoding='UTF-8'?&gt;&lt;br /&gt; &amp;lt;faces-config version="1.2" &lt;br /&gt; xmlns="http://java.sun.com/xml/ns/javaee" &lt;br /&gt; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" &lt;br /&gt; xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"&gt;&lt;br /&gt; &amp;lt;managed-bean&gt;&lt;br /&gt;
      &amp;lt;managed-bean-name&gt;powitanie&amp;lt;/managed-bean-name&gt;&lt;br /&gt; &amp;lt;managed-bean-class&gt;pl.jaceklaskowski.jsf.uml.Powitanie&amp;lt;/managed-bean-class&gt;&lt;br /&gt; &amp;lt;managed-bean-scope&gt;session&amp;lt;/managed-bean-scope&gt;&lt;br /&gt; &amp;lt;/managed-bean&gt;&lt;br /&gt; &amp;lt;/faces-config&gt;&lt;/pre&gt;Zmieniam stronę welcomeJSF.jsp dodając wywołanie ziarna:&lt;pre&gt; &amp;lt;%@page contentType="text/html"%&gt;&lt;br /&gt; &amp;lt;%@page
      pageEncoding="UTF-8"%&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%&gt;&lt;br /&gt; &amp;lt;%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&lt;br /&gt; "http://www.w3.org/TR/html4/loose.dtd"&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;html&gt;&lt;br /&gt; &amp;lt;head&gt;&lt;br /&gt; &amp;lt;meta http-equiv="Content-Type" content="text/html;
      charset=UTF-8"&gt;&lt;br /&gt; &amp;lt;title&gt;Pozdrowienia&amp;lt;/title&gt;&lt;br /&gt; &amp;lt;/head&gt;&lt;br /&gt; &amp;lt;body&gt;&lt;br /&gt; &amp;lt;f:view&gt;&lt;br /&gt; Powitanie w języku &amp;lt;b&gt;${pageContext.request.locale.language}&amp;lt;/b&gt; brzmi...&lt;br /&gt; &amp;lt;h1&gt;&amp;lt;h:outputText value="#{powitanie.powitania[request.locale.language]}" /&gt;&amp;lt;/h1&gt;&lt;br /&gt; &amp;lt;/f:view&gt;&lt;br /&gt; &amp;lt;/body&gt;&lt;br /&gt;
      &amp;lt;/html&gt;&lt;/pre&gt;Zmiana polega na wywołaniu metody &lt;span style="font-weight: bold;"&gt;getPowitania()&lt;/span&gt; ziarna &lt;span style="font-weight: bold;"&gt;powitanie&lt;/span&gt; zwracającej mapę, której kluczem jest język, który w JSF uzyskuje się poprzez &lt;span style="font-weight: bold;"&gt;request.locale.language&lt;/span&gt;, podczas gdy w JSP za pomocą &lt;span style="font-weight: bold;"&gt;pageContext.request.locale.language&lt;/span&gt; (to są dwa różne języki EL
      rozróżniane przez znaki # oraz $, odpowiednio).&lt;br /&gt;&lt;br /&gt;Najwyższy czas przekonać się o działaniu mojej aplikacji webowej. Wciskam &lt;span style="font-weight: bold;"&gt;F6&lt;/span&gt; i po chwili moim oczom ukazuje się...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SAZuvOCL8DI/AAAAAAAAAzc/j02y-EeENC4/s1600-h/hi.gif"&gt;&lt;img src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SAZuvOCL8DI/AAAAAAAAAzc/j02y-EeENC4/s320/hi.gif" alt="" style="display: block; margin:
      0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5189957378091249714" /&gt;&lt;/a&gt;&lt;br /&gt;Zmiana języka na &lt;span style="font-weight: bold;"&gt;pl&lt;/span&gt; (w Firefox - &lt;span style="font-weight: bold;"&gt;Tools &gt; Options... &gt; Advanced &gt; General &gt; Languages&lt;/span&gt;) i &lt;span style="font-weight: bold;"&gt;F5&lt;/span&gt; (odświeżenie strony) i&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SAZu-eCL8EI/AAAAAAAAAzk/e70RSlxp_rI/s1600-h/czesc.gif"&gt;&lt;img src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SAZu-eCL8EI/AAAAAAAAAzk/e70RSlxp_rI/s320/czesc.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5189957640084254786" /&gt;&lt;/a&gt;&lt;br /&gt;A na &lt;span style="font-weight: bold;"&gt;ru&lt;/span&gt; (rosyjski)&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://3.bp.blogspot.com/_wSeV_DMR2uA/SAZvG-CL8FI/AAAAAAAAAzs/mzf_VoH9CPE/s1600-h/zdrastwujcie.gif"&gt;&lt;img src="http://3.bp.blogspot.com/_wSeV_DMR2uA/SAZvG-CL8FI/AAAAAAAAAzs/mzf_VoH9CPE/s320/zdrastwujcie.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5189957786113142866" /&gt;&lt;/a&gt;&lt;br /&gt;Działa! Niemiecki pozostawiam jako ćwiczenie domowe.&lt;br /&gt;&lt;br /&gt;Czy to zademonstrowało
      UMLa w wykonaniu NetBeans 6.1 w pełni? Wątpię. Kolejnym razem jednak znowu coś spróbuję i może w ten sposób poznam UML lepiej. Może nawet zacznę go regularnie używać?&lt;br /&gt;&lt;br /&gt;Na zakończenie sprawdzę jeszcze co udostępnia NetBeans w demonstracyjnych aplikacjach - &lt;span style="font-weight: bold;"&gt;Ctrl+Shift+N&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Samples &gt; UML&lt;/span&gt; i jest jedynie &lt;span style="font-weight: bold;"&gt;UML Bank App
      Sample&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_wSeV_DMR2uA/SAZvXuCL8GI/AAAAAAAAAz0/suCzU8WbDFU/s1600-h/uml-samples.gif"&gt;&lt;img src="http://2.bp.blogspot.com/_wSeV_DMR2uA/SAZvXuCL8GI/AAAAAAAAAz0/suCzU8WbDFU/s320/uml-samples.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5189958073875951714" /&gt;&lt;/a&gt;&lt;br /&gt;Niewiele. Na szczęście przykład działa, chociaż
      odpowiada temu, co właśnie przeczytałem. Potrzebuję artykułu o tworzeniu aplikacji webowych z użyciem UML. Choćby niewielki, który wskaże, czy w ogóle ma to sens. Wciąż poszukuję...&lt;br /&gt;&lt;br /&gt;I pytanie konkursowe (w trwającym konkursie bez nagród): &lt;span style="font-weight: bold;"&gt;Co to jest UML?&lt;/span&gt;</description>
      <pubDate>Thu, 17 Apr 2008 06:02:04 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Tworzenie wtyczek Maven 2 z NetBeans IDE 6.1</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-4730006877461873510</guid>
      <link>http://jlaskowski.blogspot.com/2008/04/tworzenie-wtyczek-maven-2-z-netbeans.html</link>
      <description>Zainspirowany wpisem &lt;a href="http://piotrkontek.wordpress.com/2008/04/11/wlasny-plugin-mavena/"&gt;Własny plugin mavena&lt;/a&gt; postanowiłem spróbować swoich sił na polu tworzenia wtyczek dla Apache Maven 2 i po krótkiej lekturze &lt;a href="http://maven.apache.org/guides/plugin/guide-java-plugin-development.html"&gt;Guide to Java Plugin Development&lt;/a&gt; byłem gotów. Z pomocą &lt;span style="font-weight: bold;"&gt;NetBeans IDE 6.1&lt;/span&gt; i jego wtyczki Maven miałem po
      chwili (mniej niż 5 minut!) swoją własną wtyczkę. Może to nie tylko początek mojej kariery jako twórca wtyczek mavenowych, ale również początek serii 5-minutowych wpisów?!&lt;br /&gt;&lt;br /&gt;Domyślnie NetBeans IDE 6.1 nie udostępnia wsparcia dla tworzenia projektów opartych o Maven 2 (dalej zwanego m2) i trzeba ratować się instalacją wtyczki Maven.&lt;br /&gt;&lt;br /&gt;Z menu &lt;span style="font-weight: bold;"&gt;Tools&lt;/span&gt; wybieramy pozycję &lt;span style="font-weight:
      bold;"&gt;Plugins&lt;/span&gt; i odszukujemy wtyczki Maven.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_wSeV_DMR2uA/SAR8-OCL72I/AAAAAAAAAx0/FsggkvBtWlE/s1600-h/plugins.gif"&gt;&lt;img src="http://2.bp.blogspot.com/_wSeV_DMR2uA/SAR8-OCL72I/AAAAAAAAAx0/FsggkvBtWlE/s320/plugins.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5189410078998654818" /&gt;&lt;/a&gt;&lt;br /&gt;Zaznaczamy ją,
      wciskamy przycisk &lt;span style="font-weight: bold;"&gt;Install&lt;/span&gt; i po chwili NetBeans już wie, co to Maven.&lt;br /&gt;&lt;br /&gt;Wciskam &lt;span style="font-weight: bold;"&gt;Ctrl+Shift+N&lt;/span&gt;, a następnie z kategorii &lt;span style="font-weight: bold;"&gt;Maven&lt;/span&gt; wybieram &lt;span style="font-weight: bold;"&gt;Maven Project&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://3.bp.blogspot.com/_wSeV_DMR2uA/SAR9WeCL73I/AAAAAAAAAx8/x3G_JzBNuAo/s1600-h/maven-project.gif"&gt;&lt;img src="http://3.bp.blogspot.com/_wSeV_DMR2uA/SAR9WeCL73I/AAAAAAAAAx8/x3G_JzBNuAo/s320/maven-project.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5189410495610482546" /&gt;&lt;/a&gt;&lt;br /&gt;Wciskam przycisk &lt;span style="font-weight: bold;"&gt;Next &gt;&lt;/span&gt;.&lt;br /&gt;&lt;br
      /&gt;Wybieram &lt;span style="font-weight: bold;"&gt;Maven Mojo Archetype&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SAR94-CL74I/AAAAAAAAAyE/euksyOag57U/s1600-h/maven-mojo-archetype.gif"&gt;&lt;img src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SAR94-CL74I/AAAAAAAAAyE/euksyOag57U/s320/maven-mojo-archetype.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0"
      id="BLOGGER_PHOTO_ID_5189411088315969410" /&gt;&lt;/a&gt;&lt;br /&gt;W zależności od "zasobności" lokalnego repozytorium Mavena lista może się nieznacznie różnić od zaprezentowanej. W przypadku braku potrzebnego &lt;span style="font-weight: bold;"&gt;archetypu&lt;/span&gt; (= rodzaju wtyczki wspierającej tworzenie projektu) można skorzystać z przycisku &lt;span style="font-weight: bold;"&gt;Add...&lt;/span&gt; i go dodać ręcznie.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SAR9-uCL75I/AAAAAAAAAyM/Jw3WTe7MEWU/s1600-h/new-project.gif"&gt;&lt;img src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SAR9-uCL75I/AAAAAAAAAyM/Jw3WTe7MEWU/s320/new-project.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5189411187100217234" /&gt;&lt;/a&gt;&lt;br /&gt;I &lt;span style="font-weight: bold;"&gt;Finish&lt;/span&gt;. Po chwili projekt wtyczki jest
      gotowy.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_wSeV_DMR2uA/SAR-HeCL76I/AAAAAAAAAyU/mxqs9P6KuYQ/s1600-h/projects-view.gif"&gt;&lt;img src="http://3.bp.blogspot.com/_wSeV_DMR2uA/SAR-HeCL76I/AAAAAAAAAyU/mxqs9P6KuYQ/s320/projects-view.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5189411337424072610" /&gt;&lt;/a&gt;&lt;br /&gt;W oknie &lt;span style="font-weight: bold;"&gt;Output -
      Project Creationg&lt;/span&gt; pojawi się BUILD SUCCESSFUL.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_wSeV_DMR2uA/SAR-OeCL77I/AAAAAAAAAyc/CvMkCG_34c8/s1600-h/output-project-creation.gif"&gt;&lt;img src="http://3.bp.blogspot.com/_wSeV_DMR2uA/SAR-OeCL77I/AAAAAAAAAyc/CvMkCG_34c8/s320/output-project-creation.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5189411457683156914"
      /&gt;&lt;/a&gt;&lt;br /&gt;Zmieniam nazwę klasy mojo na &lt;span style="font-weight: bold;"&gt;EchoMojo&lt;/span&gt; oraz jej zawartość, aby definiowała zadanie &lt;span style="font-weight: bold;"&gt;echo&lt;/span&gt;, które przyjmuje jeden argument, który z kolei będzie wypisywany podczas uruchomienia.&lt;pre&gt; package pl.jaceklaskowski.maven.plugins.echo;&lt;br /&gt;&lt;br /&gt; import org.apache.maven.plugin.AbstractMojo;&lt;br /&gt; import org.apache.maven.plugin.MojoExecutionException;&lt;br
      /&gt;&lt;br /&gt; /**&lt;br /&gt; * Zadanie, ktore wypisuje podany komunikat&lt;br /&gt; * @goal echo&lt;br /&gt; * @requiresProject false&lt;br /&gt; */&lt;br /&gt; public class EchoMojo extends AbstractMojo {&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt; * Komunikat&lt;br /&gt; * @parameter expression="${komunikat}"&lt;br /&gt; * @required&lt;br /&gt; */&lt;br /&gt; private String komunikat;&lt;br /&gt;&lt;br /&gt; public void execute() throws MojoExecutionException {&lt;br /&gt;
      getLog().info(komunikat);&lt;br /&gt; }&lt;br /&gt; }&lt;/pre&gt;Dodanie &lt;span style="font-weight: bold;"&gt;@requiresProject false&lt;/span&gt; określa, że wykonanie wtyczki nie będzie wymagało projektu mavenowego do jej wykonania (bardzo pomocne do wtyczek narzędziowych niezależnych od projektu jak help:describe czy mojego testowego uruchomienia).&lt;br /&gt;&lt;br /&gt;Wybieram menu &lt;span style="font-weight: bold;"&gt;Clean and Build&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://2.bp.blogspot.com/_wSeV_DMR2uA/SAR-sOCL78I/AAAAAAAAAyk/SaDsb3roWVw/s1600-h/clean-and-build.gif"&gt;&lt;img src="http://2.bp.blogspot.com/_wSeV_DMR2uA/SAR-sOCL78I/AAAAAAAAAyk/SaDsb3roWVw/s320/clean-and-build.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5189411968784265154" /&gt;&lt;/a&gt;&lt;br /&gt;które spowoduje zainstalowanie wtyczki w lokalnym repozytorium mavenowym. Pomyślna instalacja
      wtyczki w repozytorium, to wymarzona pora na jej uruchomienie.&lt;br /&gt;&lt;br /&gt;Najpierw sprawdzę, czy wtyczka jest rozpoznawana przez m2.&lt;pre&gt; jlaskowski@work ~&lt;br /&gt; $ mvn -v&lt;br /&gt; Maven version: 2.0.7&lt;br /&gt; Java version: 1.5.0_14&lt;br /&gt; OS name: "windows xp" version: "5.1" arch: "x86"&lt;br /&gt;&lt;br /&gt; jlaskowski@work ~&lt;br /&gt; $ mvn help:describe -DgroupId=pl.jaceklaskowski.maven.plugins.echo -DartifactId=echo-maven-plugin&lt;br /&gt; [INFO] Scanning
      for projects...&lt;br /&gt; [INFO] Searching repository for plugin with prefix: 'help'.&lt;br /&gt; [INFO] ----------------------------------------------------------------------------&lt;br /&gt; [INFO] Building Maven Default Project&lt;br /&gt; [INFO] task-segment: [help:describe] (aggregator-style)&lt;br /&gt; [INFO] ----------------------------------------------------------------------------&lt;br /&gt; [INFO] [help:describe]&lt;br /&gt; [INFO] artifact
      pl.jaceklaskowski.maven.plugins.echo:echo-maven-plugin: checking for updates from central&lt;br /&gt; [INFO] Plugin: 'pl.jaceklaskowski.maven.plugins.echo:echo-maven-plugin:1.0'&lt;br /&gt; -----------------------------------------------&lt;br /&gt; Group Id: pl.jaceklaskowski.maven.plugins.echo&lt;br /&gt; Artifact Id: echo-maven-plugin&lt;br /&gt; Version: 1.0&lt;br /&gt; Goal Prefix: echo&lt;br /&gt; Description:&lt;br /&gt;&lt;br /&gt; Unknown&lt;br /&gt;&lt;br /&gt; [INFO]
      ------------------------------------------------------------------------&lt;br /&gt; [INFO] BUILD SUCCESSFUL&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;/pre&gt;(Żebym to ja wiedział jak pozbyć się tego Unknown).&lt;br /&gt;&lt;br /&gt;I w końcu faktyczne uruchomienie wtyczki.&lt;pre&gt; jlaskowski@work ~&lt;br /&gt; $ mvn pl.jaceklaskowski.maven.plugins.echo:echo-maven-plugin:1.0:echo -Dkomunikat="Witaj Jacku"&lt;br /&gt; [INFO] Scanning for
      projects...&lt;br /&gt; [INFO] ----------------------------------------------------------------------------&lt;br /&gt; [INFO] Building Maven Default Project&lt;br /&gt; [INFO] task-segment: [pl.jaceklaskowski.maven.plugins.echo:echo-maven-plugin:1.0:echo] (aggregator-style)&lt;br /&gt; [INFO] ----------------------------------------------------------------------------&lt;br /&gt; [INFO] [echo:echo]&lt;br /&gt; [INFO] Witaj Jacku&lt;br /&gt; [INFO]
      ------------------------------------------------------------------------&lt;br /&gt; [INFO] BUILD SUCCESSFUL&lt;br /&gt; [INFO] ------------------------------------------------------------------------&lt;/pre&gt;Działa! Można jeszcze wprowadzić kilka usprawnień w jej działaniu, ale to już pozostawiam wytrwałym. A skoro o nich, to pytanie konkursowe (w trwającym od jakiegoś czasu konkursie bez nagród): &lt;span style="font-weight: bold;"&gt;Jaki rodzaj wtyczki wspomaga tworzenie projektów w Maven 2
      (projekty wtyczek, aplikacji webowych, itp.)?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Jeśli masz swoją opinię nt. przydatności (bądź nieprzydatności) NetBeans 6.1 polecam udział w konkursie &lt;a href="http://www.netbeans.org/competition/blog-contest.html"&gt;NetBeans IDE 6.1 Beta Blogging Contest&lt;/a&gt;, w którym głos ludu jest nagradzany, a najwyższą wygraną jest...własna wiedza!</description>
      <pubDate>Tue, 15 Apr 2008 10:18:29 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Warszawski dzień NetBeans RoadShow</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-4377856932631000407</guid>
      <link>http://jlaskowski.blogspot.com/2008/04/warszawski-dzie-netbeans-roadshow.html</link>
      <description>&lt;a href="http://netbeansday.pl/"&gt;&lt;img src="http://4.bp.blogspot.com/_wSeV_DMR2uA/R_vdjNYmmgI/AAAAAAAAAxA/fFVIKIStqZ8/s320/logo_0708_tour_320x180.png" alt="" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5186982992805272066" /&gt;&lt;/a&gt;&lt;br /&gt;Sobota była ostatnim dniem &lt;span style="font-weight: bold;"&gt;NetBeans RoadShow&lt;/span&gt;, w którym uczestniczę z prezentacją &lt;span style="font-weight: bold;"&gt;JSF 1.2 w
      wykonaniu NetBeans IDE 6.1&lt;/span&gt;. Tym razem w Warszawie i kolejny raz publiczność nie zawiodła - i pod względem frekwencji, jak i aktywności. Udało mi się zademonstrować 6 z 7 planowanych przykładów i z reakcji publiczności mogę mniemać, że ich liczba i skomplikowanie były odpowiednie. Z dobrym odbiorem spotkały się również pytania kontrolne, za które można było otrzymać koszulkę NetBeans. Na ostatni 7. przykład nie starczyło czasu, więc pozostawiłem go sobie na najbliższy artykuł (w zasadzie
      przedstawiłem go w większej części w poprzednim wpisie &lt;a href="http://jlaskowski.blogspot.com/2008/03/nowoci-netbeans-ide-61-jsf-crud.html"&gt;Nowości NetBeans IDE 6.1 - JSF CRUD Generator&lt;/a&gt;). Mimo wszystko powtórzę go w detalach niebawem. Kręcę się koło pomysłu napisania książki o Java EE 5 i tego typu artykuły obserwuję, że mogłyby być świetnym materiałem na książkę. Wiele osób pyta o podstawowe tematy związane z Java EE 5, których wyjaśnienie można znaleźć w wielu miejscach w Sieci,
      ale czy to ich liczba, czy brak powiązania między nimi, a może w końcu bariera językowa sprawiają, że początkujący, polscy programiści zainteresowani Korporacyjną Javą 5 nie mogą się w nich odnaleźć. Pomysł jest, a z realizacją...się zobaczy ;-)&lt;br /&gt;&lt;br /&gt;Podczas dzisiejszej mojej prezentacji dowiedziałem się o ciekawej funkcjonalności NetBeans, która upraszcza tworzenie metod typu setter/getter. Do tej pory korzystałem z funkcji &lt;span style="font-weight: bold;"&gt;Refactor &gt;
      Encapsulate Fields...&lt;/span&gt; lub &lt;span style="font-weight: bold;"&gt;Alt+Insert&lt;/span&gt; przy zdefiniowanej zmiennej instancji, a wystarczy po prostu zdefiniować ją i....&lt;span style="font-weight: bold;"&gt;Ctrl+Spacja&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_wSeV_DMR2uA/SAEL1A-ZjGI/AAAAAAAAAxc/YOXBh2YWFhk/s1600-h/generate-setter-getter.gif"&gt;&lt;img
      src="http://1.bp.blogspot.com/_wSeV_DMR2uA/SAEL1A-ZjGI/AAAAAAAAAxc/YOXBh2YWFhk/s320/generate-setter-getter.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5188441251130215522" /&gt;&lt;/a&gt;&lt;br /&gt;Warto zwrócić uwagę na metody &lt;span style="font-weight: bold;"&gt;getKomunikat()&lt;/span&gt; oraz &lt;span style="font-weight: bold;"&gt;setKomunikat(String komunikat)&lt;/span&gt;, które odpowiadają polu
      instancji &lt;span style="font-weight: bold;"&gt;komunikat&lt;/span&gt;. To jest ta rzecz, o której nie wiedziałem wcześniej. Miłe! Tego typu tricki, kiedy poznane, znacząco mogą skrócić czas tworzenia aplikacji. Kolejny plus publicznych wystąpień - nie tylko prelegent może coś przekazać słuchaczom, ale i w drugą stronę też to działa.&lt;br /&gt;&lt;br /&gt;Niestety, nie udało mi się jednak odtworzyć problemu z wiązaniem stron JSF korzystając z edytora faces-config.xml, który pierwszy raz napotkałem
      na wczorajszej prezentacji w Krakowie. Na razie mam (i kilku z uczestników mojej krakowskiej prezentacji) świadomość jego istnienia, ale póki co, jest on głęboko schowany w czeluściach netbeansowego kodu. Na dzisiejszej prezentacji poszło wyjątkowo bezwyjątkowo ;-)&lt;br /&gt;&lt;br /&gt;Wczoraj podczas mojego powrotu z Krakowa miałem możliwość wysłuchania podcastu w wykonaniu Romana Strobla i...no właśnie tego drugiego nazwiska nie pamiętam, w którym dowiedziałem się o funkcji, która do dzisiaj była
      niewielkiej dla mnie wartości - &lt;span style="font-weight: bold;"&gt;Undock Window (Alt+Shift+D)&lt;/span&gt;. Dzięki uprzejmości Karola Harezlaka okazuje się, że może się ona przydać podczas pracy z wieloma (dwoma, trzema, czterema, ech, rozmarzyłem się) monitorami. Wtedy "rozszczepienie" okienek NetBeans może być nieocenione.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_wSeV_DMR2uA/SAEMrw-ZjHI/AAAAAAAAAxk/sNc3ghdYETA/s1600-h/undock-window.gif"&gt;&lt;img
      src="http://4.bp.blogspot.com/_wSeV_DMR2uA/SAEMrw-ZjHI/AAAAAAAAAxk/sNc3ghdYETA/s320/undock-window.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5188442191728053362" /&gt;&lt;/a&gt;&lt;br /&gt;Korzystając z okazji posiadania tak licznej publiczności (naliczyłem około 80 osób) nie mogłem opanować się, aby nie pochwalić się moją nową wiedzą klawiszową. Szybko okazało się, że jestem bodajże ostatnim, który o
      tych skrótach klawiszowych nie wiedział (!) O zgrozo, dlaczego mi wcześniej nie powiedziano o nich. Tyle czasu poszło do kosza. Niedawno, całkiem przypadkiem, zademonstrowano mi możliwość kasowania całych wyrazów w Windows za pomocą klawisza &lt;span style="font-weight: bold;"&gt;Ctrl+Backspace&lt;/span&gt; oraz &lt;span style="font-weight: bold;"&gt;Ctrl+Delete&lt;/span&gt;. Zamiast ciągłego przyciskania klawisza &lt;span style="font-weight: bold;"&gt;Backspace&lt;/span&gt;, można po prostu wcisnąć
      klawisz &lt;span style="font-weight: bold;"&gt;Ctrl&lt;/span&gt; i...znowu oszczędzamy trochę czasu.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.netbeans.org/community/releases/61/"&gt;&lt;img src="http://2.bp.blogspot.com/_wSeV_DMR2uA/SAENEQ-ZjII/AAAAAAAAAxs/3eWLXOBn1_E/s320/netbeans61.jpg" alt="" style="float: left; margin: 0 10px 10px 0; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5188442612634848386" /&gt;&lt;/a&gt;Na konferencji dowiedziałem się o wydaniu wersji &lt;a
      href="http://download.netbeans.org/netbeans/6.1/rc/"&gt;NetBeans IDE 6.1 Release Candidate 1 (RC1)&lt;/a&gt;, która szczęśliwie okazała się być wersją, którą prezentowałem podczas moich wystąpień krakowskiej i warszawskiej. Ja korzystałem z wersji rozwojowej z 2 dni wcześniej, na której wydaje się być oparte RC1. Mimo wszystko pobrałem ją, bo a nuż coś na koniec jeszcze dodano.&lt;br /&gt;&lt;br /&gt;Zakończyliśmy prezentację o JSF 1.2 i NetBeans 6.1 kilkoma pytaniami, wśród których pojawiło się
      jedno o wsparcie dla Hibernate. Dla mnie Hibernate to jeden z wielu dostawców JPA (dostawca JPA jest w relacji JPA jak sterownik JDBC w stosunku do JDBC), więc zdawkowo odpowiedziałem, że być może skoro korzystam z JPA. Prawda jest taka, że tandem NetBeans-Hibernate nigdy nie był pod moją lupą i nie wiedziałem, czy w ogóle byłby możliwy. Dowiedziałem się, że istnieje wtyczka (wspierająca) Hibernate dla NetBeans 6.1, o której również wspomniano w &lt;span style="font-weight: bold;"&gt;Feature
      Highlights&lt;/span&gt; w dokumencie &lt;a href="http://www.netbeans.org/community/releases/61/"&gt;NetBeans IDE 6.1 Release Candidate Information&lt;/a&gt; w sekcji &lt;span style="font-weight: bold;"&gt;New Update Center Modules&lt;/span&gt; - &lt;span style="font-weight: bold;"&gt;Hibernate Framework Support&lt;/span&gt;. Dokument czytałem wcześniej, ale nie pamiętam, abym trafił na tę informację. Kolejna zaleta publicznych wystąpień, że nie tylko prelegent słuchaczom, ale i słuchacze prelegentowi
      coś wyjaśnią, przedstawią, czy wskażą.&lt;br /&gt;&lt;br /&gt;Moja prezentacja &lt;span style="font-weight: bold;"&gt;JSF 1.2 w wykonaniu NetBeans IDE 6.1&lt;/span&gt; z tegorocznego NetBeans RoadShow po Polsce dostępna jest do pobrania jako &lt;a href="http://www.jaceklaskowski.pl/prezentacje/JacekLaskowski-NetBeansRoadShow-JSFiNetBeans61-11-12.04.2008.pdf"&gt;JacekLaskowski-NetBeansRoadShow-JSFiNetBeans61-11-12.04.2008.pdf&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Jutro ostatni dzień NetBeans RoadShow w
      Polsce, we Wrocławiu. Tam mnie jednak nie będzie, ale mimo wszystko zapraszam w imieniu organizatorów. Może ktoś podeśle linka z relacją jak było? Paweł?</description>
      <pubDate>Tue, 15 Apr 2008 06:21:44 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Nowości NetBeans IDE 6.1 - Spring Framework Support</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-849520109544069638</guid>
      <link>http://jlaskowski.blogspot.com/2008/04/nowoci-netbeans-ide-61-spring-framework.html</link>
      <description>&lt;a href="http://bp3.blogger.com/_wSeV_DMR2uA/R-aC9LH3kqI/AAAAAAAAAno/kMgCJnApCTI/s1600-h/netbeans.gif"&gt;&lt;img src="http://bp3.blogger.com/_wSeV_DMR2uA/R-aC9LH3kqI/AAAAAAAAAno/kMgCJnApCTI/s320/netbeans.gif" alt="" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180972408805757602" /&gt;&lt;/a&gt;Wydaje się, że teraz zapisuję swoje spostrzeżenia szybciej niż udaje mi się je opublikować (!) Piszę po prostu wszędzie - na kartkach,
      karteczkach, w notesie, a to plik tekstowy tutaj, a to tam. I zauważyłem pewną prawidłowość, że czym więcej piszę, tym więcej czytam, a czym więcej czytam tym mam więcej do napisania, tyle się ciekawego dzieje dookoła. Dobrze, że człowiek ma rodzinę, która potrafi sprowadzić na ziemię, bo odleciałbym w przestworza na dobre. Ciekawym podejściem do badania tematów nowych technologii jest puszczenie ich równolegle (tzn. semi-równolegle), czyli zajmuję się jednym tematem, a kiedy uda mi się coś zbadać,
      zostawiam go i przechodzę do całkowicie innej technologii. Zauważam, że nie czuję zmęczenia, które mógłbym doświadczać, kiedy zanurzyłbym się w pojedyńczej technologii i dłubałbym w niej, i dłubałbym. Monotonia nie sprzyja rozumieniu nowych tematów, a zadręczanie się niemożnością zrozumienia ich najlepiej rozwiązać odłożeniem na bok i zajęciem się czymś odświeżającym, np. kolejnym nowym tematem. Jak na razie u mnie się sprawdza.&lt;br /&gt;&lt;br /&gt;Przy dziejszym pierwszo-kwietniowym dniu
      wypadałoby opublikować coś nietuzinkowego acz wciąż mało realnego, ale nic nie przychodzi mi do głowy, więc będzie jak zwykle, całkowicie poważnie. Może jednak niektórzy znajdą w moim wpisie coś pierwszokwietniowego ;-)&lt;br /&gt;&lt;br /&gt;Po ostatnich zgłoszeniach błędów w IssueZilla NetBeansa w związku z funkcjonalnością tworzenia aplikacji JSF typu CRUD, którą opisywałem w &lt;a href="http://jlaskowski.blogspot.com/2008/03/nowoci-netbeans-ide-61-jsf-crud.html"&gt;Nowości NetBeans IDE 6.1 - JSF
      CRUD Generator&lt;/a&gt;, okazało się, że używałem przestarzałej wersji 6.1 BETA i jako rozwiązanie zaproponowano uaktualnienie środowiska do najnowszej wersji rozwojowej. Zatem można powiedzieć, że oficjalna beta już przestaje być warta uwagi i dla tych, którzy potrzebują wrażeń &lt;a href="http://bits.netbeans.org/dev/nightly/latest/zip/"&gt;wersja rozwojowa NetBeans IDE 6.1&lt;/a&gt; jest tym, czego potrzebują.&lt;br /&gt;&lt;br /&gt;Po aktualizacji NetBeans postanowiłem przyjrzeć się wsparciu dla
      Spring Framework (&lt;span style="font-weight: bold;"&gt;Spring Framework Support&lt;/span&gt;), którą przedstawia się jako jedną z wartościowych nowości w NetBeans IDE 6.1.&lt;br /&gt;&lt;br /&gt;Nie pamiętam dokładnie, czy najpierw postanowiłem zbadać NetBeans IDE 6.1 i jego możliwości springowe, czy było to po tym, kiedy przeczytałem &lt;a href="http://netbeanside61.blogspot.com/2008/03/spring-support-in-netbeans-ide-61-beta.html"&gt;Spring support in Netbeans IDE 6.1 Beta&lt;/a&gt;. Tak czy owak,
      po przeczytaniu artykułu postanowiłem sprawdzić go w działaniu i okazało się, że wiele z informacji jest dalece nieprawdziwa i NetBeans 6.1 oferuje znacznie więcej. Nie jest wprawdzie wspaniale, ale określenie &lt;span style="font-style: italic;"&gt;lepiej&lt;/span&gt; pasuje doskonale. Nie ukrywam, że spodziewałem się więcej. Nowicjusze springowi (wliczam do tej grupy również siebie) na pewno nie znajdą w NetBeans znacznego uproszczenia ich czasu, który należy poświęcić na naukę Spring Framework.
      Oczywiście jest wsparcie dla edycji plików springowych oraz łatwiejsze tworzenie aplikacji opartych o Spring MVC, ale w/g mnie jest to zdecydowanie za mało. Coraz to nowsze wersje NetBeans IDE rozpieszczały nas ostatnio, więc apetyt i wymagania znacznie wzrosły.&lt;br /&gt;&lt;br /&gt;Zacznijmy rekonesans po funkcjonalności NetBeans IDE 6.1 w zakresie wsparcia Spring Framework. &lt;br /&gt;&lt;br /&gt;Rozpoczynam go od utworzenia zwykłej aplikacji desktopowej korzystającej ze Springa. Tworzę projekt
      &lt;span style="font-weight: bold;"&gt;Java Application&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Ctrl+Shift+N&lt;/span&gt; i &lt;span style="font-weight: bold;"&gt;Java &gt; Java Application&lt;/span&gt;. Projekt sam w sobie nie wspiera specjalnie Springa (trudno mi opisać, czego oczekuję, ale czegoś mi jednak brakuje), ale istnieje asystent tworzenia springowego pliku konfiguracyjnego xml - &lt;span style="font-weight: bold;"&gt;Other &gt; Spring XML Configuration
      File&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_wSeV_DMR2uA/R_Ky2dYml9I/AAAAAAAAAso/zUfJGb1GukI/s1600-h/new-file-wizard-spring-xml.gif"&gt;&lt;img src="http://bp3.blogger.com/_wSeV_DMR2uA/R_Ky2dYml9I/AAAAAAAAAso/zUfJGb1GukI/s320/new-file-wizard-spring-xml.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5184402769727363026" /&gt;&lt;/a&gt;&lt;br /&gt;W kolejnym kroku mamy
      możliwość wyboru przestrzeni nazw, które mają być uaktywnione w pliku konfiguracyjnym.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_wSeV_DMR2uA/R_KzKtYml-I/AAAAAAAAAsw/5lDdddvJSsM/s1600-h/spring-namespaces.gif"&gt;&lt;img src="http://bp0.blogger.com/_wSeV_DMR2uA/R_KzKtYml-I/AAAAAAAAAsw/5lDdddvJSsM/s320/spring-namespaces.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5184403117619714018"
      /&gt;&lt;/a&gt;&lt;br /&gt;Niekwestionowane uproszczenie (pamiętam, kiedy na spotkaniu Warszawa JUG rozwiązywaliśmy problem niewidoczności elementów springowego pliku konfiguracyjnego i dopiero za sprawą Waldiego podpartego książką o Springu znaleźliśmy rozwiązanie - właśnie przez dodanie brakującej przestrzeni nazw). Każdy, kto pracuje z plikiem XML dla Spring wie, że znajomość tych przestrzeni jest niełatwa, więc to jest zdecydowany plus.&lt;br /&gt;&lt;br /&gt;Po utworzeniu pliku konfiguracji
      springowej mamy możliwość skorzystania z uzupełniania klas, ich atrybutów&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_wSeV_DMR2uA/R_K2H9YmmCI/AAAAAAAAAtQ/QhdX5yjlPiw/s1600-h/podpowiedz-w-beans-element.xml.gif"&gt;&lt;img src="http://bp1.blogger.com/_wSeV_DMR2uA/R_K2H9YmmCI/AAAAAAAAAtQ/QhdX5yjlPiw/s320/podpowiedz-w-beans-element.xml.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0"
      id="BLOGGER_PHOTO_ID_5184406368909957154" /&gt;&lt;/a&gt;&lt;br /&gt;, czy ziaren springowych.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_wSeV_DMR2uA/R_K2OtYmmDI/AAAAAAAAAtY/N5dP79EEq2Y/s1600-h/podpowiedz-w-beans.xml-atrybut-ref.gif"&gt;&lt;img src="http://bp0.blogger.com/_wSeV_DMR2uA/R_K2OtYmmDI/AAAAAAAAAtY/N5dP79EEq2Y/s320/podpowiedz-w-beans.xml-atrybut-ref.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0"
      id="BLOGGER_PHOTO_ID_5184406484874074162" /&gt;&lt;/a&gt;&lt;br /&gt;Natrafiłem jednakże na błąd związany z niewidocznością interfejsu dla elementu wskazującego typ listy (brakuje typu &lt;span style="font-weight: bold;"&gt;pl.jaceklaskowski.osgi.Polecenie&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_wSeV_DMR2uA/R_K0ltYml_I/AAAAAAAAAs4/GPDHl40xbUY/s1600-h/wylacznie-impl-brakuje-klasy.gif"&gt;&lt;img
      src="http://bp0.blogger.com/_wSeV_DMR2uA/R_K0ltYml_I/AAAAAAAAAs4/GPDHl40xbUY/s320/wylacznie-impl-brakuje-klasy.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5184404680987809778" /&gt;&lt;/a&gt;&lt;br /&gt;Trzymając klawisz &lt;span style="font-weight: bold;"&gt;Ctrl&lt;/span&gt;, będąc nad nazwą klasy, przechodzimy do odpowiadającej klasy, atrybutu&lt;br /&gt; &lt;br /&gt;&lt;a
      href="http://bp3.blogger.com/_wSeV_DMR2uA/R_K1EdYmmAI/AAAAAAAAAtA/z9dEbldaJqE/s1600-h/Hyperlinking-java-class-name.gif"&gt;&lt;img src="http://bp3.blogger.com/_wSeV_DMR2uA/R_K1EdYmmAI/AAAAAAAAAtA/z9dEbldaJqE/s320/Hyperlinking-java-class-name.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5184405209268787202" /&gt;&lt;/a&gt;&lt;br /&gt;bądź ziarna springowego.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://bp1.blogger.com/_wSeV_DMR2uA/R_K1I9YmmBI/AAAAAAAAAtI/jWr120m65yU/s1600-h/Hyperlinking-bean-name.gif"&gt;&lt;img src="http://bp1.blogger.com/_wSeV_DMR2uA/R_K1I9YmmBI/AAAAAAAAAtI/jWr120m65yU/s320/Hyperlinking-bean-name.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5184405286578198546" /&gt;&lt;/a&gt;&lt;br /&gt;Jako wadę mógłbym wskazać konieczność znajomości pliku springowego, aby w ogóle
      skonstruować go poprawnie. Samo wsparcie dla edycji pliku XML (mamy wskazany XSD, więc to nie powinno być traktowane w kategorii wyczynu) z pewnym wsparciem dla zrozumienia bytów springowych to zdecydowanie za mało. Tutaj odnotowuję minus.&lt;br /&gt;&lt;br /&gt;Pojawiła się ikona pliku springowego - ów listek symbolizujący Spring Framework, który uwypukla znaczenie pliku xml. Plusik.&lt;br /&gt;&lt;br /&gt;Podczas tworzenia pliku XML dla Springa natrafiłem na błąd związany z błędnym komunikatem
      błędu - &lt;a href="http://www.netbeans.org/issues/show_bug.cgi?id=131549"&gt;Incorrect error message when spring xml config file exists&lt;/a&gt;. Idealna pora i czas, aby zgłaszać błędy i oczekiwać ich naprawienia w finalnej wersji. Zachęcam do zgłaszania błędów przy każdorazowym ich napotkaniu (z czego skrzętnie skorzystałem).&lt;br /&gt;&lt;br /&gt;Ciekawą zmianą w kontekście wsparcia dla Spring Framework jest możliwość skorzystania z biblioteki &lt;span style="font-weight: bold;"&gt;Spring
      Framework 2.5&lt;/span&gt; dostępnej bezpośrednio w NetBeans: &lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_wSeV_DMR2uA/R_K4MNYmmEI/AAAAAAAAAtg/bPJ0gpBQBuY/s1600-h/add-library-spring-framework25.gif"&gt;&lt;img src="http://bp2.blogger.com/_wSeV_DMR2uA/R_K4MNYmmEI/AAAAAAAAAtg/bPJ0gpBQBuY/s320/add-library-spring-framework25.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5184408640947656770"
      /&gt;&lt;/a&gt;&lt;br /&gt;Kolejne otworzenie właściwości projektu ukazuje nowe menu konfiguracyjne - &lt;span style="font-weight: bold;"&gt;Spring Framework&lt;/span&gt; wraz z plikiem &lt;span style="font-weight: bold;"&gt;src/beans.xml&lt;/span&gt;, który przed chwilą utworzyłem.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_wSeV_DMR2uA/R_K4nNYmmFI/AAAAAAAAAto/L57uGclaMus/s1600-h/configuration-file.gif"&gt;&lt;img
      src="http://bp2.blogger.com/_wSeV_DMR2uA/R_K4nNYmmFI/AAAAAAAAAto/L57uGclaMus/s320/configuration-file.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5184409104804124754" /&gt;&lt;/a&gt;&lt;br /&gt;Istnieje opcja wykrycia pozostałych plików springowych za pomocą &lt;span style="font-weight: bold;"&gt;Detect Files...&lt;/span&gt;, które mogłyby wcześniej istnieć w aplikacji, a która właśnie została
      zaimportowana.&lt;br /&gt;&lt;br /&gt;Lektura Spring Framework Support w &lt;a href="http://wiki.netbeans.org/NB61NewAndNoteWorthy"&gt;Milestones New and Noteworthy&lt;/a&gt; dała mi odpowiedź, na znaczenie &lt;span style="font-weight: bold;"&gt;Configuration File Groups&lt;/span&gt; w menu Spring Framework.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_wSeV_DMR2uA/R_K5YNYmmGI/AAAAAAAAAtw/srJUZ9BRE9k/s1600-h/configuration-file-groups.gif"&gt;&lt;img
      src="http://bp2.blogger.com/_wSeV_DMR2uA/R_K5YNYmmGI/AAAAAAAAAtw/srJUZ9BRE9k/s320/configuration-file-groups.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5184409946617714786" /&gt;&lt;/a&gt;&lt;br /&gt;Funkcjonalność springowych grup konfiguracyjnych obejmuje grupowanie plików konfiguracyjnych i korzystanie z uzupełniania elementów plików konfiguracyjnych i przechodzenia między ich elementami a
      klasami/ziarnami w ramach grupy. Na razie zaliczam to grupy zaawansowanej wsparcia Spring Framework przez NetBeans, więc zostawiam to dla innych, bardziej dociekliwych. Więcej w dokumentacji pod klawiszem &lt;span style="font-weight: bold;"&gt;F1&lt;/span&gt; będąc w tym panelu. Dodałem jedynie nowoutworzony plik beans.xml do własnej grupy &lt;span style="font-weight: bold;"&gt;Ewaluacja&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://bp1.blogger.com/_wSeV_DMR2uA/R_K579YmmHI/AAAAAAAAAt4/UzxwgE8BbYo/s1600-h/ewaluacja-configuration-file-group.gif"&gt;&lt;img src="http://bp1.blogger.com/_wSeV_DMR2uA/R_K579YmmHI/AAAAAAAAAt4/UzxwgE8BbYo/s320/ewaluacja-configuration-file-group.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5184410560798038130" /&gt;&lt;/a&gt;&lt;br /&gt;Dodatkowo, podczas tworzenia kolejnego, springowego pliku
      konfiguracyjnego istnieje możliwość dodania go do istniejącej grupy konfiguracyjnej.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_wSeV_DMR2uA/R_K6FNYmmII/AAAAAAAAAuA/q2yZrXLEGx4/s1600-h/new-file-wizard-spring-xml-with-configuration-groups.gif"&gt;&lt;img src="http://bp2.blogger.com/_wSeV_DMR2uA/R_K6FNYmmII/AAAAAAAAAuA/q2yZrXLEGx4/s320/new-file-wizard-spring-xml-with-configuration-groups.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer;
      cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5184410719711828098" /&gt;&lt;/a&gt;&lt;br /&gt;Znalazłem również wzmiankę o &lt;span style="font-weight: bold;"&gt;Spring MVC&lt;/span&gt; i jego wsparciu w NetBeans 6.1, więc jako, że nigdy nie próbowałem się z nim pora na krótką lekcję wprowadzającą.&lt;br /&gt;&lt;br /&gt;Tworzę aplikację webową - &lt;span style="font-weight: bold;"&gt;Ctrl+Shift+N&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Web &gt; Web Application&lt;/span&gt; i w panelu
      &lt;span style="font-weight: bold;"&gt;Frameworks&lt;/span&gt; mam możliwość wyboru szkieletu webowego wspieranego przez NetBeans 6.1.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_wSeV_DMR2uA/R_K6YdYmmJI/AAAAAAAAAuI/rOGKMTYeAs8/s1600-h/spring-web-mvc.gif"&gt;&lt;img src="http://bp3.blogger.com/_wSeV_DMR2uA/R_K6YdYmmJI/AAAAAAAAAuI/rOGKMTYeAs8/s320/spring-web-mvc.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0"
      id="BLOGGER_PHOTO_ID_5184411050424309906" /&gt;&lt;/a&gt;&lt;br /&gt;Więcej informacji o wsparciu Springa w NetBeans w &lt;a href="http://wiki.netbeans.org/SpringSupportPlan61"&gt;Spring Framework support plan for NetBeans 6.1&lt;/a&gt;. Tam również znalazłem artykuł &lt;a href="http://www.netbeans.org/kb/55/quickstart-spring.html"&gt;Introduction to the Spring Framework in NetBeans IDE&lt;/a&gt;, ale niewiele dla mnie, gdyż wszystko opisane w artykule wydaje się być już dostępne w NetBeans IDE 6.1
      domyślnie.&lt;br /&gt;&lt;br /&gt;Jeszcze podgląd konfiguracji aplikacji webowej z Spring MVC.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_wSeV_DMR2uA/R_K6-dYmmKI/AAAAAAAAAuQ/8kmZHQEZaK8/s1600-h/spring-web-mvc-libraries.gif"&gt;&lt;img src="http://bp3.blogger.com/_wSeV_DMR2uA/R_K6-dYmmKI/AAAAAAAAAuQ/8kmZHQEZaK8/s320/spring-web-mvc-libraries.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0"
      id="BLOGGER_PHOTO_ID_5184411703259338914" /&gt;&lt;/a&gt;&lt;br /&gt;Aplikacja działa od pierwszego uruchomienia, więc to zaliczam również na plus.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_wSeV_DMR2uA/R_K82dYmmLI/AAAAAAAAAuY/gFOHV9T_kgo/s1600-h/springmvc.gif"&gt;&lt;img src="http://bp3.blogger.com/_wSeV_DMR2uA/R_K82dYmmLI/AAAAAAAAAuY/gFOHV9T_kgo/s320/springmvc.gif" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0"
      id="BLOGGER_PHOTO_ID_5184413764843641010" /&gt;&lt;/a&gt;&lt;br /&gt;Na koniec ciekawostka - podczas wykonania polecenia &lt;span style="font-weight: bold;"&gt;Clean and Build&lt;/span&gt; albo po prostu &lt;span style="font-weight: bold;"&gt;Build&lt;/span&gt; projektu typu &lt;span style="font-weight: bold;"&gt;Java Application&lt;/span&gt; NetBeans poinformuje:&lt;pre&gt; To run this application from the command line without Ant, try:&lt;br /&gt; java -jar "C:\Documents and Settings\jlaskowski\My
      Documents\NetBeansProjects\SpringDemo\dist\SpringDemo.jar"&lt;/pre&gt;I faktycznie działa! Wszystkie konieczne biblioteki znajdują się w katalogu &lt;span style="font-weight: bold;"&gt;lib&lt;/span&gt;, który wskazywany jest w &lt;span style="font-weight: bold;"&gt;MANIFEST.MF&lt;/span&gt;.&lt;pre&gt; Class-Path: lib/commons-logging-1.1.jar lib/spring-2.5.jar&lt;/pre&gt;Milutkie. Kolejny plus.&lt;br /&gt;&lt;br /&gt;Ogólnie zadowolony, ale pewne braki powodują, że czuję niedosyt. Wierzę, że kolejne
      odsłony wsparcia Spring Framework w NetBeans IDE 6.1 będą doskonalsze i ich rozwój nabierze większego tempa.&lt;br /&gt;&lt;br /&gt;Dla zainteresowanych wychwalaniem (lub wręcz przeciwnie) funkcjonalności NetBeans 6.1 zapraszam do udziału w konkursie &lt;a href="http://www.netbeans.org/competition/blog-contest.html"&gt;NetBeans IDE 6.1 Beta Blogging Contest&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Pytanie dla wytrwałych: &lt;span style="font-weight: bold;"&gt;Do czego służą springowe grupy projektowe w
      NetBeans IDE 6.1?&lt;/span&gt; Nagród niet.</description>
      <pubDate>Mon, 14 Apr 2008 19:35:42 +0000</pubDate>
    </item>
    <item>
      <title>Jacek Laskowski - Notatnik Projektanta Java EE: Nowości NetBeans IDE 6.1 - JSF CRUD Generator</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-20941681.post-6684843321087570651</guid>
      <link>http://jlaskowski.blogspot.com/2008/03/nowoci-netbeans-ide-61-jsf-crud.html</link>
      <description>&lt;a href="http://bp3.blogger.com/_wSeV_DMR2uA/R-aC9LH3kqI/AAAAAAAAAno/kMgCJnApCTI/s1600-h/netbeans.gif"&gt;&lt;img src="http://bp3.blogger.com/_wSeV_DMR2uA/R-aC9LH3kqI/AAAAAAAAAno/kMgCJnApCTI/s320/netbeans.gif" alt="" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180972408805757602" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;6 marca 2008&lt;/span&gt; wyszła wersja &lt;span style="font-weight: bold;"&gt;NetBeans IDE 6.1
      BETA&lt;/span&gt; - &lt;a href="http://www.netbeans.org/servlets/NewsItemView?newsItemID=1200"&gt;NetBeans IDE 6.1 Beta Now Available!&lt;/a&gt;. Jedyną z nowości, która zwróciła moją uwagę było &lt;span style="font-weight: bold;"&gt;JSF CRUD Generator (back by popular demand)&lt;/span&gt;. Moją ciekawość dodatkowo spotęgował konkurs &lt;a href="http://www.netbeans.org/competition/blog-contest.html"&gt;NetBeans IDE 6.1 Beta Blogging Contest&lt;/a&gt;, gdzie jak zrozumiałem wystarczy jedynie
      przedstawić NetBeans IDE 6.1 i tyle. Na uwagę zasługuje fakt, że &lt;span style="font-style: italic;"&gt;Blogs will be accepted in the following languages&lt;/span&gt; a tam &lt;span style="font-style: italic;"&gt;Polish&lt;/span&gt;! A skoro &lt;span style="font-style: italic;"&gt;even if you don’t win, you might get a bunch of traffic!&lt;/span&gt; to nawet bez nagrody będę miał ten zysk, że potencjalnie mogę przyciągnąć uwagę kolejnych krytyków mojego spojrzenia na sprawy związane z Javą, jej
      korporacyjną wersją i projektami otwartymi. Sami się prosili ;-)&lt;br /&gt;&lt;br /&gt;Rozpocząłem od lektury &lt;a href="http://www.netbeans.org/community/releases/61/"&gt;NetBeans IDE 6.1 Beta Information&lt;/a&gt;. Niestety niewiele można było tam znaleźć o JSF CRUD Generator. Szczęśliwie był tam zrzut ekranu z funkcjonalnością, która mnie zainteresowała, więc wiedziałem, że powinienem zacząć od asystenta &lt;span style="font-weight: bold;"&gt;JSF Pages From Entity Class&lt;/span&gt;. Zajrzałem
      również na stronę &lt;a href="http://wiki.netbeans.org/JsfCrudGenerator"&gt;JsfCrudGenerator&lt;/a&gt; i znowu niewiele. Trochę informacji znalazłem również na stronie &lt;a href="http://wiki.netbeans.org/NB61NewAndNoteWorthy"&gt;Milestones New and Noteworthy&lt;/a&gt;. W sumie głucho jak na funkcjonalność, którą wprowadzono do NetBeans &lt;span style="font-style: italic;"&gt;back by popular demand&lt;/span&gt;. Chyba wszyscy wszystko wiedzą i stwierdzono, że popularność tej funkcjonalności nie
      zasługuje na szersze przedstawienie, bo co tutaj opisywać skoro wiadomo w co się gra. I tutaj wchodzę ja ;-)&lt;br /&gt;&lt;br /&gt;Rozpoczynam od przygotowania bazy danych, którą w NetBeans (NB) jest Java DB. W zakładce &lt;span style="font-weight: bold;"&gt;Services&lt;/span&gt; w &lt;span style="font-weight: bold;"&gt;Databases&lt;/span&gt; znajduje się pozycja &lt;span style="font-weight: bold;"&gt;Java DB&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://bp1.blogger.com/_wSeV_DMR2uA/R-aEprH3krI/AAAAAAAAAnw/DO-cX0Grvos/s1600-h/services-javadb.gif"&gt;&lt;img src="http://bp1.blogger.com/_wSeV_DMR2uA/R-aEprH3krI/AAAAAAAAAnw/DO-cX0Grvos/s320/services-javadb.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180974272821564082" /&gt;&lt;/a&gt;&lt;br /&gt;Za pomocą menu kontekstowego &lt;span style="font-weight: bold;"&gt;Start Server&lt;/span&gt; uruchamiam bazę
      Java DB.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_wSeV_DMR2uA/R-aE57H3ksI/AAAAAAAAAn4/8tpUa6E4WQQ/s1600-h/services-javadb-startserver.gif"&gt;&lt;img src="http://bp2.blogger.com/_wSeV_DMR2uA/R-aE57H3ksI/AAAAAAAAAn4/8tpUa6E4WQQ/s320/services-javadb-startserver.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180974551994438338" /&gt;&lt;/a&gt;&lt;br /&gt;Po chwili, po uruchomieniu bazy danych, uaktywni
      się menu &lt;span style="font-weight: bold;"&gt;Create Database...&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_wSeV_DMR2uA/R-aFJbH3ktI/AAAAAAAAAoA/XFyveaI9Jbo/s1600-h/create-database.gif"&gt;&lt;img src="http://bp0.blogger.com/_wSeV_DMR2uA/R-aFJbH3ktI/AAAAAAAAAoA/XFyveaI9Jbo/s320/create-database.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180974818282410706" /&gt;&lt;/a&gt;&lt;br
      /&gt;Wypełniam danymi:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Database Name&lt;/span&gt;: piodb&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;User Name&lt;/span&gt;: jacek&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Password&lt;/span&gt;: jacek&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_wSeV_DMR2uA/R-aFXbH3kuI/AAAAAAAAAoI/RkAY1JC2-78/s1600-h/create-javadb-database.gif"&gt;&lt;img
      src="http://bp0.blogger.com/_wSeV_DMR2uA/R-aFXbH3kuI/AAAAAAAAAoI/RkAY1JC2-78/s320/create-javadb-database.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180975058800579298" /&gt;&lt;/a&gt;&lt;br /&gt;i zatwierdzam &lt;span style="font-weight: bold;"&gt;OK&lt;/span&gt;. Tym samym baza jest gotowa. Pojawi się kolejna pozycja w &lt;span style="font-weight: bold;"&gt;Databases&lt;/span&gt; reprezentująca połączenie z
      nowoutworzoną bazą &lt;span style="font-weight: bold;"&gt;piodb&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_wSeV_DMR2uA/R-aFobH3kvI/AAAAAAAAAoQ/x4V5zJH41jo/s1600-h/databases-with-piodb.gif"&gt;&lt;img src="http://bp0.blogger.com/_wSeV_DMR2uA/R-aFobH3kvI/AAAAAAAAAoQ/x4V5zJH41jo/s320/databases-with-piodb.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180975350858355442" /&gt;&lt;/a&gt;&lt;br
      /&gt;Pora trochę poprogramować. Pora na utworzenie dwóch encji &lt;span style="font-weight: bold;"&gt;Pytanie&lt;/span&gt; i &lt;span style="font-weight: bold;"&gt;Odpowiedz&lt;/span&gt; w relacji &lt;span style="font-weight: bold;"&gt;jeden-do-wielu&lt;/span&gt;. Zanim jednak do tego przejdziemy najpierw należy utworzyć ich projekt.&lt;br /&gt;&lt;br /&gt;Wybieram zakładkę &lt;span style="font-weight: bold;"&gt;Projects&lt;/span&gt;, gdzie za pomocą kombinacji klawiszy &lt;span style="font-weight:
      bold;"&gt;Ctrl+Shift+N&lt;/span&gt; uruchamiam asystenta &lt;span style="font-weight: bold;"&gt;Java Class Library&lt;/span&gt; (kategoria &lt;span style="font-weight: bold;"&gt;Java&lt;/span&gt; - powinna być domyślnie wybrana). Jakkolwiek encje mogłyby być częścią aplikacji webowej, postanowiłem jednak wydzielić je jako oddzielny projekt do ponownego wykorzystania w innych projektach, niekoniecznie webowych (jeszcze nieokreślonych i trochę na wyrost, ale mam wrażenie, że ostatecznie takie podejście
      się opłaci).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_wSeV_DMR2uA/R-aGCbH3kwI/AAAAAAAAAoY/lmKlZ8aLcMM/s1600-h/java-class-library.gif"&gt;&lt;img src="http://bp0.blogger.com/_wSeV_DMR2uA/R-aGCbH3kwI/AAAAAAAAAoY/lmKlZ8aLcMM/s320/java-class-library.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180975797534954242" /&gt;&lt;/a&gt;W kolejnym kroku - &lt;span style="font-weight: bold;"&gt;Name and
      Location&lt;/span&gt; - wpisuję dane biblioteki.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Project Name&lt;/span&gt;: PioJPA&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_wSeV_DMR2uA/R-aGOLH3kxI/AAAAAAAAAog/UUPJdAvm-mo/s1600-h/name-and-location.gif"&gt;&lt;img src="http://bp3.blogger.com/_wSeV_DMR2uA/R-aGOLH3kxI/AAAAAAAAAog/UUPJdAvm-mo/s320/name-and-location.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor:
      pointer;" border="0" id="BLOGGER_PHOTO_ID_5180975999398417170" /&gt;&lt;/a&gt;&lt;br /&gt;Zatwierdzam przyciskiem &lt;span style="font-weight: bold;"&gt;Finish&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl+N&lt;/span&gt; i wybieram kategorię &lt;span style="font-weight: bold;"&gt;Persistence&lt;/span&gt;, a w niej &lt;span style="font-weight: bold;"&gt;Entity Class&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://bp1.blogger.com/_wSeV_DMR2uA/R-aGfrH3kyI/AAAAAAAAAoo/ozyiMTsjlb4/s1600-h/entity-class.gif"&gt;&lt;img src="http://bp1.blogger.com/_wSeV_DMR2uA/R-aGfrH3kyI/AAAAAAAAAoo/ozyiMTsjlb4/s320/entity-class.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180976300046127906" /&gt;&lt;/a&gt;&lt;br /&gt;Mógłbym wybrać asystenta &lt;span style="font-weight: bold;"&gt;Entity Classes from Database&lt;/span&gt;, ale skoro
      tworzę aplikację w podejściu &lt;span style="font-style: italic;"&gt;top-down&lt;/span&gt;, gdzie najpierw aplikacja a później baza danych, gdzie baza danych jest "czysta", nie mam innego wyboru.&lt;br /&gt;&lt;br /&gt;W kolejnym kroku podaję dane klasy encji &lt;span style="font-weight: bold;"&gt;Pytanie&lt;/span&gt;.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Class Name&lt;/span&gt;: Pytanie&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Package&lt;/span&gt;:
      pl.jaceklaskowski.pio.encja&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Ignoruję podpowiedź asystenta &lt;span style="font-style: italic;"&gt;"The project does not have a persistence unit. You need a persistence unit to persist entity classes"&lt;/span&gt;, gdyż "dostawcą" konfiguracji będzie aplikacja webowa, którą dopiero stworzymy, a projekt encji PioJPA poza użyciem adnotacji JPA nie będzie zależny od JPA. Nigdy nie wiadomo, gdzie ostatecznie zostanie użyty nasz projekt, a jeśli można go uniezależnić od
      użytego obecnie szkieletu programistycznego czy technologii tym lepiej dla późniejszego ponownego użycia.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_wSeV_DMR2uA/R-aG3bH3kzI/AAAAAAAAAow/T23NVC4EWH4/s1600-h/pytanie-entity.gif"&gt;&lt;img src="http://bp0.blogger.com/_wSeV_DMR2uA/R-aG3bH3kzI/AAAAAAAAAow/T23NVC4EWH4/s320/pytanie-entity.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180976708068021042"
      /&gt;&lt;/a&gt;Zatwierdzamy konfigurację przyciskiem &lt;span style="font-weight: bold;"&gt;Finish&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I tu pierwszy błąd NB 6.1 BETA - bez utworzenia PU zgodnie z podpowiedzią asystenta powoduje brak dodania biblioteki JPA i powoduje błąd składni klas (niedostępność użytych interfejsów JPA). Zgłoszone jako &lt;a href="http://www.netbeans.org/issues/show_bug.cgi?id=130858"&gt;130858: Using Entity Class wizard without creating PU leads to missing JPA interface
      errors&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Mamy kila możliwości obejścia tego błędu - skasować projekt i utworzyć go od nowa z jednoczesnym utworzeniem PU, ręcznie dodać bibliotekę JPA bądź ostatecznie stworzyć PU podczas tworzenia kolejnej encji, którą i tak mieliśmy utworzyć. Wybieramy jednak podejście numer 2, gdzie dodamy bibliotekę JPA i nie będziemy infekować projektu plikami jak persistence.xml, których i tak nie mieliśmy zamiaru używać. Czym mniej bałaganu tym lepiej.&lt;br /&gt;&lt;br
      /&gt;Wybieramy &lt;span style="font-weight: bold;"&gt;Properties&lt;/span&gt; z menu kontekstowego projektu PioJPA.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_wSeV_DMR2uA/R-aHXbH3k0I/AAAAAAAAAo4/42hz3FKMom4/s1600-h/piojpa-properties.gif"&gt;&lt;img src="http://bp0.blogger.com/_wSeV_DMR2uA/R-aHXbH3k0I/AAAAAAAAAo4/42hz3FKMom4/s320/piojpa-properties.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0"
      id="BLOGGER_PHOTO_ID_5180977257823834946" /&gt;&lt;/a&gt;&lt;br /&gt;Przechodzimy do &lt;span style="font-weight: bold;"&gt;Libraries&lt;/span&gt;, wciskamy przycisk &lt;span style="font-weight: bold;"&gt;Add Library...&lt;/span&gt; i po wybraniu biblioteki &lt;span style="font-weight: bold;"&gt;TopLink Essentials&lt;/span&gt; wciskamy przycisk &lt;span style="font-weight: bold;"&gt;Add Library&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://bp0.blogger.com/_wSeV_DMR2uA/R-aHnbH3k1I/AAAAAAAAApA/UbkHkFfUzgE/s1600-h/add-library.gif"&gt;&lt;img src="http://bp0.blogger.com/_wSeV_DMR2uA/R-aHnbH3k1I/AAAAAAAAApA/UbkHkFfUzgE/s320/add-library.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180977532701741906" /&gt;&lt;/a&gt;&lt;br /&gt;Wciskamy przycisk &lt;span style="font-weight: bold;"&gt;OK&lt;/span&gt; i problem "odpływa".&lt;br /&gt;&lt;br
      /&gt;Tworzę nową encję &lt;span style="font-weight: bold;"&gt;Odpowiedz&lt;/span&gt;. &lt;span style="font-weight: bold;"&gt;Ctrl+N&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Persistence &gt; Entity Class&lt;/span&gt;, gdzie podaję&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Class Name&lt;/span&gt;: Odpowiedz&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Package&lt;/span&gt;: pl.jaceklaskowski.pio.encja&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Wracam do klasy
      encji &lt;span style="font-weight: bold;"&gt;Pytanie&lt;/span&gt;, gdzie umieszczam kolekcję Odpowiedzi (typ java.util.List). Uzupełniam import za pomocą &lt;span style="font-weight: bold;"&gt;Ctrl+SPACE&lt;/span&gt; bądź alternatywnie &lt;span style="font-weight: bold;"&gt;Ctrl+Shift+I&lt;/span&gt; do uzupełnienia importu java.util.List.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_wSeV_DMR2uA/R-aIFrH3k2I/AAAAAAAAApI/a1yA0WcqmXQ/s1600-h/fix-all-imports.gif"&gt;&lt;img
      src="http://bp1.blogger.com/_wSeV_DMR2uA/R-aIFrH3k2I/AAAAAAAAApI/a1yA0WcqmXQ/s320/fix-all-imports.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180978052392784738" /&gt;&lt;/a&gt;&lt;br /&gt;Stawiam kursor w ciele klasy Pytanie, &lt;span style="font-weight: bold;"&gt;Alt+Insert&lt;/span&gt; i wybieram menu &lt;span style="font-weight: bold;"&gt;Getter and Setter...&lt;/span&gt; do utworzenia metod get (odczytującej) i
      set (modyfikującej) dla atrybutu odpowiedzi (można dodatkowo skorzystać ze spacji do oznaczenia atrybutu, dla którego będą tworzone metody, co zniesie konieczność korzystania z pomocy myszki).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_wSeV_DMR2uA/R-aIT7H3k3I/AAAAAAAAApQ/LZXHjBto-GM/s1600-h/getter-and-setter.gif"&gt;&lt;img src="http://bp2.blogger.com/_wSeV_DMR2uA/R-aIT7H3k3I/AAAAAAAAApQ/LZXHjBto-GM/s320/getter-and-setter.gif" alt="" style="margin: 0px auto 10px; display: block;
      text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180978297205920626" /&gt;&lt;/a&gt;Wybieram atrybut &lt;span style="font-weight: bold;"&gt;odpowiedzi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_wSeV_DMR2uA/R-aIdbH3k4I/AAAAAAAAApY/BnH9zRBCXnk/s1600-h/generate-getters-and-setters.gif"&gt;&lt;img src="http://bp0.blogger.com/_wSeV_DMR2uA/R-aIdbH3k4I/AAAAAAAAApY/BnH9zRBCXnk/s320/generate-getters-and-setters.gif" alt="" style="margin: 0px auto 10px;
      display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180978460414677890" /&gt;&lt;/a&gt;i wciskam przycisk &lt;span style="font-weight: bold;"&gt;Generate&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Zgodnie z komunikatem NB przy metodzie &lt;span style="font-weight: bold;"&gt;Pytanie.getOdpowiedzi()&lt;/span&gt; (&lt;span style="font-style: italic;"&gt;The multi-valued entity relation is not defined&lt;/span&gt;) dodaję adnotację &lt;span style="font-weight:
      bold;"&gt;@OneToMany&lt;/span&gt; do metody get.&lt;br /&gt;&lt;br /&gt;Dodaję kolejny atrybut &lt;span style="font-weight: bold;"&gt;tresc&lt;/span&gt; (typu String) do klasy encji Pytanie i Odpowiedz. Tworzę odpowiadające mu metody get i set w obu klasach za pomocą &lt;span style="font-weight: bold;"&gt;Alt+Insert&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Praca nad projektem PioJPA zakończona (mimo komunikatu ostrzegawczego, że mamy encje, ale nie mamy zdefiniowanej jednostki trwałej - &lt;span
      style="font-style: italic;"&gt;The project does not contain a persistence unit&lt;/span&gt;). Żegnam projekt PioJPA i przechodzę do utworzenia kolejnego - &lt;span style="font-weight: bold;"&gt;PioWeb&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl+Shirt+N&lt;/span&gt; i wybieram asystenta &lt;span style="font-weight: bold;"&gt;Web &gt; Web Application&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://bp1.blogger.com/_wSeV_DMR2uA/R-aL6rH3k5I/AAAAAAAAApg/_Mmst0A_lqc/s1600-h/web-application.gif"&gt;&lt;img src="http://bp1.blogger.com/_wSeV_DMR2uA/R-aL6rH3k5I/AAAAAAAAApg/_Mmst0A_lqc/s320/web-application.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180982261460734866" /&gt;&lt;/a&gt;&lt;br /&gt;W kolejnym kroku podaję:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Project
      Name&lt;/span&gt;: PioWeb&lt;/li&gt;&lt;/ul&gt;i rejestruję serwer aplikacyjny za pomocą przycisku &lt;span style="font-weight: bold;"&gt;Add...&lt;/span&gt; przy polu &lt;span style="font-weight: bold;"&gt;Server&lt;/span&gt;. Pozostawiam szczegóły tego kroku jako zadanie domowe.&lt;br /&gt;&lt;br /&gt;Ustawiam &lt;span style="font-weight: bold;"&gt;Context Path&lt;/span&gt; na &lt;span style="font-weight: bold;"&gt;/pio&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://bp2.blogger.com/_wSeV_DMR2uA/R-aSZ7H3lEI/AAAAAAAAAq4/gv6wvXJTzN8/s1600-h/pioweb-name-and-location.gif"&gt;&lt;img src="http://bp2.blogger.com/_wSeV_DMR2uA/R-aSZ7H3lEI/AAAAAAAAAq4/gv6wvXJTzN8/s320/pioweb-name-and-location.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180989395401413698" /&gt;&lt;/a&gt;&lt;br /&gt;Zatwierdzam przyciskiem &lt;span style="font-weight: bold;"&gt;Next &gt;&lt;/span&gt;. I
      jeszcze raz &lt;span style="font-weight: bold;"&gt;Next &gt;&lt;/span&gt;, aż pojawi się etap &lt;span style="font-weight: bold;"&gt;Frameworks&lt;/span&gt;, w którym wybieram &lt;span style="font-weight: bold;"&gt;Visual Web JavaServer Faces&lt;/span&gt;. Nigdy nie korzystałem z tej opcji, a naczytałem się, że jest to jedna z tych integracji, którą zespół NetBeans szczyci się szczególnie, więc pora jej skosztować.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://bp3.blogger.com/_wSeV_DMR2uA/R-aSjLH3lFI/AAAAAAAAArA/qJRWihjOqNE/s1600-h/visual-web-jsf.gif"&gt;&lt;img src="http://bp3.blogger.com/_wSeV_DMR2uA/R-aSjLH3lFI/AAAAAAAAArA/qJRWihjOqNE/s320/visual-web-jsf.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180989554315203666" /&gt;&lt;/a&gt;&lt;br /&gt;Zatwierdzam &lt;span style="font-weight: bold;"&gt;Finish&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Po dłużej chwili
      pojawia się nowy projekt &lt;span style="font-weight: bold;"&gt;PioWeb&lt;/span&gt; w widoku &lt;span style="font-weight: bold;"&gt;Projects&lt;/span&gt;. Zauważalnie dłużej trwa inicjowanie biblioteki &lt;span style="font-weight: bold;"&gt;Woodstock&lt;/span&gt;, która jak rozumiem jest fundamentem dla Visual Web JavaServer Faces w NetBeans.&lt;br /&gt;&lt;br /&gt;Związuję projekt PioWeb z PioJPA. PioJPA staje się biblioteką encji w projekcie PioWeb - menu kontekstowe &lt;span style="font-weight:
      bold;"&gt;Properties&lt;/span&gt; projektu PioWeb, a później wybieram &lt;span style="font-weight: bold;"&gt;Libraries&lt;/span&gt; i &lt;span style="font-weight: bold;"&gt;Add Project...&lt;/span&gt;, gdzie wybieram projekt PioJPA.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_wSeV_DMR2uA/R-aSuLH3lGI/AAAAAAAAArI/jWbpFSsQm-8/s1600-h/pioweb-libraries-piojpa.gif"&gt;&lt;img src="http://bp3.blogger.com/_wSeV_DMR2uA/R-aSuLH3lGI/AAAAAAAAArI/jWbpFSsQm-8/s320/pioweb-libraries-piojpa.gif" alt=""
      style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180989743293764706" /&gt;&lt;/a&gt;&lt;br /&gt;Teraz w końcu nadeszła pora na skorzystanie z dobrodziejstw funkcji &lt;span style="font-weight: bold;"&gt;JSF Pages from Entity Class&lt;/span&gt;. &lt;span style="font-weight: bold;"&gt;Ctrl+N&lt;/span&gt;, a następnie &lt;span style="font-weight: bold;"&gt;Persistence&lt;/span&gt; i &lt;span style="font-weight: bold;"&gt;JSF Pages from
      Entity Class&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_wSeV_DMR2uA/R-aS37H3lHI/AAAAAAAAArQ/9VLyRqrOSkI/s1600-h/jsf-pages-from-entity-class.gif"&gt;&lt;img src="http://bp2.blogger.com/_wSeV_DMR2uA/R-aS37H3lHI/AAAAAAAAArQ/9VLyRqrOSkI/s320/jsf-pages-from-entity-class.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180989910797489266" /&gt;&lt;/a&gt;&lt;br /&gt;Dodaję wszystkie dostępne encje -
      Odpowiedz i Pytanie za pomocą przycisku &lt;span style="font-weight: bold;"&gt;Add All &gt;&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_wSeV_DMR2uA/R-aTF7H3lII/AAAAAAAAArY/GQGIomRXTxY/s1600-h/entity-classes.gif"&gt;&lt;img src="http://bp2.blogger.com/_wSeV_DMR2uA/R-aTF7H3lII/AAAAAAAAArY/GQGIomRXTxY/s320/entity-classes.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180990151315657858"
      /&gt;&lt;/a&gt;&lt;br /&gt;Dopiero teraz utworzę jednostkę trwałą (&lt;span style="font-style: italic;"&gt;PU - persistence unit&lt;/span&gt;) dla mojej aplikacji za pomocą przycisku &lt;span style="font-weight: bold;"&gt;Create Persistence Unit...&lt;/span&gt; Tworzę nowe źródło danych na serwerze aplikacyjnym (w tym przypadku jest to GlassFish).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_wSeV_DMR2uA/R-aSO7H3lDI/AAAAAAAAAqw/x2mXUOmUWGA/s1600-h/new-data-source.gif"&gt;&lt;img
      src="http://bp2.blogger.com/_wSeV_DMR2uA/R-aSO7H3lDI/AAAAAAAAAqw/x2mXUOmUWGA/s320/new-data-source.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180989206422852658" /&gt;&lt;/a&gt;&lt;br /&gt;Podaję &lt;span style="font-weight: bold;"&gt;JNDI Name: jdbc/piodb&lt;/span&gt; oraz wybieram &lt;span style="font-weight: bold;"&gt;Database Connection&lt;/span&gt; z listy rozwijalnej, która wskazuje na bazę danych &lt;span
      style="font-weight: bold;"&gt;piodb&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Ciekawostką tego &lt;span style="font-weight: bold;"&gt;Create Persistence Unit&lt;/span&gt; w porównaniu z tym, które napotkałbym w &lt;span style="font-weight: bold;"&gt;Java Class Library&lt;/span&gt; jest sposób pobrania źródeł danych dla PU - w pierwszym (obecnie wykorzystywanym) przypadku będzie to lista źródeł z serwera aplikacyjnego, podczas, gdy w drugim przypadku będzie to lista zdefiniowana w NetBeans IDE w zakładce
      &lt;span style="font-weight: bold;"&gt;Services&lt;/span&gt;. Zawsze mi tego brakowało i nie jestem pewien, kiedy pojawiło się to rozróżnienie w NetBeans.&lt;br /&gt;&lt;br /&gt;Dodatkowo wybieram opcję &lt;span style="font-weight: bold;"&gt;Drop and Create&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_wSeV_DMR2uA/R-aSEbH3lCI/AAAAAAAAAqo/ijSBT6pVc1c/s1600-h/create-pu.gif"&gt;&lt;img
      src="http://bp0.blogger.com/_wSeV_DMR2uA/R-aSEbH3lCI/AAAAAAAAAqo/ijSBT6pVc1c/s320/create-pu.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180989026034226210" /&gt;&lt;/a&gt;&lt;br /&gt;Definicję jednostki trwałej zatwierdzam przyciskiem &lt;span style="font-weight: bold;"&gt;Create&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Przyciskiem &lt;span style="font-weight: bold;"&gt;Next &gt;&lt;/span&gt; przechodzę do kolejnego
      etapu asystenta &lt;span style="font-weight: bold;"&gt;JSF Pages from Entity Class&lt;/span&gt;. Przyciskiem &lt;span style="font-weight: bold;"&gt;Browse...&lt;/span&gt; wybieram katalog docelowy tworzonych stron JSF (pole &lt;span style="font-weight: bold;"&gt;JSF Pages Folder&lt;/span&gt;) i jako &lt;span style="font-weight: bold;"&gt;Package&lt;/span&gt; podaję &lt;span style="font-weight: bold;"&gt;pl.jaceklaskowski.pio.faces&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://bp3.blogger.com/_wSeV_DMR2uA/R-aR7LH3lBI/AAAAAAAAAqg/6cy-K1qJciM/s1600-h/generated-jsf-pages-and-classes.gif"&gt;&lt;img src="http://bp3.blogger.com/_wSeV_DMR2uA/R-aR7LH3lBI/AAAAAAAAAqg/6cy-K1qJciM/s320/generated-jsf-pages-and-classes.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180988867120436242" /&gt;&lt;/a&gt;&lt;br /&gt;Zatwierdzam przyciskiem &lt;span style="font-weight:
      bold;"&gt;Finish&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I tu niespodzianka. Mimo, że wybrałem pakiet &lt;span style="font-weight: bold;"&gt;pl.jaceklaskowski.pio.faces&lt;/span&gt; jako pakiet klas JSF to i tak ostatecznie asystent umieścił niektóre z nich w pakiecie &lt;span style="font-weight: bold;"&gt;pioweb&lt;/span&gt; i dodatkowo utworzył puste pakiety &lt;span style="font-weight: bold;"&gt;pioweb.odpowiedz&lt;/span&gt; oraz &lt;span style="font-weight: bold;"&gt;pioweb.pytanie&lt;/span&gt;.
      Zgłosiłem jako &lt;a href="http://www.netbeans.org/issues/show_bug.cgi?id=130861"&gt;130861: JSF Pages from Entity Class generates classes in package as project name&lt;/a&gt; oraz &lt;a href="http://www.netbeans.org/issues/show_bug.cgi?id=130862"&gt;130862: JSF Pages from Entity Class wizard creates empty packages&lt;/a&gt;. I na koniec jeszcze jeden błąd, gdzie klasy tworzone są w pakiecie "krótszym" od podanego, tj. pl.jaceklaskowski.pio, który okazał się być pojedyńczym katalogiem o nazwie
      pl.jaceklaskowski.pio.faces - &lt;a href="http://www.netbeans.org/issues/show_bug.cgi?id=130863"&gt;130863: JSF Pages from Entity Class generates classes in a "shorter" package that's a single directory&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Rozwiązaniem tych niespodzianek jest zaniechanie podania własnego katalogu dla tworzonych klas bądź utworzenie pakietu własnoręcznie i przeniesienie do niego klas. Wybieram podejście drugie i przeniosę klasy do pakietu pioweb (refaktoryzacja &lt;span
      style="font-weight: bold;"&gt;Move Classes&lt;/span&gt;). I tu kolejna niespodzianka - &lt;a href="http://www.netbeans.org/issues/show_bug.cgi?id=130864"&gt;130864: NPE upon Move Classes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Nie pozostaje nic innego jak skasować projekt PioWeb i stworzyć go od nowa, bez specyfikowania pakietu.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;UWAGA&lt;/span&gt;: Czasami skasowanie projektu nie kasuje jego katalogu mimo zaznaczenia opcji &lt;span
      style="font-weight: bold;"&gt;Also Delete Sources Under...&lt;/span&gt;&lt;br /&gt;I tutaj jeszcze kolejna niespodzianka - podczas tworzenia projektu o tej samej nazwie otrzymałem zbiór wjątków NPE oraz IAE - &lt;a href="http://www.netbeans.org/issues/show_bug.cgi?id=130865"&gt;130865: NPE and IAE upon creating a visual jsf web project after it's been deleted&lt;/a&gt;. Mimo wszystko projekt się utworzył. Zamknąłem jednak NetBeans IDE 6.1 i otworzyłem go ponownie wcześniej kasując projekt PioWeb z
      poziomu Exploratora Windows. Tym razem obyło się bez niespodzianek.&lt;br /&gt;&lt;br /&gt;Pora na uruchomienie aplikacji webowej PioWeb. Wybieram menu kontekstowe &lt;span style="font-weight: bold;"&gt;Run&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_wSeV_DMR2uA/R-aRsrH3lAI/AAAAAAAAAqY/BD13TpJrkqU/s1600-h/pioweb-run.gif"&gt;&lt;img src="http://bp1.blogger.com/_wSeV_DMR2uA/R-aRsrH3lAI/AAAAAAAAAqY/BD13TpJrkqU/s320/pioweb-run.gif" alt="" style="margin: 0px auto 10px;
      display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180988618012333058" /&gt;&lt;/a&gt;&lt;br /&gt;Projekt otworzy domyślną stronę startową aplikacji, więc nie ma zaskoczenia, kiedy pojawi się pusta strona w przglądarce. Przechodzimy do strony, gdzie utworzymy kilka nowych odpowiedzi - &lt;a href="http://localhost:8080/pio/faces/odpowiedz/New.jsp"&gt;http://localhost:8080/pio/faces/odpowiedz/New.jsp&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://bp3.blogger.com/_wSeV_DMR2uA/R-aRgLH3k_I/AAAAAAAAAqQ/UQTaqSZv1qg/s1600-h/new-odpowiedz.gif"&gt;&lt;img src="http://bp3.blogger.com/_wSeV_DMR2uA/R-aRgLH3k_I/AAAAAAAAAqQ/UQTaqSZv1qg/s320/new-odpowiedz.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180988403263968242" /&gt;&lt;/a&gt;&lt;br /&gt;Wybranie akcji &lt;span style="font-weight: bold;"&gt;Create&lt;/span&gt; kończy się jednakże błędem, który okazuje
      się być związany z niepełną konfiguracją JPA - brakiem wskazania klas encji w PU.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_wSeV_DMR2uA/R-aRVrH3k-I/AAAAAAAAAqI/Q59JJ8LG-6U/s1600-h/new-odpowiedz-error.gif"&gt;&lt;img src="http://bp1.blogger.com/_wSeV_DMR2uA/R-aRVrH3k-I/AAAAAAAAAqI/Q59JJ8LG-6U/s320/new-odpowiedz-error.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180988222875341794" /&gt;&lt;/a&gt;&lt;br
      /&gt;Wracam do NetBeans, gdzie do pliku &lt;span style="font-weight: bold;"&gt;persistence.xml&lt;/span&gt; w projekcie &lt;span style="font-weight: bold;"&gt;PioWeb&lt;/span&gt; dodaję klasy encji. Ten błąd wynika z faktu, że encje są w innym projekcie, więc niekoniecznie klasyfikuję to jako błąd w NetBeans.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_wSeV_DMR2uA/R-aRMbH3k9I/AAAAAAAAAqA/Qj76wrwHzzY/s1600-h/piowebpu-includeentityclasses.gif"&gt;&lt;img
      src="http://bp0.blogger.com/_wSeV_DMR2uA/R-aRMbH3k9I/AAAAAAAAAqA/Qj76wrwHzzY/s320/piowebpu-includeentityclasses.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180988063961551826" /&gt;&lt;/a&gt;&lt;br /&gt;Po zmianie wybieram menu kontekstowe &lt;span style="font-weight: bold;"&gt;Undeploy and Deploy&lt;/span&gt; i ponownie tworzę odpowiedź.&lt;br /&gt;&lt;br /&gt;&lt;a
      href="http://bp3.blogger.com/_wSeV_DMR2uA/R-aQ-LH3k8I/AAAAAAAAAp4/bQv0effbI3c/s1600-h/nowa-odpowiedz.gif"&gt;&lt;img src="http://bp3.blogger.com/_wSeV_DMR2uA/R-aQ-LH3k8I/AAAAAAAAAp4/bQv0effbI3c/s320/nowa-odpowiedz.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180987819148415938" /&gt;&lt;/a&gt;&lt;br /&gt;Teraz pora na nowe pytania, czyli przechodzę do strony &lt;a
      href="http://localhost:8080/pio/faces/pytanie/New.jsp"&gt;http://localhost:8080/pio/faces/pytanie/New.jsp&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Myliłby się ten, kto uważałby, że tutaj pójdzie gładko ;-) Na konsoli GF pojawi się następujący błąd:&lt;pre&gt;Caused by: javax.el.PropertyNotFoundException: The class 'pioweb.PytanieController' does not have the property 'odpowiedziOfPytanie'.&lt;br /&gt; at javax.el.BeanELResolver.getBeanProperty(BeanELResolver.java:547)&lt;br /&gt; at
      javax.el.BeanELResolver.getValue(BeanELResolver.java:249)&lt;br /&gt; at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143)&lt;br /&gt; at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:64)&lt;br /&gt; at com.sun.el.parser.AstValue.getValue(AstValue.java:138)&lt;br /&gt; at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:206)&lt;br /&gt; at javax.faces.component.UIOutput.getValue(UIOutput.java:173)&lt;br /&gt; ... 57
      more&lt;/pre&gt;Zgłaszam kolejny błąd do bazy zgłoszeń NB - &lt;a href="http://www.netbeans.org/issues/show_bug.cgi?id=130867"&gt;130867: PNFE : The class 'pioweb.PytanieController' does not have the property 'odpowiedziOfPytanie'&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Rozwiązanie to dodanie atrybutu &lt;span style="font-weight: bold;"&gt;odpowiedziOfPytanie&lt;/span&gt; do klasy ziarna &lt;span style="font-weight: bold;"&gt;pioweb.PytanieController&lt;/span&gt; (pole private List&amp;lt;Odpowiedz&gt;
      odpowiedziOfPytanie z metodami set i get). Ponownie &lt;span style="font-weight: bold;"&gt;Undeploy and Deploy&lt;/span&gt;, utworzenie odpowiedzi i podejście do utworzenia pytania.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_wSeV_DMR2uA/R-aQxbH3k7I/AAAAAAAAApw/uGRc22YGURI/s1600-h/nowe-pytanie.gif"&gt;&lt;img src="http://bp0.blogger.com/_wSeV_DMR2uA/R-aQxbH3k7I/AAAAAAAAApw/uGRc22YGURI/s320/nowe-pytanie.gif" alt="" style="margin: 0px auto 10px; display: block; text-align: center;
      cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180987600105083826" /&gt;&lt;/a&gt;&lt;br /&gt;Wstrzymanie oddechu, wciśnięcie &lt;span style="font-weight: bold;"&gt;Create&lt;/span&gt; i...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_wSeV_DMR2uA/R-aQPLH3k6I/AAAAAAAAApo/Z_Gg6_iw2KI/s1600-h/pytanie-created.gif"&gt;&lt;img src="http://bp3.blogger.com/_wSeV_DMR2uA/R-aQPLH3k6I/AAAAAAAAApo/Z_Gg6_iw2KI/s320/pytanie-created.gif" alt="" style="margin: 0px auto 10px; display: block;
      text-align: center; cursor: pointer;" border="0" id="BLOGGER_PHOTO_ID_5180987011694564258" /&gt;&lt;/a&gt;...tym razem udało się - pytanie utworzone! Nie było łatwo, ale wierzę, że przed produkcyjną wersją NetBeans IDE 6.1 wszystkie zgłoszone problemy zostaną rozwiązane. Fajnie jest mieć możliwość szybkiego utworzenia w pełni działającej aplikacji opartej o JPA i JSF, więc już nie mogę doczekać się pozamykania zgłoszeń i ogłoszeniu, że to, co znamy z Ruby on Rails czy JBoss Seam mamy i w NetBeans IDE
      6.1 (nie pamiętam, czy przypadkiem podobnej funkcjonalności nie ma już w Eclipse czy jego rozbudowanym krewnym IBM Rational Application Developer 7.5 BETA).&lt;br /&gt;&lt;br /&gt;Pytanie na zakończenie dla wytrwałych czytelników, którzy mają przyjemność czytać to: &lt;span style="font-style: italic;"&gt;Dlaczego w polu Odpowiedzi pojawiło się pl.jaceklaskowski.pio.encja.Odpowiedz[id=1] zamiast treści odpowiedzi?&lt;/span&gt; Na szczęśliwych zwycięzców &lt;span style="font-weight:
      bold;"&gt;nie&lt;/span&gt; czekają nagrody.&lt;br /&gt;&lt;br /&gt;Aplikacja &lt;span style="font-weight: bold;"&gt;Pytania i Odpowiedzi (PiO)&lt;/span&gt; w postaci projektów NetBeans dostępna jest jako &lt;a href="http://www.jaceklaskowski.pl/aplikacje/pio-netbeansprojects.zip"&gt;pio-netbeansprojects.zip&lt;/a&gt;.&lt;br /&gt;</description>
      <pubDate>Mon, 14 Apr 2008 19:33:43 +0000</pubDate>
    </item>
    <item>
      <title>Marek Kliś - różności okołojavowe i nie tylko: Netbeans Platform - materiały z prelekcji</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-62160705063034256.post-6231307800865773477</guid>
      <link>http://marekklis.blogspot.com/2008/04/netbeans-platform-materiay-z-prelekcji.html</link>
      <description>Jeśli ktoś ma ochotę to można się zapoznać z przykładowym &lt;a href="http://marek.klis.googlepages.com/NetBeansDaySuite.zip"&gt;projektem aplikacji&lt;/a&gt; zbudowanej na &lt;a href="http://platform.netbeans.org"&gt;platformie NetBeans&lt;/a&gt;, który przedstawiałem w ramach &lt;a href="http://www.netbeansday.pl"&gt;NetBeans Day&lt;/a&gt; w Krakowie i Wrocławiu. Dostępna jest także &lt;a href="http://marek.klis.googlepages.com/NetBeansDay.pdf"&gt;prezentacja&lt;/a&gt;.&lt;br
      /&gt;Przykładowy program został troszkę zmieniony - zdjęcia prelegentów zostały zamienione gdyż używałem ich bez zgody prowadzących.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/62160705063034256-6231307800865773477?l=marekklis.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 14 Apr 2008 19:15:06 +0000</pubDate>
    </item>
    <item>
      <title>Marek Kliś - różności okołojavowe i nie tylko: NetBeans RoadShow to już historia</title>
      <guid isPermaLink="false">tag:blogger.com,1999:blog-62160705063034256.post-1670460623209394321</guid>
      <link>http://marekklis.blogspot.com/2008/04/netbeans-roadshow-to-ju-historia.html</link>
      <description>Dzisiaj zakończyła się &lt;a href="http://www.netbeansday.pl"&gt;polska edycja NetBeans World Tour 2007-2008&lt;/a&gt;. Czy impreza była udana? Wg mnie tak. Choćby dlatego, że zdobyłem szlify jako prelegent ;) A czy mój wykład na temat &lt;a href="http://platform.netbeans.org"&gt;platformy NetBeans&lt;/a&gt; można zaliczyć do udanych to już nie mnie oceniać. Sądząc po ilości ziewających to jeszcze dużo przede mną do nauki - ale jak to powiedział &lt;a
      href="http://jaceklaskowski.pl"&gt;Jacek Laskowski&lt;/a&gt; "ziewający słuchacze to wina poprzednich prelegentów, którzy ich wynudzili" ;)&lt;br /&gt;Chciałbym jeszcze zauważyć, że niedawno ukazała sie kolejna odsłona NetBeans - &lt;a href="http://download.netbeans.org/netbeans/6.1/rc/"&gt;6.1 Release Candidate&lt;/a&gt;. Moja prelekcja we Wrocławiu zawierała już przykład stworzony właśnie na tym wydaniu. Z ciekawostek jakie zauważyłem to choćby nowy szablon projektu aplikacji opartej na
      platformie.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SAJc_czP6cI/AAAAAAAAAMI/ZfIVAR_gxC8/s1600-h/NBPlatformApplication.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SAJc_czP6cI/AAAAAAAAAMI/ZfIVAR_gxC8/s320/NBPlatformApplication.jpg" alt="" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand;" border="0" id="BLOGGER_PHOTO_ID_5188811965816891842" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img
      src="https://blogger.googleusercontent.com/tracker/62160705063034256-1670460623209394321?l=marekklis.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt;</description>
      <pubDate>Sun, 13 Apr 2008 19:23:48 +0000</pubDate>
    </item>
  </channel>
</rss>
