<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-201958534690070286</id><updated>2011-12-19T00:02:32.047+01:00</updated><category term='praktyki'/><category term='hibernate'/><category term='rmi'/><category term='wzorce projektowe'/><category term='robocode'/><category term='postgresql'/><category term='jsf'/><category term='websphere'/><category term='di'/><category term='junit'/><category term='współbieżność'/><category term='cdi'/><category term='eclipse'/><category term='książki'/><category term='web services'/><category term='certyfikaty'/><category term='db2'/><category term='kerberos'/><category term='jax-ws'/><category term='różne'/><category term='netbeans'/><title type='text'>Marek Szpak - Zapiski młodego programisty</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>29</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-4692928368102501064</id><published>2011-01-10T17:33:00.011+01:00</published><updated>2011-01-10T21:08:54.598+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='di'/><category scheme='http://www.blogger.com/atom/ns#' term='cdi'/><title type='text'>Wrażenia po lekturze specyfikacji "Contexts and Dependency Injection" (JSR-299)</title><content type='html'>Chęć przystąpienia do lektury specyfikacji &lt;span style="font-style:italic;"&gt;"Contexts and Dependency Injection"&lt;/span&gt; stanowiła dla mnie doskonałą motywację, aby dowiedzieć się czegoś więcej na temat samego wstrzykiwania zależności (&lt;span style="font-style:italic;"&gt;Dependency Injection&lt;/span&gt;), dotychczas zdawałem sobie jedynie sprawę&lt;br/&gt;z faktu istnienia takiego wzorca. Szukając dobrego źródła wiedzy odnośnie &lt;span style="font-style:italic;"&gt;DI&lt;/span&gt; natrafiłem na artykuł &lt;span style="font-style:italic;"&gt;Martina Fowlera&lt;/span&gt; pt. &lt;span style="font-style:italic;"&gt;"Inversion of Control Containers and the Dependency Injection pattern"&lt;/span&gt;, dzięki któremu bardzo szybko pojąłem, z czym mam do czynienia. &lt;br /&gt;&lt;br /&gt;Z zamiarem przygotowania się do zgłębienia tajników &lt;span style="font-style:italic;"&gt;JSR-299&lt;/span&gt;&lt;br/&gt;(już uzbrojony w wiedzę na temat &lt;span style="font-style:italic;"&gt;DI&lt;/span&gt;) przeszedłem do lektury &lt;span style="font-style:italic;"&gt;&lt;br/&gt;"The Java EE 6 Tutorial"&lt;/span&gt;, a mianowicie rozdziału 18 pt. &lt;span style="font-style:italic;"&gt;"Introduction to Contexts and Dependency Injection for the Java EE Platform"&lt;/span&gt;,&lt;br/&gt;który był na tyle krótki, że zdecydowałem się sięgnąć jeszcze po artykuł &lt;span style="font-style:italic;"&gt;Michała Ormana&lt;/span&gt; pt. &lt;span style="font-style:italic;"&gt;"Kontekstowe komponenty w J2EE 6 - Wstrzykiwanie zależności"&lt;/span&gt;. Posiadając elementarną wiedzę na temat poruszanych przez specyfikację &lt;span style="font-style:italic;"&gt;CDI&lt;/span&gt; zagadnień, wraz z optymistycznym nastawieniem postanowiłem wydrukować omawiany dokument.&lt;br /&gt;&lt;br /&gt;Lekturę specyfikacji &lt;span style="font-style:italic;"&gt;JSR-299&lt;/span&gt; ukończyłem wczoraj, zatem moje przemyślenia są jeszcze bardzo świeże, aczkolwiek przyznam,&lt;br/&gt;że jestem pod wrażeniem możliwości prezentowanych przez &lt;span style="font-style:italic;"&gt;CDI&lt;/span&gt;. Analizując zdobywaną wiedzę wielokrotnie starałem się wyobrazić sobie praktyczne zastosowania prezentowanych przez specyfikację rozwiązań, co skłoniło mnie do sformułowania tezy, że kluczem do poznania prawdziwych możliwości &lt;span style="font-style:italic;"&gt;CDI&lt;/span&gt; jest przede wszystkim praktyka. Liczę, że moje entuzjastyczne nastawienie pogłębi się&lt;br/&gt;wraz z przyszłym doświadczeniem praktycznym a spojrzenie na całość z perspektywy czasu przyniesie ze sobą kilka interesujących spostrzeżeń. &lt;br /&gt;&lt;br /&gt;Możliwości &lt;span style="font-style:italic;"&gt;CDI&lt;/span&gt; interesują mnie (zwłaszcza teraz po lekturze specyfikacji) szczególnie w odniesieniu do technologii &lt;span style="font-style:italic;"&gt;JavaServer Faces&lt;/span&gt; w wersji &lt;span style="font-style:italic;"&gt;2.0&lt;/span&gt;. Mam zamiar przyjrzeć się temu duetowi nieco bliżej w ramach odskoczni od codziennych obowiązków, zwłaszcza tych akademickich w jakże niekomfortowym dla nas, studentów okresie zbliżającej się sesji. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Przydatne odnośniki:&lt;/span&gt;&lt;br /&gt;&lt;li/&gt;&lt;a href="http://www.martinfowler.com/articles/injection.html"&gt;Martin Fowler - Inversion of Control Containers and the Dependency Injection pattern&lt;/a&gt;&lt;br /&gt;&lt;li/&gt;&lt;a href="http://download.oracle.com/javaee/6/tutorial/doc/giwhb.html"&gt;The Java EE 6 Tutorial - Chapter 18. Introduction to Contexts and Dependency Injection for the Java EE Platform&lt;/a&gt;&lt;br /&gt;&lt;li/&gt;&lt;a href="http://michalorman.pl/blog/2009/11/kontekstowe-komponenty-w-j2ee-6-wstrzykiwanie-zaleznosci/"&gt;Michał Orman - Kontekstowe komponenty w J2EE 6 - Wstrzykiwanie zależności&lt;/a&gt;&lt;br /&gt;&lt;li/&gt;&lt;a href="http://jcp.org/aboutJava/communityprocess/final/jsr299/index.html"&gt;JSR-299: Contexts and Dependency Injection for the Java EE platform&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-4692928368102501064?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/4692928368102501064/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=4692928368102501064' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/4692928368102501064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/4692928368102501064'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2011/01/wrazenia-po-lekturze-specyfikacji.html' title='Wrażenia po lekturze specyfikacji &quot;Contexts and Dependency Injection&quot; (JSR-299)'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-1789851694669957544</id><published>2010-12-21T23:20:00.006+01:00</published><updated>2010-12-21T23:26:31.183+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='certyfikaty'/><category scheme='http://www.blogger.com/atom/ns#' term='db2'/><title type='text'>DB2 9.7 Bootcamp and Oracle to DB2 9.7 Migration Clinic</title><content type='html'>Wraz z kolegami z uczelni postanowiłem wziąć udział &lt;br/&gt;w organizowanym w Krakowie (13.12 - 16.12) przez &lt;span style="font-style:italic;"&gt;IBM Polska&lt;/span&gt; czterodniowym szkoleniu &lt;span style="font-style:italic;"&gt;"DB2 9.7 Bootcamp and Oracle to DB2 9.7 Migration Clinic"&lt;/span&gt;. Podejmując decyzję o wyjeździe liczyłem, &lt;br/&gt;że podczas pobytu w Krakowie poza uzyskaniem solidnej dawki nowej wiedzy, będę miał również możliwość spotkać się ze studentami &lt;br/&gt;z innych uczelni. Jednak zainteresowanie ze strony studentów było niewielkie, poza naszą piątką pojawił się wyłącznie jeden student &lt;br/&gt;z Uniwersytetu Adama Mickiewicza w Poznaniu.&lt;br /&gt;&lt;br /&gt;Istotną zaletę szkolenia w moim odczuciu stanowił fakt, &lt;br/&gt;iż w przypadku omawianych tematów, z którymi miałem okazję zapoznać się już wcześniej podczas &lt;span style="font-style:italic;"&gt;"DB2 Academic Associate Workshop"&lt;/span&gt;, poziom wiedzy zawarty w prezentacjach oraz &lt;br/&gt;w przygotowanych laboratoriach był rozszerzony o nieomawiane wcześniej zagadnienia. W ten sposób my studenci mieliśmy możliwość nie tylko utrwalić swoją wiedzę, ale również dowiedzieć się czegoś nowego. Na szczęście tematów całkowicie nam wcześniej nieznanych nie brakowało, dzięki czemu każdy z nas wrócił do Zielonej Góry &lt;br/&gt;z wiedzą znacznie większą od tej, z którą ją opuszczał.&lt;br /&gt;&lt;br /&gt;Trzeciego dnia otrzymaliśmy możliwość przystąpienia do testu &lt;br/&gt;&lt;span style="font-style:italic;"&gt;"M45 IBM Information Management DB2 Technical Mastery"&lt;/span&gt;, &lt;br/&gt;który sprawdzał naszą ogólną wiedzę odnośnie &lt;span style="font-style:italic;"&gt;DB2&lt;/span&gt;. W moim przypadku test potrwał 20 minut a pytania nie sprawiły większego problemu. Uzyskany wynik - 78%.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Test Title: M45 IBM Information Management DB2 Technical Mastery v2&lt;br /&gt;Start time: 12/15/2010 2:07:57 PM (GMT+0:00) (cst)&lt;br /&gt;End time: 12/15/2010 2:27:35 PM (GMT+0:00) (cst)&lt;br /&gt;Passing Score: 62%&lt;br /&gt;Your Score: Pass (78.12%)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Kolejnego dnia wręczono nam certyfikaty poświadczające ukończenie szkolenia oraz otrzymaliśmy możliwość przystąpienia do egzaminu na certyfikat &lt;span style="font-style:italic;"&gt;"IBM Certified Database Associate - DB2 9 Fundamentals"&lt;/span&gt;, który jest już trudniejszy od egzaminu zdawanego w ramach &lt;span style="font-style:italic;"&gt;"DB2 Academic Associate Workshop"&lt;/span&gt;. Trudniejszy z pewnością ze względu na wymóg jeszcze bardziej wnikliwszej analizy pytań - a może to stres, że zabraknie czasu na udzielenie wszystkich odpowiedzi również zrobił swoje? Na szczęście z konfrontacji z egzaminem o numerze 730 wyszedłem obronną ręką. Wynik - 68% klasyfikuję jako zadowalający, zwłaszcza biorąc pod uwagę, że bazy danych nie wzbudzają we mnie aż takiej pasji jaka towarzyszy programowaniu :)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JTOy9QLON1g/TP01IIOmXnI/AAAAAAAAAIo/4-ddR0y11bE/s1600/db2-cert.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 168px; height: 70px;" src="http://2.bp.blogspot.com/_JTOy9QLON1g/TP01IIOmXnI/AAAAAAAAAIo/4-ddR0y11bE/s400/db2-cert.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5547648729754263154" /&gt;&lt;/a&gt;&lt;span style="font-style:italic;"&gt;Test Title: 000-730, DB2 9 Fundamentals&lt;br /&gt;Start time: 12/16/2010 2:33:05 PM (GMT+0:00) (cst)&lt;br /&gt;End time: 12/16/2010 3:52:57 PM (GMT+0:00) (cst)&lt;br /&gt;Passing Score: 59%&lt;br /&gt;Your Score: Pass - 68.75% (44 earned out of 64 possible)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pobyt w Krakowie wspominać będę bardzo miło, przede wszystkim za sprawą przyjaznej atmosfery podczas szkolenia, za co podziękowania należą się szczególnie organizatorom. Dzięki &lt;span style="font-style:italic;"&gt;PKP&lt;/span&gt; atrakcji podczas samej podróży również nie brakowało, co tylko nadaje niezapomniany charakter wyprawie. Swoją drogą ciekawe jak długo jeszcze &lt;span style="font-style:italic;"&gt;PKP&lt;/span&gt; będzie nas zaskakiwać :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Więcej informacji odnośnie szkolenia oraz testów:&lt;/span&gt;&lt;br /&gt;&lt;li/&gt;&lt;a href="http://www.ibm.com/developerworks/wikis/display/im/DB2+9.7+Bootcamp+and+Oracle+to+DB2+9.7+Migration+Clinic/"&gt;DB2 9.7 Bootcamp and Oracle to DB2 9.7 Migration Clinic&lt;/a&gt;&lt;br /&gt;&lt;li/&gt;&lt;a href="http://www-03.ibm.com/certify/mastery_tests/ovrM45.shtml"&gt;Test M45: IBM Information Management DB2 Technical Mastery v2&lt;/a&gt;&lt;br /&gt;&lt;li/&gt;&lt;a href="http://www-03.ibm.com/certify/tests/obj730.shtml"&gt;Test 000-730: DB2 9 Family Fundamentals&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-1789851694669957544?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/1789851694669957544/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=1789851694669957544' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/1789851694669957544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/1789851694669957544'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/12/db2-97-bootcamp-and-oracle-to-db2-97.html' title='DB2 9.7 Bootcamp and Oracle to DB2 9.7 Migration Clinic'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_JTOy9QLON1g/TP01IIOmXnI/AAAAAAAAAIo/4-ddR0y11bE/s72-c/db2-cert.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-351031591840891247</id><published>2010-12-06T19:55:00.010+01:00</published><updated>2010-12-11T17:22:01.989+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='certyfikaty'/><category scheme='http://www.blogger.com/atom/ns#' term='db2'/><title type='text'>DB2 Academic Associate Workshop</title><content type='html'>W ubiegłym tygodniu (29.11 - 1.12) miałem przyjemność wziąć udział w szkoleniu organizowanym przez &lt;span style="font-style:italic;"&gt;IBM Polska&lt;/span&gt;, którego celem było zapoznanie słuchaczy (wyłącznie społeczność akademicką) z &lt;span style="font-style:italic;"&gt;DB2 9.7&lt;/span&gt; dla systemów &lt;span style="font-style:italic;"&gt;Linux, UNIX i Windows&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;Podczas trzydniowego szkolenia, na które składały się tematyczne laboratoria powiązane z poprzedzającymi je prezentacjami, mieliśmy możliwość odświeżyć swoją wiedzę na temat np. relacyjnego modelu danych czy języka &lt;span style="font-style:italic;"&gt;SQL&lt;/span&gt; oraz dowiedzieć się o zupełnie nowych rozwiązaniach np. o technologii &lt;span style="font-style:italic;"&gt;pureXML&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Całość zwieńczona była egzaminem na certyfikat &lt;span style="font-style:italic;"&gt;"DB2 9 Database and Application Fundamentals"&lt;/span&gt;, jedynym egzaminem jak dotąd, który zdawałem na uczelni drogą elektroniczną i bez przysługującej poprawki :) Jak wynik? Myślę, że nie mam powodów, aby się wstydzić aczkolwiek mogło być lepiej - 73% co przy 60% progu zdawalności stanowi nienajgorszy rezultat.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JTOy9QLON1g/TP01IIOmXnI/AAAAAAAAAIo/4-ddR0y11bE/s1600/db2-cert.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 168px; height: 70px;" src="http://2.bp.blogspot.com/_JTOy9QLON1g/TP01IIOmXnI/AAAAAAAAAIo/4-ddR0y11bE/s400/db2-cert.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5547648729754263154" /&gt;&lt;/a&gt;&lt;span style="font-style:italic;"&gt;Test Title: 000-302 DB2 9 Database and Application Fundamentals&lt;br /&gt;Start time: 12/1/2010 1:53:26 PM (GMT+0:00) (cst)&lt;br /&gt;End time: 12/1/2010 2:51:47 PM (GMT+0:00) (cst)&lt;br /&gt;Passing Score: 60%&lt;br /&gt;Your Score: Pass - 73.33% (44 earned out of 60 possible)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Na szczególne uznanie zasługuje wspaniała integracja między uczestnikami szkolenia, która miała miejsce przede wszystkim podczas dłuższych przerw obiadowych, gdzie organizacja smacznego posiłku w sympatycznym towarzystwie przybierała formę codziennego rytuału.&lt;br /&gt;&lt;br /&gt;Wspomnieć należałoby również, że w Zielonej Górze ogólna zdawalność egzaminu wg nieoficjalnego źródła (czyli wg zaawansowanych obliczeń mających miejsce zaraz po egzaminie, polegających na zliczaniu uśmiechniętych uczestników) wyniosła ponad 80% - moim zdaniem wynik również nienajgorszy.&lt;br /&gt;&lt;br /&gt;Dodam jeszcze, że osoby zainteresowane tematyką szkolenia mają możliwość uzyskać więcej informacji odwiedzając następującą witrynę: &lt;a href="https://www.ibm.com/developerworks/wikis/display/im/DB2+Academic+Associate+Workshop"&gt;DB2 Academic Associate Workshop&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-351031591840891247?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/351031591840891247/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=351031591840891247' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/351031591840891247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/351031591840891247'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/12/db2-academic-associate-workshop.html' title='DB2 Academic Associate Workshop'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_JTOy9QLON1g/TP01IIOmXnI/AAAAAAAAAIo/4-ddR0y11bE/s72-c/db2-cert.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-99788225331479801</id><published>2010-12-03T17:53:00.011+01:00</published><updated>2010-12-03T22:37:39.584+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='książki'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><title type='text'>Pierwszy kontakt z technologią JavaServer Faces</title><content type='html'>Jeżeli miałbym rozpatrywać ubiegły miesiąc pod względem skuteczności zdobywania przeze mnie wiedzy, śmiało zakwalifikowałbym listopad jako bardzo udany. Swoją aktywność przede wszystkim (ale nie tylko!) skupiłem wokoło technologii &lt;span style="font-style:italic;"&gt;JavaServer Faces&lt;/span&gt;. &lt;br&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JTOy9QLON1g/TPkg1oNWYxI/AAAAAAAAAIY/a1t_Fk28_W8/s1600/jsfecg.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 125px; height: 163px;" src="http://4.bp.blogspot.com/_JTOy9QLON1g/TPkg1oNWYxI/AAAAAAAAAIY/a1t_Fk28_W8/s400/jsfecg.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5546500521782043410" /&gt;&lt;/a&gt;Przygoda z &lt;span style="font-style:italic;"&gt;JSF&lt;/span&gt; rozpoczęła się w moim przypadku od lektury podręcznika pt. &lt;span style="font-style:italic;"&gt;"JavaServer Faces i Eclipse Galileo. Tworzenie aplikacji WWW"&lt;/span&gt;. Wybór książki mającej na celu wprowadzić mnie w świat technologii &lt;span style="font-style:italic;"&gt;JSF&lt;/span&gt; nie był zupełnie przypadkowy, autor w/w pozycji dr inż. Andrzej Marciniak jest pracownikiem naukowo-dydaktycznym Uniwersytetu Zielonogórskiego &lt;br&gt;a co ważniejsze, szczególnie dla mnie, promotorem mojej przyszłej pracy inżynierskiej. &lt;br /&gt;&lt;br /&gt;Pozostając w zgodzie z samym sobą, jestem w stanie szczerze przyznać, że lektura podręcznika była dla mnie połączeniem przyjemnego z pożytecznym, ponieważ zdobyta wiedza z pewnością znajdzie swoje zastosowanie również przy projektach realizowanych na uczelni, np. w ramach przedmiotu &lt;span style="font-style:italic;"&gt;"Zaawansowane technologie usług sieciowych"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Istotna informacja - wiedza zawarta w podręczniku opiera się na technologii &lt;span style="font-style:italic;"&gt;JSF&lt;/span&gt; w wersji &lt;span style="font-style:italic;"&gt;1.2&lt;/span&gt; , natomiast wybrane różnice pomiędzy wersją &lt;span style="font-style:italic;"&gt;1.2&lt;/span&gt; a &lt;span style="font-style:italic;"&gt;2.0&lt;/span&gt; zostały wypunktowane w &lt;span style="font-style:italic;"&gt;Dodatku B&lt;/span&gt;. Osobom chcącym bardziej przyjrzeć się nowym rozwiązaniom wprowadzonym przez &lt;span style="font-style:italic;"&gt;JSF2&lt;/span&gt; mogę polecić przegląd nowości, którego forma bardzo przypadła mi do gustu:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://andyschwartz.wordpress.com/2009/07/31/whats-new-in-jsf-2/"&gt;What’s New in JSF 2?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Wiedzę dotyczącą &lt;span style="font-style:italic;"&gt;JSF2&lt;/span&gt; zamierzam poszerzać regularnie, drobnymi kroczkami tak, aby nie zaniedbać przy tym innych aktywności, &lt;br&gt;o których również, mam nadzieję napiszę już niebawem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-99788225331479801?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/99788225331479801/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=99788225331479801' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/99788225331479801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/99788225331479801'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/12/pierwszy-kontakt-z-technologia.html' title='Pierwszy kontakt z technologią JavaServer Faces'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_JTOy9QLON1g/TPkg1oNWYxI/AAAAAAAAAIY/a1t_Fk28_W8/s72-c/jsfecg.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-4988698893343383522</id><published>2010-11-18T15:41:00.007+01:00</published><updated>2010-11-18T15:57:23.769+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='różne'/><category scheme='http://www.blogger.com/atom/ns#' term='wzorce projektowe'/><title type='text'>Wzorce projektowe - Prezentacja w ramach przedmiotu "Komunikacja interpersonalna"</title><content type='html'>Przedmiot &lt;span style="font-style:italic;"&gt;"Komunikacja interpersonalna"&lt;/span&gt;, który ma za zadanie przygotować nas, studentów do przyszłej pracy - a co za tym idzie, obcowania nie tylko ze sprzętem, stanowi przyjemną odskocznię&lt;br&gt;od typowo technicznych zajęć, w których bierzemy udział na uczelni. &lt;br /&gt;&lt;br /&gt;W ramach omawianego przedmiotu miałem ostatnio przyjemność wygłosić prezentację na wybrany przez siebie temat. Zgodzę się,&lt;br&gt;że temat wzorców projektowych nie stanowił dużej odskoczni od codziennych zajęć, ale wybór był świadomy, zatem czułem się o niebo lepiej niż w przypadku prezentacji z odgórnie narzuconym tematem.&lt;br /&gt;&lt;br /&gt;Moje przygotowania ograniczyły się wyłącznie do stworzenia prezentacji multimedialnej, odnośnie samego wystąpienia postanowiłem zupełnie improwizować. Na szczęście obrana przeze mnie taktyka była jak najbardziej słuszna, obyło się bez potknięć merytorycznych a forma przekazu wiedzy nie pozwoliła nikomu usnąć.&lt;br /&gt;&lt;br /&gt;Podczas swojego wystąpienia przedstawiłem kolejno:&lt;br /&gt;- krótki zarys historyczny (istotne publikacje);&lt;br /&gt;- podział wzorców ze względu na ich przeznaczenie;&lt;br /&gt;- wzorce&lt;span style="font-style:italic;"&gt; Strategia, Kompozyt&lt;/span&gt; oraz &lt;span style="font-style:italic;"&gt;Obserwator&lt;/span&gt;;&lt;br /&gt;- wzorzec &lt;span style="font-style:italic;"&gt;Model-Widok-Kontroler&lt;/span&gt; oraz jego adaptację do środowiska WWW, mianowicie &lt;span style="font-style:italic;"&gt;Model 2&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;W ramach krótkiego podsumowania przedstawiłem podstawowe zalety oraz wady stosowania wzorców w swoich projektach. Mam nadzieję, że kolegom prezentacja przypadła do gustu oraz czekają razem ze mną na kolejne wystąpienia. Jak zwykle ewentualnych zainteresowanych tematem zapraszam do dyskusji.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-4988698893343383522?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/4988698893343383522/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=4988698893343383522' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/4988698893343383522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/4988698893343383522'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/11/wzorce-projektowe-prezentacja-w-ramach.html' title='Wzorce projektowe - Prezentacja w ramach przedmiotu &quot;Komunikacja interpersonalna&quot;'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-6267968587880671768</id><published>2010-10-31T14:47:00.008+01:00</published><updated>2010-10-31T16:22:28.247+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='książki'/><title type='text'>Wrażenia po lekturze książki "Java. Efektywne programowanie. Wydanie II"</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JTOy9QLON1g/TM1z6JE_qgI/AAAAAAAAAIQ/vssuypp1MIk/s1600/javep2.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 125px; height: 163px;" src="http://3.bp.blogspot.com/_JTOy9QLON1g/TM1z6JE_qgI/AAAAAAAAAIQ/vssuypp1MIk/s400/javep2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5534206959814683138" /&gt;&lt;/a&gt;&lt;span style="font-style:italic;"&gt;Joshua Bloch&lt;/span&gt; stworzył podręcznik, w którym każdy programista powinien znaleźć coś dla siebie, zawarte w nim informacje odnośnie efektywnego wykorzystania &lt;span style="font-style:italic;"&gt;Javy&lt;/span&gt; przede wszystkim znajdują swoje zastosowanie&lt;br&gt;w codziennej pracy.&lt;br /&gt;&lt;br /&gt;Poza zawartością merytoryczną książki powinniśmy docenić również formę przekazu wiedzy, która moim zdaniem mogłaby zadowolić nawet najbardziej wybrednego czytelnika. Dobrze przemyślana, przejrzysta struktura podręcznika umożliwia niemalże natychmiastowy powrót do wybranego zagadnienia oraz sprawia, &lt;br&gt;że całość czyta się bardzo przyjemnie.&lt;br /&gt;&lt;br /&gt;Większość tematów poruszanych przez podręcznik posiada zakończenie w postaci krótkiego podsumowania, które uwypukla najistotniejsze informacje oraz stanowi doskonały punkt przypomnienia omawianych przez autora zagadnień.&lt;br&gt;Ostatni rozdział dotyczący &lt;span style="font-style:italic;"&gt;serializacji obiektów&lt;/span&gt; przypadł mi do gustu szczególnie, dzięki niemu decyzje związane z implementacją interfejsu &lt;span style="font-style:italic;"&gt;Serializable&lt;/span&gt; będę podejmować całkowicie świadomie.&lt;br /&gt;&lt;br /&gt;Do &lt;span style="font-style:italic;"&gt;"Java. Efektywne programowanie. Wydanie II"&lt;/span&gt; zajrzę zapewne jeszcze niejednokrotnie - tego typu książkę warto mieć na swojej półce.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-6267968587880671768?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/6267968587880671768/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=6267968587880671768' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/6267968587880671768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/6267968587880671768'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/10/wrazenia-po-lekturze-ksiazki-java.html' title='Wrażenia po lekturze książki &quot;Java. Efektywne programowanie. Wydanie II&quot;'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_JTOy9QLON1g/TM1z6JE_qgI/AAAAAAAAAIQ/vssuypp1MIk/s72-c/javep2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-1872812310605216956</id><published>2010-08-25T13:28:00.011+02:00</published><updated>2010-08-27T15:51:54.132+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rmi'/><category scheme='http://www.blogger.com/atom/ns#' term='wzorce projektowe'/><category scheme='http://www.blogger.com/atom/ns#' term='książki'/><title type='text'>Wrażenia po lekturze książki "Head First Design Patterns. Edycja polska"</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JTOy9QLON1g/THe7PhjFrnI/AAAAAAAAAG0/nO4uD1BJhbQ/s1600/headfirst-designpatterns.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 174px; height: 200px;" src="http://1.bp.blogspot.com/_JTOy9QLON1g/THe7PhjFrnI/AAAAAAAAAG0/nO4uD1BJhbQ/s200/headfirst-designpatterns.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5510078544489066098" /&gt;&lt;/a&gt;Trzymając w ręku &lt;span style="font-style:italic;"&gt;"Head First Design Patterns. Edycja polska"&lt;/span&gt; można odnieść wrażenie, że czeka nas ciężka przeprawa przez ponad 600 stron pełnych wiedzy.&lt;br&gt;Myślę, że każdy kto miał styczność&lt;br&gt;z omawianą pozycją może się ze mną zgodzić, że w rzeczywistości książkę czyta się szybko i co najważniejsze&lt;br&gt;z przyjemnością. Wykorzystane przez autorów metody nauczania faktycznie przyśpieszają proces poznawania wzorców projektowych. &lt;br /&gt;&lt;br /&gt;Niestety minus należy się dla wydawnictwa za znaczną ilość popełnionych błędów przy tworzeniu edycji polskiej. Całe szczęście, że błędy nie są na tyle poważne aby wpłynąć negatywnie na wartość merytoryczną podręcznika.&lt;br /&gt;&lt;br /&gt;Miły dodatek z pewnością stanowi wstęp do &lt;span style="font-style:italic;"&gt;Java RMI&lt;/span&gt; (moim zdaniem bardzo dobry) zawarty w rozdziale 11 przy okazji omawiania wzorca &lt;span style="font-style:italic;"&gt;Proxy&lt;/span&gt;. Szkoda, że nie miałem go pod ręką gdy sam poznawałem &lt;span style="font-style:italic;"&gt;RMI&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;Wracając jeszcze do wspomnianych metod nauczania, zastosowanie powtórzeń wiadomości budzi we mnie mieszane uczucia - przedstawienie tej samej informacji na różne sposoby niekiedy może być przydatne ale w przypadku omawianych wzorców wywoływało&lt;br&gt;u mnie chęć przeskoczenia kilka stron dalej. Czyżby forma przekazywania wiedzy towarzysząca podręcznikowi była tak skuteczna, że powtórzenia informacji nawet w dobrej wierze stały się zbędne?&lt;br /&gt;&lt;br /&gt;Zwieńczenie dzieła stanowi rozdział 13 pt. &lt;span style="font-style:italic;"&gt;"Wzorce projektowe&lt;br&gt;w praktyce: Nowe życie z wzorcami"&lt;/span&gt; gdzie autorzy m.in. zwracają uwagę na skłonność początkujących programistów do nadmiernego wykorzystywania wzorców oraz wskazują słuszną drogę dalszego rozwoju.&lt;br /&gt;&lt;br /&gt;Dla mnie podręcznik okazał się bardzo przydatny,  wszystkim zainteresowanym poznaniem wzorców projektowych mogę polecić &lt;span style="font-style:italic;"&gt;"Head First Design Patterns"&lt;/span&gt; z czystym sumieniem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-1872812310605216956?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/1872812310605216956/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=1872812310605216956' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/1872812310605216956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/1872812310605216956'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/08/wrazenia-po-lekturze-ksiazki-head-first.html' title='Wrażenia po lekturze książki &quot;Head First Design Patterns. Edycja polska&quot;'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_JTOy9QLON1g/THe7PhjFrnI/AAAAAAAAAG0/nO4uD1BJhbQ/s72-c/headfirst-designpatterns.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-9174590025167502752</id><published>2010-07-25T14:31:00.007+02:00</published><updated>2010-07-25T14:52:55.179+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='książki'/><title type='text'>Wrażenia po lekturze książki "Hibernate w akcji"</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JTOy9QLON1g/TEwu1R_gD0I/AAAAAAAAAGc/h7wJe2hpb9A/s1600/hibernatewakcji.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 125px; height: 163px;" src="http://4.bp.blogspot.com/_JTOy9QLON1g/TEwu1R_gD0I/AAAAAAAAAGc/h7wJe2hpb9A/s400/hibernatewakcji.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5497820738010222402" /&gt;&lt;/a&gt;Sięgając po &lt;span style="font-style:italic;"&gt;"Hibernate w akcji"&lt;/span&gt; (&lt;span style="font-style:italic;"&gt;Christian Bauer, Gavin King&lt;/span&gt;) nie spodziewałem się,&lt;br&gt;że lektura podręcznika potrwa ponad miesiąc, przyczyn takiego przebiegu zdarzeń daleko szukać nie trzeba – najpierw zakończenie roku akademickiego oraz sesja, później słoneczny początek wakacji.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Po takim wstępie można śmiało odnieść wrażenie, że staram się znaleźć usprawiedliwienie dla własnego lenistwa – tak jednak nie jest! :) &lt;br /&gt;&lt;br /&gt;Długo zastanawiałem się dlaczego &lt;span style="font-style:italic;"&gt;"Hibernate w akcji"&lt;/span&gt; budził moje mieszane uczucia podczas lektury. Pomimo przekazu wiedzy na temat odwzorowania obiektowo-relacyjnego oraz &lt;span style="font-style:italic;"&gt;Hibernate&lt;/span&gt;, z czego w moim odczuciu podręcznik wywiązał się przyzwoicie, zabrakło mi w nim akcji - nie tej tytułowej, w książce możemy znaleźć m.in. rozdział&lt;br&gt;pt. &lt;span style="font-style:italic;"&gt;"Tworzenie aplikacji stosujących Hibernate"&lt;/span&gt;, ale odrobiny dynamizmu, który powinien przykuć uwagę czytelnika nieco skuteczniej oraz wzbudzić w nim chęć do dalszej lektury. &lt;br /&gt;&lt;br /&gt;Pomijając już fakt, że książkę czytałem w ślimaczym tempie, chciałbym wspomnieć o pewnej istotnej obserwacji. Podczas lektury podręcznika w mojej głowie zrodziło się wiele pytań i wątpliwości względem przyswajanej wiedzy, odpowiedzi na pytania w większości przypadków pojawiały się podczas dalszej lektury danego rozdziału, aczkolwiek na część z nich albo nie uzyskałem odpowiedzi albo po prostu o nich zapomniałem. &lt;br /&gt;&lt;br /&gt;Biorąc pod uwagę powyższy fakt, wysnuć mogę następujący wniosek - sama lektura &lt;span style="font-style:italic;"&gt;"Hibernate w akcji"&lt;/span&gt; nie sprawi, że posiądziemy umiejętność &lt;span style="font-weight:bold;"&gt;najefektywniejszego&lt;/span&gt; wykorzystania &lt;span style="font-style:italic;"&gt;Hibernate&lt;/span&gt; w naszych projektach, zdobędziemy  natomiast wiedzę, która pozwoli nam&lt;br&gt;w pełni świadomie podejmować decyzje związane z wykorzystaniem odwzorowania obiektowo-relacyjnego w praktyce.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-9174590025167502752?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/9174590025167502752/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=9174590025167502752' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/9174590025167502752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/9174590025167502752'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/07/wrazenia-po-lekturze-ksiazki-hibernate.html' title='Wrażenia po lekturze książki &quot;Hibernate w akcji&quot;'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_JTOy9QLON1g/TEwu1R_gD0I/AAAAAAAAAGc/h7wJe2hpb9A/s72-c/hibernatewakcji.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-411663030938347892</id><published>2010-07-17T17:12:00.013+02:00</published><updated>2010-07-17T17:54:43.522+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>Moje pierwsze kroki z Hibernate oraz PostgreSQL</title><content type='html'>Zastosowanie odwzorowania obiektowo-relacyjnego w przykładowych projektach planowałem poprzedzić zdobyciem wiedzy teoretycznej&lt;br&gt;z zakresu tematów &lt;span style="font-style:italic;"&gt;ORM&lt;/span&gt; oraz &lt;span style="font-style:italic;"&gt;Hibernate&lt;/span&gt;. Biorąc pod uwagę fakt,&lt;br&gt;iż do ukończenia lektury podręcznika &lt;span style="font-style:italic;"&gt;"Hibernate w akcji"&lt;/span&gt; pozostało naprawdę niewiele, postanowiłem wykonać swój pierwszy krok w kierunku praktycznego wykorzystania &lt;span style="font-style:italic;"&gt;Hibernate&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;Przyznam się, że Jacek Laskowski publikując swój nowy artykuł pt. &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; trafił dokładnie w moje potrzeby - dzięki Jacek. Nie spodziewałem się, że przy pomocy &lt;span style="font-style:italic;"&gt;NetBeans&lt;/span&gt; można tak sprawnie (i szybko!) stworzyć przykładowy projekt z &lt;span style="font-style:italic;"&gt;Hibernate&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Pierwsza myśl po poprawnym uruchomieniu aplikacji była następująca: &lt;span style="font-style:italic;"&gt;"Chcę zobaczyć zawartość tabeli klient"&lt;/span&gt;. W przykładzie została wykorzystana domyślna dla &lt;span style="font-style:italic;"&gt;NetBeans IDE 6.9&lt;/span&gt; baza danych &lt;span style="font-style:italic;"&gt;Apache Derby&lt;/span&gt;, zatem przeszedłem do widoku &lt;span style="font-style:italic;"&gt;Services&lt;/span&gt;, odszukałem tabelę &lt;span style="font-style:italic;"&gt;klient&lt;/span&gt; oraz niejawnie wykonałem dla niej zapytanie &lt;span style="font-style:italic;"&gt;select * from APP.KLIENT&lt;/span&gt; poprzez wybranie &lt;span style="font-style:italic;"&gt;"View Data..."&lt;/span&gt; z menu tabeli.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JTOy9QLON1g/TEHLCEUAb4I/AAAAAAAAAFs/UQkko5DFFl0/s1600/klient+-+view+data.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 380px; height: 400px;" src="http://4.bp.blogspot.com/_JTOy9QLON1g/TEHLCEUAb4I/AAAAAAAAAFs/UQkko5DFFl0/s400/klient+-+view+data.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5494896256746549122" /&gt;&lt;/a&gt;&lt;br /&gt;Kolejna myśl dotyczyła uruchomienia aplikacji w oparciu o bazę danych &lt;span style="font-style:italic;"&gt;PostgreSQL&lt;/span&gt;. Czynności mające na celu realizację tego zadania opisałem poniżej.&lt;br /&gt;&lt;br /&gt;Instalacja serwera bazy danych &lt;a href="http://www.postgresql.org/download/"&gt;PostgreSQL&lt;/a&gt; nie stanowi jakiegokolwiek problemu, podczas jej trwania użytkownik proszony jest o ustalenie hasła dostępowego do konta &lt;span style="font-style:italic;"&gt;postgres&lt;/span&gt; pełniącego rolę administratora.&lt;br /&gt;&lt;br /&gt;Wszystkie wymagane informacje do stworzenia nowego pliku konfiguracyjnego &lt;span style="font-style:italic;"&gt;Hibernate&lt;/span&gt; uzyskamy uruchamiając aplikację &lt;span style="font-style:italic;"&gt;pgAdmin III&lt;/span&gt;. Dodatkowo za jej pomocą jesteśmy w stanie np. utworzyć nową bazę danych oraz zdefiniować nowe role (konta użytkowników). Na potrzeby przykładowej aplikacji możemy wykorzystać istniejącą już bazę danych oraz zdefiniowaną rolę&lt;br&gt;(dla obu przypadków nazwą jest &lt;span style="font-style:italic;"&gt;postgres&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Mając na celu stworzenie nowego dokumentu &lt;span style="font-style:italic;"&gt;hibernate.cfg.xm&lt;/span&gt;l (aktualny kasujemy) posłużymy się kreatorem pliku konfiguracyjnego dla &lt;span style="font-style:italic;"&gt;Hibernate&lt;/span&gt; w &lt;span style="font-style:italic;"&gt;NetBeans&lt;/span&gt; (&lt;span style="font-style:italic;"&gt;File -&gt; New File&lt;/span&gt; : kategoria &lt;span style="font-style:italic;"&gt;Hibernate&lt;/span&gt;,&lt;br&gt;typ pliku &lt;span style="font-style:italic;"&gt;Hibernate Configuration Wizard&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;W trzecim kroku kreatora pt. &lt;span style="font-style:italic;"&gt;"Select Data Source"&lt;/span&gt; jako &lt;span style="font-style:italic;"&gt;Database Connection&lt;/span&gt; wybieramy &lt;span style="font-style:italic;"&gt;"New Database Connection..."&lt;/span&gt;. Następnie definiujemy nowe połączenie z bazą danych: wybieramy odpowiedni sterownik oraz podajemy wymagane informacje.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JTOy9QLON1g/TEHLVHUbltI/AAAAAAAAAF0/AT6phod6wzY/s1600/new+database+connection.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 322px; height: 400px;" src="http://3.bp.blogspot.com/_JTOy9QLON1g/TEHLVHUbltI/AAAAAAAAAF0/AT6phod6wzY/s400/new+database+connection.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5494896583971149522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JTOy9QLON1g/TEHQ_E4l0eI/AAAAAAAAAGU/XHBLm4seHgs/s1600/select+schema.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 302px; height: 279px;" src="http://1.bp.blogspot.com/_JTOy9QLON1g/TEHQ_E4l0eI/AAAAAAAAAGU/XHBLm4seHgs/s400/select+schema.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5494902802430153186" /&gt;&lt;/a&gt;&lt;br /&gt;Do utworzonego pliku &lt;span style="font-style:italic;"&gt;hibernate.cfg.xml&lt;/span&gt; pomiędzy &lt;span style="font-style:italic;"&gt;&amp;lt;session-factory&gt;&lt;/span&gt;&lt;br&gt;a &lt;span style="font-style:italic;"&gt;&amp;lt;/session-factory&gt;&lt;/span&gt; dodajemy następujące linijki: &lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;property name="current_session_context_class"&gt;&lt;br /&gt;thread&amp;lt;/property&gt;&lt;br /&gt;&amp;lt;property name="show_sql"&gt;true&amp;lt;/property&gt;&lt;br /&gt;&amp;lt;property name="hbm2ddl.auto"&gt;update&amp;lt;/property&gt;&lt;br /&gt;&amp;lt;mapping resource="hibernate.hbm.xml"/&gt;&lt;br /&gt;&lt;/pre&gt;Aplikacja jest gotowa. Uruchamiamy ją kilka razy, następnie&lt;br&gt;łączymy się z bazą danych za pomocą &lt;span style="font-style:italic;"&gt;pgAdmin III&lt;/span&gt;, odszukujemy oraz zaznaczamy tabelę &lt;span style="font-style:italic;"&gt;klient&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JTOy9QLON1g/TEHLjXBrWHI/AAAAAAAAAGE/Tu3Ii-055vU/s1600/postgresql+-+tabela+klient.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 284px; height: 382px;" src="http://4.bp.blogspot.com/_JTOy9QLON1g/TEHLjXBrWHI/AAAAAAAAAGE/Tu3Ii-055vU/s400/postgresql+-+tabela+klient.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5494896828705626226" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Ctrl + d&lt;/span&gt; wyświetli pełną zawartość tabeli.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JTOy9QLON1g/TEHMAfJJiQI/AAAAAAAAAGM/90TNjZtjQYI/s1600/postgresql+-+zawartosc+tabeli+klient.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 296px;" src="http://2.bp.blogspot.com/_JTOy9QLON1g/TEHMAfJJiQI/AAAAAAAAAGM/90TNjZtjQYI/s400/postgresql+-+zawartosc+tabeli+klient.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5494897329100654850" /&gt;&lt;/a&gt;&lt;br /&gt;Jak widzimy informacje przekazane za pomocą przykładowej aplikacji zostały utrwalone w bazie danych &lt;span style="font-style:italic;"&gt;PostgreSQL&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-411663030938347892?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/411663030938347892/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=411663030938347892' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/411663030938347892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/411663030938347892'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/07/moje-pierwsze-kroki-z-hibernate-oraz.html' title='Moje pierwsze kroki z Hibernate oraz PostgreSQL'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_JTOy9QLON1g/TEHLCEUAb4I/AAAAAAAAAFs/UQkko5DFFl0/s72-c/klient+-+view+data.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-312539951605054067</id><published>2010-06-30T22:46:00.002+02:00</published><updated>2011-01-10T17:30:16.591+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='różne'/><title type='text'>Hibernate oraz Java 4-Ever</title><content type='html'>Zdobywanie wiedzy w okresie letnim nie jest zadaniem prostym - słoneczna pogoda wygrywa dzień po dniu z moją chęcią do dalszej lektury książki &lt;span style="font-style:italic;"&gt;"Hibernate w akcji" (Christian Bauer, Gavin King)&lt;/span&gt;. Czysto teoretyczne rozpoznanie tematu jakim jest odwzorowanie obiektowo-relacyjne (&lt;span style="font-style:italic;"&gt;ORM&lt;/span&gt;) zatrzymało się w moim przypadku na czwartym rozdziale pt. &lt;span style="font-style:italic;"&gt;"Stosowanie obiektów trwałych"&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;Zdobyte dotychczas wiadomości utrwaliłem w następujący sposób: zapoznałem się z oficjalną &lt;a href="http://docs.jboss.org/hibernate/stable/core/reference/en/html/"&gt;dokumentacją Hibernate&lt;/a&gt; oraz przeczytałem artykuł Jacka Laskowskiego pt. &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;.  &lt;br /&gt;&lt;br /&gt;Do ukończenia lektury pozostało sześć rozdziałów oraz kilka dodatków, zatem już jutro ponownie sięgam po książkę licząc&lt;BR&gt;na zwielokrotnienie tempa pozyskiwania istotnych informacji.&lt;br /&gt;&lt;br /&gt;Nie sposób również nie wspomnieć o bijącym ostatnio rekordy popularności zwiastunie &lt;span style="font-style:italic;"&gt;"Java 4-Ever"&lt;/span&gt;. Obserwatorzy kanału &lt;span style="font-style:italic;"&gt;#java&lt;/span&gt;&lt;BR&gt;na &lt;span style="font-style:italic;"&gt;blip.pl&lt;/span&gt; chyba znają już na pamięć każde wypowiadane w nim zdanie - komentować tego zjawiska nie będę, wszyscy odczuliśmy popularność zwiastuna na własnej skórze.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-312539951605054067?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/312539951605054067/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=312539951605054067' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/312539951605054067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/312539951605054067'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/06/hibernate-oraz-java-4-ever.html' title='Hibernate oraz Java 4-Ever'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-4949951259827012041</id><published>2010-06-14T19:03:00.001+02:00</published><updated>2010-07-17T01:03:23.963+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='książki'/><title type='text'>Wrażenia po lekturze książki "Czysty kod. Podręcznik dobrego programisty"</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JTOy9QLON1g/S-Q03BM1jmI/AAAAAAAAAEs/euQ61t-KX6I/s1600/czysty+kod.PNG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 118px; height: 168px;" src="http://4.bp.blogspot.com/_JTOy9QLON1g/S-Q03BM1jmI/AAAAAAAAAEs/euQ61t-KX6I/s400/czysty+kod.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5468553967354351202" /&gt;&lt;/a&gt;Rozpoczynając lekturę &lt;span style="font-style:italic;"&gt;"Podręcznika dobrego programisty"&lt;/span&gt; poinformowany zostałem, &lt;br&gt;że &lt;span style="font-style:italic;"&gt;"Nauka pisania czystego kodu jest ciężką pracą"&lt;/span&gt; - po takim wstępie spodziewałem się czegoś więcej niż wspomnianego przez autora lejącego się potu. &lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"Czysty kod" &lt;/span&gt;rozczarował mnie pod tym względem - całe szczęście, &lt;BR&gt;że pozytywnie. Lektura nie była na tyle ciężka, abym mógł poczuć potrzebę odłożenia książki "na później", nawet spore wymogi czasowe jak na niewiele ponad 400 stron nie zdołały mnie skutecznie zniechęcić.&lt;br /&gt;&lt;br /&gt;Po rozdziale 14 pt. &lt;span style="font-style:italic;"&gt;"Udane oczyszczanie kodu"&lt;/span&gt; liczącym 53 strony spodziewałem się najgorszego, wiele linijek kodu a jednak z lekturą  poradziłem sobie całkiem sprawnie. &lt;br /&gt;&lt;br /&gt;Dopiero rozdział 16 pt. &lt;span style="font-style:italic;"&gt;"Przebudowa klasy SerialDate"&lt;/span&gt; uzmysłowił mi, co miał na myśli autor pisząc &lt;span style="font-style:italic;"&gt;"Musisz się przy tym spocić"&lt;/span&gt;. Nieustanne śledzenie zmian w kodzie klasy z &lt;span style="font-style:italic;"&gt;Dodatku B&lt;/span&gt; oraz sprawdzanie &lt;BR&gt;w rozdziale 17 pt. &lt;span style="font-style:italic;"&gt;"Zapachy kodu i heurystyki"&lt;/span&gt; znaczenia tajemniczych &lt;span style="font-style:italic;"&gt;[G6]&lt;/span&gt; lub &lt;span style="font-style:italic;"&gt;[N2]&lt;/span&gt; może zmęczyć nawet najbardziej wytrwałego czytelnika.&lt;br /&gt;&lt;br /&gt;Lektura tego rozdziału przypadła mi w całości na podróż do rodzinnego Zgorzelca. Ciekawe co myśleli pasażerowie siedzący obok, widząc mnie energicznie "skaczącego" po rozdziałach przez ponad dwie godziny jazdy. Widok musiał być obłędny. Ktoś mógłby nawet pomyśleć, że w takich warunkach (podróż autobusem nie rozpieszcza czytelników), tak wymagającego rozdziału po prostu nie da się czytać - ja natomiast udowodniłem, że jest to możliwe! :)&lt;br /&gt;&lt;br /&gt;Pomimo faktu, iż nie pamiętam już szczegółowych modyfikacji kodu oraz celu ich wprowadzenia, mogę z pełną świadomością powiedzieć, że czas poświęcony na ten rozdział nie był stracony. Sądzę, &lt;BR&gt;że intensywne śledzenie postępujących zmian w kodzie miało za zadanie uzmysłowić czytelnikowi jak istotny jest proces pielęgnacji, pokazać jak bardzo można zmodyfikować czysty kod, tak aby był jeszcze czyściejszy oraz w jaki sposób tego dokonać. &lt;br /&gt;&lt;br /&gt;Wpływ &lt;span style="font-style:italic;"&gt;"Czystego kodu"&lt;/span&gt; na moje nawyki programistyczne dostrzegam już teraz, a "ciężka praca" o której wspominał &lt;span style="font-style:italic;"&gt;Robert C. Martin&lt;/span&gt; &lt;BR&gt;z pewnością pozwoli wraz z biegiem czasu, przekuć zdobytą wiedzę &lt;BR&gt;w umiejętności.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-4949951259827012041?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/4949951259827012041/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=4949951259827012041' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/4949951259827012041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/4949951259827012041'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/06/wrazenia-po-lekturze-ksiazki-czysty-kod.html' title='Wrażenia po lekturze książki &quot;Czysty kod. Podręcznik dobrego programisty&quot;'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_JTOy9QLON1g/S-Q03BM1jmI/AAAAAAAAAEs/euQ61t-KX6I/s72-c/czysty+kod.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-8579742928996503974</id><published>2010-06-12T15:25:00.002+02:00</published><updated>2010-12-06T20:15:18.987+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='certyfikaty'/><category scheme='http://www.blogger.com/atom/ns#' term='różne'/><category scheme='http://www.blogger.com/atom/ns#' term='praktyki'/><title type='text'>Oficjalne zakończenie praktyk w IBM Poland</title><content type='html'>Wraz z początkiem marca informowałem za pośrednictwem bloga &lt;br /&gt;o moim udziale w programie praktyk edukacyjnych organizowanym przez firmę &lt;span style="font-style:italic;"&gt;IBM&lt;/span&gt;. Przez trzy miesiące poznawałem system &lt;span style="font-style:italic;"&gt;Kerberos&lt;/span&gt;, produkt &lt;span style="font-style:italic;"&gt;IBM WebSphere Application Server V7&lt;/span&gt; oraz technologię &lt;span style="font-style:italic;"&gt;Web Services&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;Oficjalne zakończenie pracy nad projektem odbyło się wczoraj &lt;br&gt;w siedzibie &lt;span style="font-style:italic;"&gt;IBM&lt;/span&gt; w Warszawie. Podczas spotkania mieliśmy możliwość wysłuchać kilkunastu prezentacji przygotowanych przez studentów &lt;br&gt;z Wrocławia, Warszawy oraz Zielonej Góry. &lt;br /&gt;&lt;br /&gt;Nie brakowało technicznych tematów, odrobiny humoru oraz interesujących spostrzeżeń odnośnie praktyk. Żałuję, że nie mogłem zostać do samego końca - straciłem w ten sposób (jeżeli dobrze liczę) dwie prezentacje kolegów z Warszawy. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JTOy9QLON1g/TBOMkwvwCGI/AAAAAAAAAFk/FNCGe2kk6mw/s1600/prezentacja.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_JTOy9QLON1g/TBOMkwvwCGI/AAAAAAAAAFk/FNCGe2kk6mw/s400/prezentacja.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5481879734628386914" /&gt;&lt;/a&gt;&lt;br /&gt;Swoje wystąpienie zapewne będę wspominać z uśmiechem na twarzy. &lt;br /&gt;O wewnętrznym spokoju podczas prezentacji mogłem zapomnieć już na jej samym początku, gdy zamiast kolejnego slajdu pojawił się czarny ekran. Sądząc po głośnych brawach oraz uśmiechach publiczności na koniec, nie wypadłem aż tak źle jak mogłem się spodziewać.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JTOy9QLON1g/TBOMUXeXsoI/AAAAAAAAAFc/zIzPZ0TKycM/s1600/certyfikat.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 288px; height: 400px;" src="http://2.bp.blogspot.com/_JTOy9QLON1g/TBOMUXeXsoI/AAAAAAAAAFc/zIzPZ0TKycM/s400/certyfikat.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5481879452966695554" /&gt;&lt;/a&gt;&lt;br /&gt;Certyfikaty potwierdzające odbycie praktyk zostały wręczone  nam przez Justynę Rachwalską, która (cytując jednego z praktykantów) &lt;span style="font-style:italic;"&gt;"naprawdę żyje i nie jest robotem odpowiadającym na listy"&lt;/span&gt; :) Zabawne, że po trzech miesiącach intensywnej korespondencji pojawiły się głosy &lt;span style="font-style:italic;"&gt;"Czy ktoś wie jak wygląda Justyna?"&lt;/span&gt;. Przyznam się dobrowolnie, że też nie wiedziałem :)  Nawet pomimo tego, że zdjęcia wszystkich pracowników były dostępne poprzez komunikator &lt;span style="font-style:italic;"&gt;Sametime&lt;/span&gt; oraz &lt;span style="font-style:italic;"&gt;BluePages&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Sama podróż do Warszawy również była przygodą - w tym przypadku zafundowaną przez &lt;span style="font-style:italic;"&gt;PKP&lt;/span&gt;. Jadąc pociągiem z Zielonej Góry do Poznania można było odnieść wrażenie, że  gorzej już być nie może - pomimo godzin porannych warunki w pociągu przypominały te ze szklarni, temperatura oraz zaduch niemalże nie do zniesienia. &lt;br /&gt;&lt;br /&gt;Wybawieniem okazał się pociąg regionalny z Poznania do Warszawy - wygodne siedzenia oraz upragniona klimatyzacja! W takich warunkach podróż stanowiła samą przyjemność. Nie mógłbym nie wspomnieć &lt;br&gt;o solidnym opóźnieniu, ale do tego już chyba wszyscy zdążyliśmy się przyzwyczaić.&lt;br /&gt;&lt;br /&gt;Chcąc wrócić do Zielonej Góry jeszcze tego samego dnia, zdecydowałem się na podróż powrotną pociągiem &lt;span style="font-style:italic;"&gt;InterCity&lt;/span&gt;. Niemalże trzykrotnie większy koszt biletu upewnił mnie w przekonaniu, że tym razem nie będę miał możliwości narzekać na temperaturę oraz zaduch. Natychmiast po zajęciu swojego miejsca otrzymałem "soczek z rurką" oraz ciasteczko firmowane marką &lt;span style="font-style:italic;"&gt;InterCity&lt;/span&gt;, wszystko w cenie biletu oczywiście. &lt;br /&gt;&lt;br /&gt;Kontrola biletów również była nietypowa, pierwszy raz spotkałem się &lt;br&gt;z tak sympatyczną obsługą klienta - &lt;span style="font-style:italic;"&gt;"Rybko, a gdzie masz rezerwację miejsca?"&lt;/span&gt;. Szkoda jedynie, że klimatyzacja bardzo szybko zawiodła moje oczekiwania, dalszą podróż kontynuowaliśmy z uchylonymi oknami w całym wagonie.&lt;br /&gt;&lt;br /&gt;Po niemalże osiemnastu godzinach wróciłem do domu - zmęczony &lt;br /&gt;i zadowolony, że w końcu mogę położyć się w swoim łóżku.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-8579742928996503974?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/8579742928996503974/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=8579742928996503974' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/8579742928996503974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/8579742928996503974'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/06/oficjalne-zakonczenie-praktyk-w-ibm.html' title='Oficjalne zakończenie praktyk w IBM Poland'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_JTOy9QLON1g/TBOMkwvwCGI/AAAAAAAAAFk/FNCGe2kk6mw/s72-c/prezentacja.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-4357813856072305604</id><published>2010-05-24T18:27:00.001+02:00</published><updated>2010-07-17T01:05:45.589+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rmi'/><title type='text'>Laboratorium z Remote Method Invocation</title><content type='html'>Tematem ostatnich zajęć laboratoryjnych realizowanych w ramach przedmiotu &lt;span style="font-style:italic;"&gt;"Programowanie współbieżne i rozproszone"&lt;/span&gt; był pakiet &lt;span style="font-style:italic;"&gt;Remote Method Invocation&lt;/span&gt;, w skrócie &lt;span style="font-style:italic;"&gt;RMI&lt;/span&gt;. Wykonane ćwiczenie miało na celu, jak czytamy w instrukcji, &lt;span style="font-style:italic;"&gt;"zapoznanie z modelem tworzenia aplikacji rozproszonych (...)"&lt;/span&gt;, a główny nacisk położono na &lt;span style="font-style:italic;"&gt;"naukę abstrakcyjnego projektowania usług rozproszonych"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Czasu na wykonanie zadania było dość sporo, ale do pracy postanowiłem zabrać się na tydzień przed ostatecznym terminem oddania projektu. &lt;span style="font-style:italic;"&gt;"Bankomat w RMI"&lt;/span&gt; - tak brzmiał temat ćwiczenia, który w moim odczuciu nie najlepiej oddawał charakter realizowanego zadania, aczkolwiek przyznam, że dobrze prezentował główne założenia projektu. &lt;br /&gt;&lt;br /&gt;Pracę podzieliłem na trzy etapy:&lt;br /&gt;- implementację zdalnego obiektu realizującego zadeklarowane &lt;br /&gt;w interfejsie metody;&lt;br /&gt;- przygotowanie aplikacji służącej do zakładania nowych kont oraz wyświetlania o nich przydatnych informacji;&lt;br /&gt;- przygotowanie aplikacji klienckiej umożliwiającej zalogowanie się na konto w celu wykonania operacji wpłaty/wypłaty środków.&lt;br /&gt;&lt;br /&gt;Moim celem podczas realizacji zadania nie było zapewnienie systemowi pełnej funkcjonalności, a jedynie zademonstrowanie umiejętności sprawnego wykorzystania &lt;span style="font-style:italic;"&gt;RMI&lt;/span&gt; w praktyce. &lt;br /&gt;&lt;br /&gt;Poniżej znajduje się opis poszczególnych części zrealizowanego projektu:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. Program serwera&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Jedyna kwestia na jaką chciałbym zwrócić uwagę w odniesieniu do zdalnego obiektu dotyczy udostępnianych metod. Program serwera zarządza kontami, stąd każda metoda powinna weryfikować uprawnienia użytkownika do wykonania danej czynności. Zarówno właściciel konta jak i osoba korzystająca z aplikacji umożliwiającej wgląd we wszystkie konta oraz tworzenie nowych, są poddawani uwierzytelnianiu oraz autoryzacji.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Aplikacja RMI-Konta&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Poza tworzeniem nowych kont aplikacja umożliwia wyświetlenie przydatnych (zwłaszcza podczas prezentacji wykonanej pracy na laboratorium :) informacji w trzech stopniach szczegółowości :&lt;br /&gt;- identyfikatory wraz z imieniem oraz nazwiskiem właściciela konta;&lt;br /&gt;- identyfikatory wraz ze stanem konta;&lt;br /&gt;- identyfikatory wraz z imieniem i nazwiskiem właściciela konta, &lt;br /&gt;jego stan oraz lista wszystkich wykonanych operacji.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JTOy9QLON1g/S_qq2f5R_8I/AAAAAAAAAE8/bb0CuZf62EU/s1600/RMI-Konta.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 253px;" src="http://3.bp.blogspot.com/_JTOy9QLON1g/S_qq2f5R_8I/AAAAAAAAAE8/bb0CuZf62EU/s400/RMI-Konta.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5474876150273671106" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. Aplikacja kliencka&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Klient po zalogowaniu otrzymuje informację dotyczącą stanu swojego konta, dodatkowo zostaje poinformowany o maksymalnie pięciu ostatnio wykonanych operacjach na koncie. Po przyznaniu dostępu do konta, klient uzyskuje możliwość dokonania wpłaty lub wypłaty środków. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JTOy9QLON1g/S_qrAQlaV4I/AAAAAAAAAFE/vShPgY9YC9U/s1600/RMI-Klient.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 310px;" src="http://4.bp.blogspot.com/_JTOy9QLON1g/S_qrAQlaV4I/AAAAAAAAAFE/vShPgY9YC9U/s400/RMI-Klient.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5474876317962491778" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Jak się dowiedziałem podczas prezentacji projektu, aby otrzymać za wykonaną pracę zadowalającą mnie ocenę, powinienem zaimplementować dodatkową funkcjonalność, mianowicie umożliwić klientowi przelanie środków na inne konto. Biorąc pod uwagę fakt, &lt;br /&gt;iż zadanie to nie stanowi jakiegokolwiek wyzwania, już dziś mogę cieszyć się zaliczeniem przedmiotu na ocenę bardzo dobrą :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-4357813856072305604?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/4357813856072305604/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=4357813856072305604' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/4357813856072305604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/4357813856072305604'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/05/laboratorium-z-remote-method-invocation.html' title='Laboratorium z Remote Method Invocation'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_JTOy9QLON1g/S_qq2f5R_8I/AAAAAAAAAE8/bb0CuZf62EU/s72-c/RMI-Konta.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-2473097765966693345</id><published>2010-05-13T09:55:00.002+02:00</published><updated>2010-07-17T01:36:08.313+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='junit'/><category scheme='http://www.blogger.com/atom/ns#' term='książki'/><title type='text'>Wrażenia po lekturze książki "JUnit. Pragmatyczne testy jednostkowe w Javie"</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JTOy9QLON1g/S-QzG1dW-4I/AAAAAAAAAEk/h8xfUrezNnQ/s1600/junit.PNG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 114px; height: 170px;" src="http://4.bp.blogspot.com/_JTOy9QLON1g/S-QzG1dW-4I/AAAAAAAAAEk/h8xfUrezNnQ/s400/junit.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5468552040057076610" /&gt;&lt;/a&gt;Od książki &lt;span style="font-style:italic;"&gt;"JUnit. Pragmatyczne testy jednostkowe w Javie"&lt;/span&gt; oczekiwałem, że będzie dobrym wprowadzeniem do tematyki testów jednostkowych i nie zawiodłem się. &lt;br /&gt;Tak jak w przypadku &lt;span style="font-style:italic;"&gt;"Pragmatycznego programisty"&lt;/span&gt;, autorzy &lt;span style="font-style:italic;"&gt;Andrew Hunt&lt;/span&gt; oraz &lt;span style="font-style:italic;"&gt;David Thomas&lt;/span&gt; wykazali się umiejętnością przekazywania wiedzy w sposób lekki, przyjazny dla czytelnika. &lt;br /&gt;&lt;BR&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"JUnit. Pragmatyczne (...)"&lt;/span&gt; z pewnością należy do grupy książek pisanych z myślą o czytelniku. Celem autorów nie jest samo zapoznanie czytelnika z tematyką testów jednostkowych, ale i również przekonanie do słuszności ich właściwego stosowania. Bezpośrednim tego dowodem mogą być zamieszczone historie, opisujące efekty nieodpowiedniego wykorzystania testów jednostkowych lub kompletnego pominięcia ich podczas realizacji projektów.&lt;br /&gt;&lt;br /&gt;Nie zabrakło również sporej ilości kodu źródłowego, demonstrującego wykorzystanie &lt;span style="font-style:italic;"&gt;JUnit&lt;/span&gt; podczas implementacji testów oraz rozdziałów poświęconych obiektom imitacji czy zagadnieniom projektowania. &lt;br /&gt;&lt;br /&gt;Podsumowując, książkę oceniam bardzo dobrze, z pewnością stanowi wartościowe wprowadzenie do tematyki testów jednostkowych. &lt;br /&gt;Z czystym sumieniem mogę polecić lekturę każdemu, mając przy tym (tak jak i autorzy w przedmowie) nadzieję, że nie będzie ostatnią na ten temat.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-2473097765966693345?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/2473097765966693345/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=2473097765966693345' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/2473097765966693345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/2473097765966693345'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/05/wrazenia-po-lekturze-ksiazki-junit.html' title='Wrażenia po lekturze książki &quot;JUnit. Pragmatyczne testy jednostkowe w Javie&quot;'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_JTOy9QLON1g/S-QzG1dW-4I/AAAAAAAAAEk/h8xfUrezNnQ/s72-c/junit.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-8634894318496131137</id><published>2010-05-07T13:44:00.001+02:00</published><updated>2010-07-17T01:06:33.966+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='książki'/><title type='text'>"JUnit. Pragmatyczne testy jednostkowe w Javie" oraz "Czysty kod. Podręcznik dobrego programisty"</title><content type='html'>Moja domowa biblioteczka jeszcze nie imponuje swoją obszernością, aczkolwiek cieszy mnie fakt, że stale się powiększa, a interesujących pozycji do przeczytania nie brakuje. &lt;BR&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JTOy9QLON1g/S-QzG1dW-4I/AAAAAAAAAEk/h8xfUrezNnQ/s1600/junit.PNG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 114px; height: 170px;" src="http://4.bp.blogspot.com/_JTOy9QLON1g/S-QzG1dW-4I/AAAAAAAAAEk/h8xfUrezNnQ/s400/junit.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5468552040057076610" /&gt;&lt;/a&gt;Nowo pozyskana pozycja &lt;span style="font-style:italic;"&gt;"JUnit. Pragmatyczne testy jednostkowe w Javie"&lt;/span&gt; mile zaskoczyła mnie już na samym początku - autorzy &lt;span style="font-style:italic;"&gt;Andrew Hunt&lt;/span&gt; oraz &lt;span style="font-style:italic;"&gt;David Thomas&lt;/span&gt; napisali również &lt;span style="font-style:italic;"&gt;"Pragmatycznego programistę"&lt;/span&gt;, którego miałem przyjemność przeczytać w zeszłym roku.&lt;br /&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;br /&gt;Rozdziały &lt;span style="font-style:italic;"&gt;"Wprowadzenie", "Najprostsze testy jednostkowe"&lt;/span&gt; oraz &lt;span style="font-style:italic;"&gt;"Implementacja testów JUnit"&lt;/span&gt;, z którymi zdążyłem się zapoznać, jedynie wzmogły mój apetyt na dalszą lekturę. W dodatku rozbawiła mnie przykładowa wymówka od testowania, której mógłby użyć programista, tj. &lt;span style="font-style:italic;"&gt;"Testowanie nie należy do moich obowiązków"&lt;/span&gt; oraz komentarz autorów &lt;span style="font-style:italic;"&gt;"To rzeczywiście interesujące wytłumaczenie. &lt;BR&gt;W takim razie na czym polega Twoja praca?"&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JTOy9QLON1g/S-Q03BM1jmI/AAAAAAAAAEs/euQ61t-KX6I/s1600/czysty+kod.PNG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 118px; height: 168px;" src="http://4.bp.blogspot.com/_JTOy9QLON1g/S-Q03BM1jmI/AAAAAAAAAEs/euQ61t-KX6I/s400/czysty+kod.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5468553967354351202" /&gt;&lt;/a&gt;Na półce czeka również kolejna nowa zdobycz, mianowicie &lt;span style="font-style:italic;"&gt;"Czysty kod. Podręcznik dobrego programisty"&lt;/span&gt;, którego lektury także nie mogę się doczekać. Swoimi wrażeniami po przeczytaniu książek podzielę się za pośrednictwem bloga, zachęcam również do komentowania - może jest jakaś godna uwagi pozycja, którą właśnie czytacie lub przeczytaliście?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-8634894318496131137?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/8634894318496131137/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=8634894318496131137' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/8634894318496131137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/8634894318496131137'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/05/junit-pragmatyczne-testy-jednostkowe-w.html' title='&quot;JUnit. Pragmatyczne testy jednostkowe w Javie&quot; oraz &quot;Czysty kod. Podręcznik dobrego programisty&quot;'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_JTOy9QLON1g/S-QzG1dW-4I/AAAAAAAAAEk/h8xfUrezNnQ/s72-c/junit.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-2305385194965322458</id><published>2010-04-28T19:56:00.002+02:00</published><updated>2010-07-17T01:28:36.870+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web services'/><title type='text'>Przystosowywanie aplikacji klienckiej do współpracy z usługą sieciową, której lokalizacja uległa zmianie</title><content type='html'>Modyfikacja wnętrza archiwum jar klienta usługi sieciowej może być szybkim sposobem na przystosowanie aplikacji do współpracy z usługą, której lokalizacja uległa zmianie. Klient stworzony w oparciu &lt;br /&gt;o dokument &lt;span style="font-style:italic;"&gt;WSDL&lt;/span&gt; usługi działającej w obrębie serwera aplikacji &lt;span style="font-style:italic;"&gt;GlassFish&lt;/span&gt;, posłuży nam przy budowie swojego odpowiednika współpracującego z identyczną usługą, uruchomioną pod &lt;span style="font-style:italic;"&gt;WebSphere Application Server 7&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. Wcześniejsze wpisy bezpośrednio korespondujące z bieżącym&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://marekszpak.blogspot.com/2010/04/tworzenie-usugi-sieciowej-z.html"&gt;Tworzenie usługi sieciowej z wykorzystaniem JAX-WS i NetBeans IDE 6.8&lt;/a&gt;&lt;br /&gt;&lt;a href="http://marekszpak.blogspot.com/2010/04/instalacja-oraz-uruchomienie-usugi.html"&gt;Instalacja oraz uruchomienie usługi sieciowej pod WebSphere Application Server 7&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Tworzenie aplikacji klienckiej&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Rozpakowujemy archiwum &lt;span style="font-style:italic;"&gt;MyWsClient.jar&lt;/span&gt; do folderu &lt;span style="font-style:italic;"&gt;MyWsClient&lt;/span&gt;  .&lt;br /&gt;&lt;br /&gt;Pliki wewnątrz &lt;span style="font-style:italic;"&gt;MyWsClient/myfirstws/&lt;/span&gt; nie będą nam dłużej potrzebne - usuwamy wszystkie.&lt;br /&gt;&lt;br /&gt;W celu wygenerowania nowej zawartości folderu &lt;span style="font-style:italic;"&gt;myfirstws&lt;/span&gt; wykorzystamy narzędzie &lt;span style="font-style:italic;"&gt;wsimport&lt;/span&gt;. Jeżeli dokument &lt;span style="font-style:italic;"&gt;WSDL&lt;/span&gt; usługi jest aktualnie dostępny pod adresem &lt;span style="font-style:italic;"&gt;http://localhost:9080/mywebapp/MyFirstWsService/MyFirstWsService.wsdl&lt;/span&gt; możemy przejść dalej, &lt;br /&gt;w przeciwnym wypadku powinniśmy najpierw uruchomić usługę.&lt;br /&gt;&lt;br /&gt;Domyślna lokalizacja &lt;span style="font-style:italic;"&gt;wsimport.sh&lt;/span&gt; to &lt;span style="font-style:italic;"&gt;/opt/IBM/WebSphere/AppServer/bin/&lt;/span&gt; . Znajdując się wewnątrz &lt;span style="font-style:italic;"&gt;MyWsClient&lt;/span&gt; wykonujemy polecenie &lt;span style="font-style:italic;"&gt;/opt/IBM/WebSphere/AppServer/bin/wsimport.sh -verbose http://localhost:9080/mywebapp/MyFirstWsService/MyFirstWsService.wsdl&lt;/span&gt; . &lt;br /&gt;Pliki wygenerowane w oparciu o dokument &lt;span style="font-style:italic;"&gt;WSDL&lt;/span&gt; umożliwią nam komunikację pomiędzy klientem a dostawcą usługi.&lt;br /&gt;&lt;br /&gt;Kolejnym krokiem jest modyfikacja zawartości folderu &lt;span style="font-style:italic;"&gt;MyWsClient/meta-inf/&lt;/span&gt;. Plik &lt;span style="font-style:italic;"&gt;jax-ws-catalog.xml&lt;/span&gt; &lt;br /&gt;edytujemy do postaci:&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;&lt;br /&gt;&amp;lt;catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" prefer="system"&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;system systemId="http://localhost:9080/mywebapp/MyFirstWsService/MyFirstWsService?WSDL" uri="wsdl/localhost_9080/mywebapp/MyFirstWsService/MyFirstWsService.wsdl"/&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;system systemId="http://localhost:9080/mywebapp/MyFirstWsService/MyFirstWsService?xsd=1" uri="wsdl/localhost_9080/mywebapp/MyFirstWsService/MyFirstWsService.xsd_1.xsd"/&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/catalog&gt;&lt;br /&gt;&lt;/pre&gt;Następnie nadpisujemy plik &lt;span style="font-style:italic;"&gt;MyFirstWsService.wsdl&lt;/span&gt; aktualną wersją dokumentu znajdującą się pod adresem &lt;span style="font-style:italic;"&gt;http://localhost:9080/mywebapp/MyFirstWsService/MyFirstWsService.wsdl&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;Dokument &lt;span style="font-style:italic;"&gt;WSDL&lt;/span&gt; wraz z pozostawionym bez zmian plikiem &lt;span style="font-style:italic;"&gt;MyFirstWsService.xsd_1.xsd&lt;/span&gt; powinien znaleźć się w folderze &lt;span style="font-style:italic;"&gt;MyWsClient/meta-inf/wsdl/localhost_9080/mywebapp/MyFirstWsService/&lt;/span&gt;. Po przeniesieniu dokumentów należy usunąć podfoldery &lt;span style="font-style:italic;"&gt;localhost_30074/MyWebApplication/&lt;/span&gt; .&lt;br /&gt;&lt;br /&gt;Wymagana jest również zmiana nazwy folderu &lt;span style="font-style:italic;"&gt;meta-inf&lt;/span&gt; oraz pliku &lt;span style="font-style:italic;"&gt;manifest.mf&lt;/span&gt; na odpowiednio &lt;span style="font-style:italic;"&gt;META-INF&lt;/span&gt; oraz &lt;span style="font-style:italic;"&gt;MANIFEST.MF&lt;/span&gt; .&lt;br /&gt;&lt;br /&gt;Pozostało nam jedynie podmienić w archiwum &lt;span style="font-style:italic;"&gt;jar&lt;/span&gt; foldery &lt;span style="font-style:italic;"&gt;meta-inf&lt;/span&gt; oraz &lt;span style="font-style:italic;"&gt;myfirstws&lt;/span&gt; na ich, przygotowane przez nas odpowiedniki. &lt;br /&gt;&lt;br /&gt;Stworzoną aplikację uruchamiamy poleceniem &lt;span style="font-style:italic;"&gt;&lt;br /&gt;java -jar MyWsClient.jar 15 3&lt;/span&gt; . Otrzymany wynik świadczy &lt;br /&gt;o przeprowadzeniu poprawnych modyfikacji.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-2305385194965322458?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/2305385194965322458/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=2305385194965322458' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/2305385194965322458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/2305385194965322458'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/04/przystosowywanie-aplikacji-klienckiej.html' title='Przystosowywanie aplikacji klienckiej do współpracy z usługą sieciową, której lokalizacja uległa zmianie'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-3605005303104371188</id><published>2010-04-24T10:36:00.004+02:00</published><updated>2010-07-17T01:29:28.246+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='websphere'/><category scheme='http://www.blogger.com/atom/ns#' term='web services'/><title type='text'>Instalacja oraz uruchomienie usługi sieciowej pod WebSphere Application Server 7</title><content type='html'>Uruchomienie usługi sieciowej pod &lt;span style="font-style:italic;"&gt;WAS'em &lt;/span&gt;nie jest rzeczą skomplikowaną, przekonałem się o tym, wykorzystując do tego celu stworzoną wcześniej przykładową usługę (&lt;a href="http://marekszpak.blogspot.com/2010/04/tworzenie-usugi-sieciowej-z.html"&gt;Tworzenie usługi sieciowej z wykorzystaniem JAX-WS i NetBeans IDE 6.8&lt;/a&gt;). Poniżej znajduje się krótki opis z serii "Zrób to sam" :)&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;1. Instalacja aplikacji&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Logujemy się do konsoli administracyjnej. Z menu wybieramy &lt;span style="font-style:italic;"&gt;Applications -&gt; New Application&lt;/span&gt; . Interesuje nas tylko jeden typ aplikacji do zainstalowania:&lt;span style="font-style:italic;"&gt; New Enterprise Application&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Podajemy ścieżkę do archiwum &lt;span style="font-style:italic;"&gt;war&lt;/span&gt; zawierającego usługę &lt;span style="font-style:italic;"&gt;(Local file system -&gt; Browse)&lt;/span&gt; . Następnie wciskamy przycisk &lt;span style="font-style:italic;"&gt;"Next"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Opcja instalacji "na skróty" (&lt;span style="font-style:italic;"&gt;Fast Path&lt;/span&gt;) w zupełności nas zadowala. Przechodzimy dalej wciskając &lt;span style="font-style:italic;"&gt;"Next"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Przed nami pięć kroków umożliwiających skonfigurowanie instalacji.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JTOy9QLON1g/S9KvFkBhObI/AAAAAAAAAEE/2Rvw1fr_iG0/s1600/step1.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_JTOy9QLON1g/S9KvFkBhObI/AAAAAAAAAEE/2Rvw1fr_iG0/s400/step1.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5463621808058087858" /&gt;&lt;/a&gt;&lt;br /&gt;W kroku pierwszym możemy określić m.in. miejsce docelowe instalowanej aplikacji, jej nazwę, prawa dostępu do plików oraz wersję (&lt;span style="font-style:italic;"&gt;Build ID&lt;/span&gt;). Jeżeli chcemy pozostawić wartości domyślne, możemy śmiało przejść dalej. &lt;br /&gt;&lt;br /&gt;Krok drugi i trzeci również możemy pominąć, domyślne wartości pozwolą nam uruchomić usługę na naszym serwerze aplikacji. &lt;br /&gt;&lt;br /&gt;W kroku czwartym określamy &lt;span style="font-style:italic;"&gt;context root&lt;/span&gt; dla aplikacji. Podając &lt;span style="font-style:italic;"&gt;/mywebapp&lt;/span&gt; sprawimy, że wszystkie wywołania dla &lt;span style="font-style:italic;"&gt;http://localhost:9080/mywebapp&lt;/span&gt; oraz &lt;span style="font-style:italic;"&gt;http://localhost:9080/mywebapp/*&lt;/span&gt; będą kierowane do instalowanej usługi (o ile nie zdefiniujemy później bardziej szczegółowego &lt;span style="font-style:italic;"&gt;context root&lt;/span&gt; dla innej usługi np. &lt;span style="font-style:italic;"&gt;/mywebapp/service&lt;/span&gt;). &lt;br /&gt;&lt;br /&gt;Ostatni krok to podsumowanie dokonanej konfiguracji, wciskamy przycisk &lt;span style="font-style:italic;"&gt;"Finish"&lt;/span&gt;. Jeżeli wszystko zrobiliśmy poprawnie, powinien pojawić się ekran potwierdzający pomyślną instalację. Nie zapominamy zapisać dokonanych zmian, &lt;span style="font-style:italic;"&gt;"Save"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JTOy9QLON1g/S9Kv9taeUPI/AAAAAAAAAEM/4acgeCDg8Is/s1600/app_installed.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_JTOy9QLON1g/S9Kv9taeUPI/AAAAAAAAAEM/4acgeCDg8Is/s400/app_installed.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5463622772651348210" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Uruchomienie usługi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;W konsoli administracyjnej przechodzimy do &lt;span style="font-style:italic;"&gt;Applications -&gt; Application types -&gt; WebSphere enterprise applications &lt;/span&gt;. Zaznaczamy naszą aplikację oraz wciskamy przycisk &lt;span style="font-style:italic;"&gt;"Start"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JTOy9QLON1g/S9KwQluw8QI/AAAAAAAAAEU/RewquT20NoY/s1600/ws-start.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_JTOy9QLON1g/S9KwQluw8QI/AAAAAAAAAEU/RewquT20NoY/s400/ws-start.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5463623097006485762" /&gt;&lt;/a&gt;&lt;br /&gt;Otrzymany komunikat świadczy o poprawnym uruchomieniu aplikacji.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JTOy9QLON1g/S9KwYVcSQyI/AAAAAAAAAEc/LV4Q6_FYPYs/s1600/ws-started.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_JTOy9QLON1g/S9KwYVcSQyI/AAAAAAAAAEc/LV4Q6_FYPYs/s400/ws-started.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5463623230072963874" /&gt;&lt;/a&gt;&lt;br /&gt;Dokument &lt;span style="font-style:italic;"&gt;WSDL &lt;/span&gt;usługi możemy znaleźć pod adresem &lt;span style="font-style:italic;"&gt;http://localhost:9080/mywebapp/MyFirstWsService/MyFirstWsService.wsdl&lt;/span&gt; . Plik ten wykorzystamy podczas tworzenia aplikacji klienckiej, bazującej na tej stworzonej wcześniej przy pomocy środowiska &lt;span style="font-style:italic;"&gt;NetBeans 6.8&lt;/span&gt; . Archiwum &lt;span style="font-style:italic;"&gt;jar&lt;/span&gt; klienta będziemy modyfikować własnoręcznie (bez wykorzystania &lt;span style="font-style:italic;"&gt;IDE&lt;/span&gt;), ale o tym już następnym razem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-3605005303104371188?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/3605005303104371188/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=3605005303104371188' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/3605005303104371188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/3605005303104371188'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/04/instalacja-oraz-uruchomienie-usugi.html' title='Instalacja oraz uruchomienie usługi sieciowej pod WebSphere Application Server 7'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_JTOy9QLON1g/S9KvFkBhObI/AAAAAAAAAEE/2Rvw1fr_iG0/s72-c/step1.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-6538689731255775728</id><published>2010-04-23T12:34:00.001+02:00</published><updated>2010-07-17T01:14:01.214+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jax-ws'/><category scheme='http://www.blogger.com/atom/ns#' term='web services'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><title type='text'>Tworzenie usługi sieciowej z wykorzystaniem JAX-WS i NetBeans IDE 6.8</title><content type='html'>Jak już wcześniej napisałem, czytanie wszelkiej maści dokumentacji dotyczących technologii &lt;span style="font-style:italic;"&gt;Web Services&lt;/span&gt; umilało mi wolny czas przez ostatni tydzień. Biorąc pod uwagę, że nie samą teorią człowiek żyje, postanowiłem przejść do praktyki. Stworzenie przy pomocy &lt;span style="font-style:italic;"&gt;JAX-WS&lt;/span&gt; przykładowej usługi sieciowej oraz jej klienta okazało się być bardzo proste. Wykorzystując środowisko programistyczne &lt;span style="font-style:italic;"&gt;NetBeans 6.8&lt;/span&gt; możemy napisać nasz własny Web Service w szybki i przejrzysty sposób.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. Tworzenie przykładowej usługi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pierwszym krokiem jest stworzenie nowego projektu: &lt;span style="font-style:italic;"&gt;File -&gt; New Project&lt;/span&gt; . Wybieramy kategorię &lt;span style="font-style:italic;"&gt;Java Web&lt;/span&gt; oraz typ projektu &lt;span style="font-style:italic;"&gt;Web Application&lt;/span&gt;. Przechodzimy dalej wciskając &lt;span style="font-style:italic;"&gt;"Next"&lt;/span&gt;. Jako &lt;span style="font-style:italic;"&gt;Project Name&lt;/span&gt; podajemy &lt;span style="font-style:italic;"&gt;MyWebApplication&lt;/span&gt; oraz klikamy myszką &lt;span style="font-style:italic;"&gt;"Next"&lt;/span&gt;,&lt;span style="font-style:italic;"&gt; "Next"&lt;/span&gt; i &lt;span style="font-style:italic;"&gt;"Finish"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Do stworzonego projektu dodajemy nowy plik: &lt;span style="font-style:italic;"&gt;File -&gt; New File&lt;/span&gt; . Wybieramy kategorię &lt;span style="font-style:italic;"&gt;Web Services&lt;/span&gt; oraz typ pliku &lt;span style="font-style:italic;"&gt;Web Service&lt;/span&gt;. Zatwierdzamy poprzez &lt;span style="font-style:italic;"&gt;"Next"&lt;/span&gt;. Jako &lt;span style="font-style:italic;"&gt;Web Service Name&lt;/span&gt; podajemy &lt;span style="font-style:italic;"&gt;MyFirstWs&lt;/span&gt;, w pole &lt;span style="font-style:italic;"&gt;Package&lt;/span&gt; wpisujemy &lt;span style="font-style:italic;"&gt;myfirstws&lt;/span&gt;. &lt;span style="font-style:italic;"&gt;"Finish"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Edytujemy kod powstałego pliku &lt;span style="font-style:italic;"&gt;MyFirstWs.java&lt;/span&gt; :&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;package myfirstws;&lt;br /&gt;&lt;br /&gt;import javax.jws.WebService;&lt;br /&gt;&lt;br /&gt;@WebService()&lt;br /&gt;public class MyFirstWs {&lt;br /&gt;    public int func(int a, int b) {&lt;br /&gt;        return a * b;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Stworzoną usługę uruchamiamy poprzez &lt;span style="font-style:italic;"&gt;Run -&gt; Run Main Project&lt;/span&gt; . Jeżeli zrobiliśmy wszystko jak należy powinniśmy otrzymać komunikat:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"(...)&lt;br /&gt;Personal GlassFish v3 Domain is running.&lt;br /&gt;In-place deployment at D:\MyWebApplication\build\web&lt;br /&gt;Initializing...&lt;br /&gt;run-deploy:&lt;br /&gt;Browsing: http://localhost:30074/MyWebApplication/&lt;br /&gt;run-display-browser:&lt;br /&gt;run:&lt;br /&gt;BUILD SUCCESSFUL (total time: 34 seconds)"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Tworzenie aplikacji klienckiej&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ponownie rozpoczynamy od stworzenia nowego projektu, tym razem jednak wybieramy kategorię &lt;span style="font-style:italic;"&gt;Java&lt;/span&gt; oraz typ projektu &lt;span style="font-style:italic;"&gt;Java Application&lt;/span&gt;. Jako &lt;span style="font-style:italic;"&gt;Project Name&lt;/span&gt; podajemy &lt;span style="font-style:italic;"&gt;MyWsClient&lt;/span&gt; oraz odznaczamy pole &lt;span style="font-style:italic;"&gt;Create Main Class&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;Do stworzonego projektu dodajemy nowy plik wybierając kategorię &lt;span style="font-style:italic;"&gt;Web Services&lt;/span&gt; oraz typ &lt;span style="font-style:italic;"&gt;Web Service Client&lt;/span&gt;. Następnie wskazujemy ścieżkę do pliku &lt;span style="font-style:italic;"&gt;WSDL&lt;/span&gt; uruchomionej usługi (&lt;span style="font-style:italic;"&gt;WSDL URL&lt;/span&gt;): &lt;span style="font-style:italic;"&gt;http://localhost:30074/MyWebApplication/MyFirstWsService?WSDL&lt;/span&gt; oraz wpisujemy w pole &lt;span style="font-style:italic;"&gt;Package&lt;/span&gt;: &lt;span style="font-style:italic;"&gt;myfirstws&lt;/span&gt; (tak jak poprzednio). &lt;br /&gt;&lt;br /&gt;Jeżeli ukazał się nam komunikat &lt;span style="font-style:italic;"&gt;"(...) BUILD SUCCESSFUL (total time: 2 seconds)"&lt;/span&gt; możemy przejść dalej. Wygenerowane pliki umożliwią nam połączenie się z usługą poprzez aplikację kliencką. &lt;br /&gt;&lt;br /&gt;Do projektu dodajemy nową klasę (kategoria &lt;span style="font-style:italic;"&gt;Java&lt;/span&gt;, typ &lt;span style="font-style:italic;"&gt;Java Class&lt;/span&gt;) nadając jej nazwę &lt;span style="font-style:italic;"&gt;MyFirstWsClient&lt;/span&gt; oraz wpisując w pole &lt;span style="font-style:italic;"&gt;Package&lt;/span&gt;: &lt;span style="font-style:italic;"&gt;mywsclient&lt;/span&gt; . Edytujemy kod powstałego pliku &lt;span style="font-style:italic;"&gt;MyFirstWsClient.java&lt;/span&gt; :&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;package mywsclient;&lt;br /&gt;&lt;br /&gt;import myfirstws.MyFirstWs;&lt;br /&gt;import myfirstws.MyFirstWsService;&lt;br /&gt;&lt;br /&gt;public class MyFirstWsClient {&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        try {&lt;br /&gt;            MyFirstWsService service = new MyFirstWsService();&lt;br /&gt;            MyFirstWs myws = service.getMyFirstWsPort();&lt;br /&gt;            if(args.length &gt;= 2) {&lt;br /&gt;                int a = Integer.parseInt(args[0]);&lt;br /&gt;                int b = Integer.parseInt(args[1]);&lt;br /&gt;                System.out.println(a + " * " + b + " = " + myws.func(a, b));&lt;br /&gt;            }&lt;br /&gt;            else {&lt;br /&gt;                System.out.println("java -jar MyWsClient.jar integer1 integer2");&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        catch(Exception e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Archiwum &lt;span style="font-style:italic;"&gt;jar&lt;/span&gt; z aplikacją tworzymy poprzez &lt;span style="font-style:italic;"&gt;Run -&gt; Clean and Build Main Project &lt;/span&gt;(jeżeli jest głównym projektem) lub &lt;span style="font-style:italic;"&gt;Clean and Build&lt;/span&gt; wybrane na projekcie. Jeżeli zobaczyliśmy komunikat &lt;span style="font-style:italic;"&gt;"(...) BUILD SUCCESSFUL (...)"&lt;/span&gt;, w podfolderze &lt;span style="font-style:italic;"&gt;dist&lt;/span&gt; projektu znajdziemy plik &lt;span style="font-style:italic;"&gt;jar&lt;/span&gt; z gotową do uruchomienia aplikacją kliencką.&lt;br /&gt;&lt;br /&gt;Kolejny wpis będzie dotyczył uruchamiania usługi sieciowej pod &lt;span style="font-style:italic;"&gt;IBM WebSphere Application Server 7&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-6538689731255775728?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/6538689731255775728/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=6538689731255775728' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/6538689731255775728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/6538689731255775728'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/04/tworzenie-usugi-sieciowej-z.html' title='Tworzenie usługi sieciowej z wykorzystaniem JAX-WS i NetBeans IDE 6.8'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-1571300731090066764</id><published>2010-04-19T16:53:00.001+02:00</published><updated>2010-07-17T01:10:54.993+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='websphere'/><category scheme='http://www.blogger.com/atom/ns#' term='kerberos'/><title type='text'>Integracja systemu Kerberos z WebSphere Application Server 7</title><content type='html'>Poznawanie technologii &lt;span style="font-style:italic;"&gt;Web Services&lt;/span&gt; zapewniało mi niemałą rozrywkę przez ostatnich kilka dni, a to dopiero początek mojej przygody z &lt;span style="font-style:italic;"&gt;SOAP, WSDL i JAX-WS&lt;/span&gt;. Temat pochłonął mnie tak bardzo, że zupełnie zapomniałem opisać w jaki sposób dokonałem integracji poprawnie skonfigurowanego systemu &lt;span style="font-style:italic;"&gt;Kerberos&lt;/span&gt; z &lt;span style="font-style:italic;"&gt;WAS'em&lt;/span&gt;. Jak wspomniałem konfigurację &lt;span style="font-style:italic;"&gt;Kerberos'a&lt;/span&gt; mam już za sobą, stąd wykonanie poniższych czynności było jedynie formalnością, dopełnieniem wykonanej wcześniej pracy. &lt;br /&gt;&lt;br /&gt;Po zalogowaniu się do konsoli administracyjnej &lt;span style="font-style:italic;"&gt;WAS'a&lt;/span&gt; przechodzimy do &lt;span style="font-style:italic;"&gt;Security -&gt; Global Security -&gt; Kerberos configuration&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JTOy9QLON1g/S8x_w8MAueI/AAAAAAAAADs/wunJOAts-SM/s1600/konsola-administracyjna.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_JTOy9QLON1g/S8x_w8MAueI/AAAAAAAAADs/wunJOAts-SM/s400/konsola-administracyjna.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5461880926860524002" /&gt;&lt;/a&gt;&lt;br /&gt;Biorąc pod uwagę, że w bazie danych systemu &lt;span style="font-style:italic;"&gt;Kerberos&lt;/span&gt; istnieje principal &lt;span style="font-style:italic;"&gt;WAS/linux-fi5z.site@SITE&lt;/span&gt;, który został dodatkowo wyeksportowany do pliku &lt;span style="font-style:italic;"&gt;kt.keytab&lt;/span&gt;, nasz &lt;span style="font-style:italic;"&gt;realm&lt;/span&gt; nosi nazwę &lt;span style="font-style:italic;"&gt;SITE&lt;/span&gt; &lt;br&gt;a plik konfiguracyjny &lt;span style="font-style:italic;"&gt;Kerberos'a&lt;/span&gt; znajduje się w &lt;span style="font-style:italic;"&gt;/etc&lt;/span&gt; pod nazwą &lt;span style="font-style:italic;"&gt;krb5.conf&lt;/span&gt;, konfiguracja w konsoli administracyjnej powinna wyglądać następująco:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JTOy9QLON1g/S8yCX95EyLI/AAAAAAAAAD0/bctvnt0760c/s1600/krb-auth-mechanism.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_JTOy9QLON1g/S8yCX95EyLI/AAAAAAAAAD0/bctvnt0760c/s400/krb-auth-mechanism.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5461883796356122802" /&gt;&lt;/a&gt;&lt;br /&gt;Klikamy myszką "OK" oraz zapisujemy wprowadzone dane "Save".&lt;br&gt;Od tej chwili domyślnym mechanizmem autoryzacji dla &lt;span style="font-style:italic;"&gt;WAS'a&lt;/span&gt; jest &lt;span style="font-style:italic;"&gt;Kerberos&lt;/span&gt;. Należy o tym pamiętać przy kolejnej próbie zalogowania się do konsoli administracyjnej. Komunikat &lt;span style="font-style:italic;"&gt;"Login failed. Check the user ID and password and try again."&lt;/span&gt; z pewnością pojawi się jeżeli zapomnieliśmy dodać do kerberosowej bazy danych odpowiedniego wpisu.&lt;br /&gt;&lt;br /&gt;Dla konta administratora o nazwie &lt;span style="font-style:italic;"&gt;admin&lt;/span&gt; wymagany principal wprowadzamy następująco:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JTOy9QLON1g/S8yFIqyi_OI/AAAAAAAAAD8/OM8vPgCy0BA/s1600/admin-site.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 107px;" src="http://3.bp.blogspot.com/_JTOy9QLON1g/S8yFIqyi_OI/AAAAAAAAAD8/OM8vPgCy0BA/s400/admin-site.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5461886832065314018" /&gt;&lt;/a&gt;&lt;br /&gt;Podane hasło należy zapamiętać, będziemy używać go podczas logowania się do konsoli administracyjnej.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-1571300731090066764?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/1571300731090066764/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=1571300731090066764' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/1571300731090066764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/1571300731090066764'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/04/integracja-systemu-kerberos-z-websphere.html' title='Integracja systemu Kerberos z WebSphere Application Server 7'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_JTOy9QLON1g/S8x_w8MAueI/AAAAAAAAADs/wunJOAts-SM/s72-c/konsola-administracyjna.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-3302818039435038891</id><published>2010-04-13T15:34:00.001+02:00</published><updated>2010-07-17T01:18:04.250+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='websphere'/><category scheme='http://www.blogger.com/atom/ns#' term='kerberos'/><title type='text'>Troubleshooting - ciąg dalszy</title><content type='html'>Błędne było przyjęte założenie, że źródłem problemów podczas prób wykorzystania systemu &lt;span style="font-style:italic;"&gt;Kerberos&lt;/span&gt; jako mechanizmu autoryzacji jest &lt;span style="font-style:italic;"&gt;WAS&lt;/span&gt;. Pomysły jak rozwiązać zagadkę kończyły się wraz z upływem czasu - może dlatego coś mnie podkusiło aby jeszcze raz zainteresować się plikami &lt;span style="font-style:italic;"&gt;Kerberos'a&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;Po chwili zastanowienia wpadłem na pomysł aby jeszcze raz wyeksportować &lt;span style="font-style:italic;"&gt;principal "WAS/linux-fi5z.site@SITE"&lt;/span&gt; do pliku &lt;span style="font-style:italic;"&gt;keytab&lt;/span&gt;, który miał posłużyć &lt;span style="font-style:italic;"&gt;WAS'owi&lt;/span&gt;. Użyłem w tym celu &lt;span style="font-style:italic;"&gt;kadmin.local&lt;/span&gt; wydając za jego pomocą polecenie &lt;br /&gt;&lt;span style="font-style:italic;"&gt;ktadd -k /usr/local/var/krb5kdc/kt.keytab WAS/linux-fi5z.site@SITE&lt;/span&gt;.&lt;br /&gt; Chcąc sprawdzić czy faktycznie plik &lt;span style="font-style:italic;"&gt;kt.keytab &lt;/span&gt;zawiera pożądane pola posłużyłem się narzędziem &lt;span style="font-style:italic;"&gt;klist&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JTOy9QLON1g/S8R81cW2S5I/AAAAAAAAADk/YUu71PHyOsY/s1600/klist.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 116px;" src="http://2.bp.blogspot.com/_JTOy9QLON1g/S8R81cW2S5I/AAAAAAAAADk/YUu71PHyOsY/s400/klist.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5459625905866820498" /&gt;&lt;/a&gt;&lt;br /&gt;Jak można zauważyć powyżej, wszystko się zgadza. Użyłem więc tego pliku  przy konfiguracji - tym razem obyło się bez problemu.&lt;br /&gt;&lt;br /&gt;Jak się okazało kością niezgody był tutaj plik &lt;span style="font-style:italic;"&gt;keytab&lt;/span&gt;, do którego ścieżkę podawałem w konsoli administracyjnej &lt;span style="font-style:italic;"&gt;WAS'a&lt;/span&gt;. Niedopatrzenie kosztowało mnie sporo czasu, lekcja nie poszła jednak na marne - teraz z pewnością będę zwracać większą uwagę na zawartość plików, których używam korzystając z zewnętrznych aplikacji.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-3302818039435038891?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/3302818039435038891/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=3302818039435038891' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/3302818039435038891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/3302818039435038891'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/04/troubleshooting-ciag-dalszy.html' title='Troubleshooting - ciąg dalszy'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_JTOy9QLON1g/S8R81cW2S5I/AAAAAAAAADk/YUu71PHyOsY/s72-c/klist.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-1809031409163940046</id><published>2010-04-13T12:02:00.001+02:00</published><updated>2010-07-17T01:17:41.267+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='websphere'/><category scheme='http://www.blogger.com/atom/ns#' term='kerberos'/><title type='text'>WAS7 Troubleshooting: Tracing CreateKrbAuthMechanism</title><content type='html'>Od kilku dni próbuję wykorzystać system &lt;span style="font-style:italic;"&gt;Kerberos&lt;/span&gt; jako mechanizm autoryzacji w &lt;span style="font-style:italic;"&gt;IBM WebSphere Application Server 7 &lt;/span&gt;. Wszelkie próby skonfigurowania &lt;span style="font-style:italic;"&gt;WAS'a&lt;/span&gt; tak aby współpracował z &lt;span style="font-style:italic;"&gt;Kerberosem&lt;/span&gt; kończą się niepowodzeniem. Za każdym razem pojawia się komunikat:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"org.ietf.jgss.GSSException, major code: 13, minor code: 0 major string: Invalid credentials minor string: Cannot get credential from JAAS Subject for principal: WAS/linux-fi5z.site@SITE"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Zakładam, że konfiguracja systemu &lt;span style="font-style:italic;"&gt;Kerberos&lt;/span&gt; jest poprawna i "wina" leży w tym przypadku po stronie WAS'a. Podążając dalej tym tropem postanowiłem sprawdzić dokładniej jak przebiega proces tworzenia konfiguracji. Opis jak to zrobić zamieściłem poniżej.&lt;br /&gt;&lt;br /&gt;1. Logujemy się do konsoli administracyjnej, w menu wybieramy &lt;span style="font-style:italic;"&gt;Troubleshooting -&gt; Logs and trace&lt;/span&gt;. Następnie wybieramy &lt;span style="font-style:italic;"&gt;server1&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JTOy9QLON1g/S8RVhKrHecI/AAAAAAAAADE/9vc3Sgxq52k/s1600/troubleshooting1.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_JTOy9QLON1g/S8RVhKrHecI/AAAAAAAAADE/9vc3Sgxq52k/s400/troubleshooting1.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5459582676569127362" /&gt;&lt;/a&gt;&lt;br /&gt;2. Wybieramy &lt;span style="font-style:italic;"&gt;Diagnostic Trace&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JTOy9QLON1g/S8RRQBQ4DlI/AAAAAAAAAC0/mW24zUYWlOM/s1600/troubleshooting2.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_JTOy9QLON1g/S8RRQBQ4DlI/AAAAAAAAAC0/mW24zUYWlOM/s400/troubleshooting2.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5459577983938858578" /&gt;&lt;/a&gt;&lt;br /&gt;3. W tym miejscu możemy dokładnie określić plik wyjściowy dla danych. Przechodzimy do &lt;span style="font-style:italic;"&gt;Change Log Detail Levels&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JTOy9QLON1g/S8RSIH5DFyI/AAAAAAAAAC8/aP7Kdn_m6Ak/s1600/troubleshooting3.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_JTOy9QLON1g/S8RSIH5DFyI/AAAAAAAAAC8/aP7Kdn_m6Ak/s400/troubleshooting3.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5459578947790640930" /&gt;&lt;/a&gt;&lt;br /&gt;4. Następnie mamy możliwość sprecyzowania, które komponenty lub grupy komponentów nas interesują. &lt;span style="font-style:italic;"&gt;CreateKrbAuthMechanism&lt;/span&gt; odnajdziemy w  &lt;span style="font-style:italic;"&gt;Groups&lt;/span&gt;. Klikamy myszką na znak "+" przy nazwie listy &lt;span style="font-style:italic;"&gt;"All Groups"&lt;/span&gt; w celu jej rozwinięcia.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JTOy9QLON1g/S8RVo1HB4YI/AAAAAAAAADM/6VmX1HtFCmY/s1600/troubleshooting4.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_JTOy9QLON1g/S8RVo1HB4YI/AAAAAAAAADM/6VmX1HtFCmY/s400/troubleshooting4.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5459582808219574658" /&gt;&lt;/a&gt;&lt;br /&gt;5. Klikamy myszką na odnaleziony na liście &lt;span style="font-style:italic;"&gt;CreateKrbAuthMechanism&lt;/span&gt;. Z menu wybieramy &lt;span style="font-style:italic;"&gt;Message and Trace Levels -&gt; finest&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JTOy9QLON1g/S8RXYqxQH7I/AAAAAAAAADU/cJwYgqtehy0/s1600/troubleshooting5.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_JTOy9QLON1g/S8RXYqxQH7I/AAAAAAAAADU/cJwYgqtehy0/s400/troubleshooting5.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5459584729589227442" /&gt;&lt;/a&gt;&lt;br /&gt;6. Klikamy myszką na przycisk "OK". Następnie potwierdzamy operację zapisu - "Save".&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JTOy9QLON1g/S8RYU0J9W1I/AAAAAAAAADc/0WTxzdpojYs/s1600/troubleshooting6.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_JTOy9QLON1g/S8RYU0J9W1I/AAAAAAAAADc/0WTxzdpojYs/s400/troubleshooting6.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5459585762900925266" /&gt;&lt;/a&gt;&lt;br /&gt;7. Domyślna lokalizacja pliku &lt;span style="font-style:italic;"&gt;trace.log&lt;/span&gt; to &lt;span style="font-style:italic;"&gt;/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/logs/server1/&lt;/span&gt;. Tam odnajdziemy uzyskane informacje.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-1809031409163940046?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/1809031409163940046/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=1809031409163940046' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/1809031409163940046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/1809031409163940046'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/04/was7-troubleshooting-tracing.html' title='WAS7 Troubleshooting: Tracing CreateKrbAuthMechanism'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_JTOy9QLON1g/S8RVhKrHecI/AAAAAAAAADE/9vc3Sgxq52k/s72-c/troubleshooting1.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-998268056469931016</id><published>2010-04-09T14:08:00.002+02:00</published><updated>2010-12-22T00:20:35.850+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='robocode'/><title type='text'>Instalacja Robocode</title><content type='html'>Zaplanowane w ramach poniedziałkowych zajęć z &lt;span style="font-style:italic;"&gt;PWiR&lt;/span&gt; zmagania czołgów zbliżają się wielkimi krokami. Czasu pozostało niewiele dlatego zabieram się do pracy już teraz. Poza "buszowaniem" na stronach &lt;a href="http://robowiki.net/"&gt;RoboWiki&lt;/a&gt; i poznawaniem opracowanych strategi walki udało mi się zainstalować najnowszą wersję &lt;a href="http://robocode.sourceforge.net/"&gt;Robocode&lt;/a&gt; oraz przeprowadzić kilka walk pomiędzy przykładowymi robotami. &lt;br /&gt;&lt;br /&gt;Chcąc rozpocząć przygodę z &lt;span style="font-style:italic;"&gt;Robocode&lt;/span&gt; warto upewnić się, że system posiada zainstalowany &lt;a href="http://java.sun.com/javase/downloads/widget/jdk6.jsp"&gt;Java Development Kit&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Wymagane jest również dodanie do zmiennej środowiskowej &lt;span style="font-style:italic;"&gt;Path&lt;/span&gt; pełnej ścieżki do &lt;span style="font-style:italic;"&gt;java.exe&lt;/span&gt;. W moim przypadku pod win7 polecenie realizujące daną czynność wyglądało następująco: &lt;br /&gt;&lt;span style="font-style:italic;"&gt;set Path=%Path%;C:\Program Files (x86)\Java\jdk1.6.0_16\bin\&lt;/span&gt; . Należy jednak pamiętać, że użycie narzędzia &lt;span style="font-style:italic;"&gt;set&lt;/span&gt; nie spowoduje trwałego dodania ścieżki do zmiennej &lt;span style="font-style:italic;"&gt;Path&lt;/span&gt;. &lt;br /&gt;W celu zaktualizowania zmiennej na stałe możemy posłużyć się narzędziem &lt;span style="font-style:italic;"&gt;setx&lt;/span&gt;, wydając polecenie: &lt;br /&gt;&lt;span style="font-style:italic;"&gt;setx Path "%Path%;C:\Program Files (x86)\Java\jdk1.6.0_16\bin\"&lt;/span&gt; .&lt;br /&gt;&lt;br /&gt;Pobrane archiwum jar &lt;a href="http://sourceforge.net/projects/robocode/files/robocode/1.7.2.0%20Beta%202/robocode-1.7.2.0-Beta-2-setup.jar/download"&gt;robocode-1.7.2.0-Beta-2-setup.jar&lt;/a&gt; instalujemy w systemie poprzez wydanie polecenia &lt;span style="font-style:italic;"&gt;java -jar robocode-1.7.2.0-Beta-2-setup.jar&lt;/span&gt; . Na pulpicie powinien znaleźć się skrót do aplikacji &lt;span style="font-style:italic;"&gt;Robocode&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Ciekawostką jest fakt, iż wykonanie powyższych czynności zmieniło &lt;br /&gt;u mnie domyślny rozmiar okna i czcionki dla konsoli, o czym przekonałem się uruchamiając &lt;span style="font-style:italic;"&gt;cmd&lt;/span&gt; przy okazji ponownego zalogowania do systemu.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-998268056469931016?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/998268056469931016/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=998268056469931016' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/998268056469931016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/998268056469931016'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/04/instalacja-robocode.html' title='Instalacja Robocode'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-469216862483655136</id><published>2010-04-07T21:51:00.001+02:00</published><updated>2010-07-17T01:16:19.013+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='websphere'/><title type='text'>IBM Update Installer for WebSphere Software</title><content type='html'>Ponieważ podstawowa instalacja &lt;span style="font-style:italic;"&gt;IBM WebSphere Application Server 7&lt;/span&gt; nie wspiera systemu &lt;span style="font-style:italic;"&gt;Kerberos&lt;/span&gt; jako mechanizmu autoryzacji ("This function is currently disabled") postanowiłem uaktualnić oprogramowanie do nowszej wersji. Wykorzystałem do tego celu narzędzie &lt;span style="font-style:italic;"&gt;IBM Update Installer for WebSphere Software&lt;/span&gt;. Poniżej znajduje się opis czynności wykonanych przy realizacji tego zadania.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. Pliki do pobrania&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;IBM Update Installer V7.0.0.9 for WebSphere Software for Linux: &lt;a href="http://www-01.ibm.com/support/docview.wss?rs=180&amp;uid=swg24020446"&gt;link&lt;/a&gt;&lt;br&gt;WebSphere Application Server V7.0 Fix Pack 7 for Linux: &lt;a href="http://www-01.ibm.com/support/docview.wss?rs=180&amp;uid=swg24024585"&gt;link&lt;/a&gt;&lt;br&gt;Java SDK 1.6 SR6 Cumulative Fix for WebSphere Application Server: &lt;a href="http://www-01.ibm.com/support/docview.wss?rs=180&amp;uid=swg24024588"&gt;link&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Instalacja&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Znajdując się wewnątrz rozpakowanego archwium narzędzia &lt;span style="font-style:italic;"&gt;IBM Update Installer&lt;/span&gt; ( w moim przypadku wewnątrz &lt;span style="font-style:italic;"&gt;7.0.0.9-WS-UPDI-LinuxIA32/UpdateInstaller/&lt;/span&gt; ) wydajemy polecenie &lt;span style="font-style:italic;"&gt;install&lt;/span&gt;.&lt;br /&gt;Po przeprowadzonej pomyślnie instalacji, automatycznie uruchomione zostanie narzędzie umożliwiające wskazanie ścieżki do plików &lt;span style="font-style:italic;"&gt;WAS Fix Pack 7&lt;/span&gt; oraz &lt;span style="font-style:italic;"&gt;Java SDK 1.6 SR6 Cumulative Fix &lt;/span&gt;. Jak widać poniżej oba pliki umieściłem w &lt;span style="font-style:italic;"&gt;/root&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JTOy9QLON1g/S7zqkrWmQzI/AAAAAAAAACU/6okW_Tslc_I/s1600/update+installer.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 275px;" src="http://3.bp.blogspot.com/_JTOy9QLON1g/S7zqkrWmQzI/AAAAAAAAACU/6okW_Tslc_I/s400/update+installer.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5457494764299895602" /&gt;&lt;/a&gt;Jeżeli wskazana ścieżka do plików jest poprawna program automatycznie odszuka gotowe do instalacji uaktualnienia.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JTOy9QLON1g/S7zr5DVIbeI/AAAAAAAAACc/xEDNbWdWgYU/s1600/update+installer2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 275px;" src="http://3.bp.blogspot.com/_JTOy9QLON1g/S7zr5DVIbeI/AAAAAAAAACc/xEDNbWdWgYU/s400/update+installer2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5457496213845208546" /&gt;&lt;/a&gt;Ostatnim krokiem jest uruchomienie procesu aktualizacji, którego poprawne ukończenie zaowocuje w pełni działającym &lt;span style="font-style:italic;"&gt;WAS'em&lt;/span&gt; w wersji &lt;span style="font-style:italic;"&gt;7.0.0.7&lt;/span&gt; .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-469216862483655136?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/469216862483655136/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=469216862483655136' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/469216862483655136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/469216862483655136'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/04/ibm-update-installer-for-websphere.html' title='IBM Update Installer for WebSphere Software'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_JTOy9QLON1g/S7zqkrWmQzI/AAAAAAAAACU/6okW_Tslc_I/s72-c/update+installer.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-296083593048048841</id><published>2010-03-30T13:02:00.002+02:00</published><updated>2010-07-17T01:21:27.134+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='współbieżność'/><title type='text'>Programowanie współbieżne - ciąg dalszy</title><content type='html'>Kolejnym zadaniem do zrealizowania w ramach przedmiotu "Programowanie współbieżne i rozproszone" było napisanie aplikacji wielowątkowej synchronizującej pracę barmana obsługującego klientów przy barze. Aplikacja powinna posiadać interfejs graficzny w celu wprowadzenia ilości stołków i klientów oraz wizualizacji jego działania. Realizacja zadania trwała dwa tygodnie dlatego pracę rozłożyłem na dwa etapy: tworzenie GUI oraz dobudowywanie funkcjonalności. Wykonane ćwiczenie zostało ocenione na ocenę bardzo dobrą a wynik pracy (z punktu widzenia użytkownika) można zobaczyć poniżej.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JTOy9QLON1g/S7HaetpsRKI/AAAAAAAAACM/loqi2ThD-xI/s1600/bar.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 399px;" src="http://2.bp.blogspot.com/_JTOy9QLON1g/S7HaetpsRKI/AAAAAAAAACM/loqi2ThD-xI/s400/bar.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5454380844907775138" /&gt;&lt;/a&gt;Synchronizacja wątków-klientów z wątkiem odpowiedzialnym za wizualizację została przeprowadzona poprzez połączenie klasy &lt;span style="font-style:italic;"&gt;CountDownLatch&lt;/span&gt; z semaforami. Wywołanie metody &lt;span style="font-style:italic;"&gt;await()&lt;/span&gt; klasy &lt;span style="font-style:italic;"&gt;CountDownLatch&lt;/span&gt; zostało umieszczone przed kodem odpowiedzialnym za wyświetlenie aktualnego stanu stołków w barze. Kazdy klient po pojedyńczym wykonaniu pętli (określeniu swojego stanu, np. pije piwo lub odszedł od baru) wykonuje metodę &lt;span style="font-style:italic;"&gt;countDown() (CountDownLatch)&lt;/span&gt;  i &lt;span style="font-style:italic;"&gt;acquire() (Semaphore)&lt;/span&gt;. Metoda &lt;span style="font-style:italic;"&gt;await()&lt;/span&gt; czeka tak długo aż wszyscy klienci określą swój stan, po czym w następnej kolejności wyświetlona na ekranie zostaje aktualna sytuacja mająca miejsce w barze. Przy kolejnym wykonaniu pętli obsługującej wizualizację wszystkie wątki-klienci dostają pozwolenie na dalsze działanie za pomocą metody &lt;span style="font-style:italic;"&gt;release() (Semaphore)&lt;/span&gt;. Funkcja barmana została zrealizowana poprzez metodę synchronizowaną zwracającą wartość logiczną - &lt;span style="font-style:italic;"&gt;true&lt;/span&gt; jeżeli barman zamierza obsłużyć danego klienta oraz &lt;span style="font-style:italic;"&gt;false&lt;/span&gt; w przeciwnym przypadku. Do metod synchronizowanych zalicza się również próba uzyskania miejsca przy barze, która w przypadku zajęcia stołka zwraca jego numer.&lt;br /&gt;&lt;br /&gt;Osoby zainteresowane poznaniem większej ilości szczegółów lub porównaniem kodu powstałych aplikacji zachęcam do rozmowy - nawet podczas przerwy między zajęciami na uczelni.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-296083593048048841?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/296083593048048841/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=296083593048048841' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/296083593048048841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/296083593048048841'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/03/programowanie-wspobiezne-ciag-dalszy.html' title='Programowanie współbieżne - ciąg dalszy'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_JTOy9QLON1g/S7HaetpsRKI/AAAAAAAAACM/loqi2ThD-xI/s72-c/bar.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-4880722795003365373</id><published>2010-03-26T10:10:00.001+01:00</published><updated>2010-07-17T01:09:41.154+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kerberos'/><title type='text'>Instalacja i konfiguracja systemu Kerberos</title><content type='html'>Zaczynając swoją przygodę z oprogramowaniem Kerberos 5 Release 1.8 nie rozstawałem się z dokumentacją nawet na chwilę. Ku mojemu zdziwieniu, już przy pierwszej napotkanej przeszkodzie okazało się, że wszelkie zgromadzone przeze mnie informacje sprawiają wrażenie niewystarczających do rozwiązania problemu. Zanim jednak przedstawię więcej szczegółów na ten temat chciałbym opisać krok po kroku czynności niezbędne do wykonania przy instalacji i konfiguracji systemu kerberos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. Instalacja&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Źródła do pobrania: &lt;a href="http://web.mit.edu/Kerberos/dist/krb5/1.8/krb5-1.8-signed.tar"&gt;krb-1.8-signed&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Przed przystąpieniem do instalacji należy upewnić się, że system zawiera kompilator &lt;span style="font-style:italic;"&gt;gcc&lt;/span&gt; oraz narzędzie &lt;span style="font-style:italic;"&gt;yacc&lt;/span&gt;, co można sprawdzić poleceniem &lt;span style="font-style:italic;"&gt;which&lt;/span&gt;, które zwraca pełną ścieżkę do programu (np. &lt;span style="font-style:italic;"&gt;which yacc&lt;/span&gt;). U mnie na SUSE Enterprise Server 11 domyślnie zainstalowane oprogramowanie nie zawierało ani jednego ani drugiego, dlatego zmuszony byłem uzupełnić system o paczki rpm: &lt;br /&gt;gcc oraz bison (które przeważnie można znaleźć na dvd z linuxem).&lt;br /&gt;&lt;br /&gt;Po rozpakowaniu archiwum ze źródłami systemu kerberos powinniśmy przejść do wnętrza folderu &lt;span style="font-style:italic;"&gt;krb5-1.8/src/&lt;/span&gt; oraz wykonać następujące komendy:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;./configure&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;make&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;make check&lt;/span&gt; (jeżeli chcemy przetestować skompilowany system)&lt;br /&gt;&lt;span style="font-style:italic;"&gt;make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Konfiguracja&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Przykładowa zawartość pliku &lt;span style="font-style:italic;"&gt;/etc/krb5.conf&lt;/span&gt; dla hosta o nazwie &lt;span style="font-style:italic;"&gt;linux-fi5z&lt;/span&gt; znajdującego się w domenie &lt;span style="font-style:italic;"&gt;site&lt;/span&gt; wygląda następująco:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JTOy9QLON1g/S6x8Cg1Sz1I/AAAAAAAAABU/teaT1exFILk/s1600/krb5.conf.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 190px;" src="http://3.bp.blogspot.com/_JTOy9QLON1g/S6x8Cg1Sz1I/AAAAAAAAABU/teaT1exFILk/s400/krb5.conf.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5452869631453876050" /&gt;&lt;/a&gt;&lt;br /&gt;Realm wg obowiązującej konwencji powinien nosić taką samą nazwę jak domena i składać się wyłącznie z wielkich liter. Jak można zauważyć usługa Key Distribution Center oraz serwer administratora znajdują się pod adresem &lt;span style="font-style:italic;"&gt;linux-fi5z.site&lt;/span&gt; a ich pliki log mieszczą się w &lt;span style="font-style:italic;"&gt;/var/log/krb5/&lt;/span&gt; .&lt;br /&gt;&lt;br /&gt;Przykładowy plik konfiguracyjny usługi KDC &lt;span style="font-style:italic;"&gt;/usr/local/var/krb5kdc/kdc.conf&lt;/span&gt; :&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JTOy9QLON1g/S6x88TTQuKI/AAAAAAAAABs/tcsQ2nnVn5Q/s1600/kdc.conf.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 155px;" src="http://4.bp.blogspot.com/_JTOy9QLON1g/S6x88TTQuKI/AAAAAAAAABs/tcsQ2nnVn5Q/s400/kdc.conf.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5452870624253884578" /&gt;&lt;/a&gt;&lt;br /&gt;Tutaj staramy się nie zmieniać zbyt wiele bez wyraźnej potrzeby, pozostawiamy większość domyślnych wartości.&lt;br /&gt;&lt;br /&gt;Informację o usługach kerberosa działających na danych portach powinniśmy umieścić w pliku &lt;span style="font-style:italic;"&gt;/etc/services&lt;/span&gt; dodając do niego poniższe linie:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JTOy9QLON1g/S6x8aUEo7oI/AAAAAAAAABk/GX8qaEwTEYs/s1600/services.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 220px; height: 87px;" src="http://4.bp.blogspot.com/_JTOy9QLON1g/S6x8aUEo7oI/AAAAAAAAABk/GX8qaEwTEYs/s400/services.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5452870040345439874" /&gt;&lt;/a&gt;&lt;br /&gt;Kolejnym krokiem jest stworzenie bazy danych dla usługi KDC za pomocą polecenia &lt;span style="font-style:italic;"&gt;/usr/local/sbin/kdb5_util create -r SITE -s&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dodawać administratorów będziemy za pomocą narzędzia &lt;span style="font-style:italic;"&gt;/usr/local/sbin/kadmin.local&lt;/span&gt; . Polecenie mające na celu dodanie uzytkownika root do grupy administratorów wyglądać będzie następująco &lt;span style="font-style:italic;"&gt;addprinc root/admin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Natomiast dodanie użytkownika, który będzie korzystać z usług za pomocą systemu kerberos przeprowadzamy poleceniem &lt;span style="font-style:italic;"&gt;addprinc user_name&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dla nowo utworzonych użytkowników powinniśmy stworzyć listę uprawnień &lt;span style="font-style:italic;"&gt;/usr/local/var/krb5kdc/kadm5.acl&lt;/span&gt; , w której na potrzeby przykładu nadamy każdemu administratorowi wszelkie dostępne uprawnienia: &lt;span style="font-style:italic;"&gt;*/admin@SITE *&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Utworzenie pliku keytab umożliwi demonowi kadmind dekodowanie biletów Kerberosa w celu przyznania lub nie dostępu do bazy danych. Po uruchomieniu narzędzia &lt;span style="font-style:italic;"&gt;/usr/local/sbin/kadmin.local&lt;/span&gt; wydajemy polecenie&lt;span style="font-style:italic;"&gt; ktadd -k /usr/local/var/krb5kdc/kadmin5.keytab kadmin/admin kadmin/changepw&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Po wykonaniu podstawowej konfiguracji systemu Kerberos możemy uruchomić usługi &lt;span style="font-style:italic;"&gt;krb5kdc&lt;/span&gt; i &lt;span style="font-style:italic;"&gt;kadmind &lt;/span&gt;(&lt;span style="font-style:italic;"&gt;/usr/local/sbin/&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. Napotkana przeszkoda&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Chcąc sprawdzić czy system Kerberos działa poprawnie postanowiłem skorzystać z dołączonych przykładowych aplikacji. W tym celu dodałem do bazy danych pozycję &lt;span style="font-style:italic;"&gt;sample/linux-fi5z.site@SITE&lt;/span&gt; oraz linijkę &lt;span style="font-style:italic;"&gt;sample 13135/tcp&lt;/span&gt; do pliku &lt;span style="font-style:italic;"&gt;/etc/services&lt;/span&gt; . Następnie uruchomiłem przykładowy serwer komendą &lt;span style="font-style:italic;"&gt;sserver -p 13135 -S /usr/local/var/krb5kdc/kt.keytab &lt;/span&gt;.&lt;br /&gt;Po uzyskaniu za pomocą &lt;span style="font-style:italic;"&gt;kinit&lt;/span&gt; biletu TGT umożliwiającego dalsze działania postanowiłem połączyć się z serwerem komendą &lt;span style="font-style:italic;"&gt;sclient linux-fi5z&lt;/span&gt; . Jak można zauważyć poniżej test zakończył się niepowodzeniem.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JTOy9QLON1g/S6x9UkSeKbI/AAAAAAAAAB8/KSn5FcS72kg/s1600/sclient.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 330px;" src="http://3.bp.blogspot.com/_JTOy9QLON1g/S6x9UkSeKbI/AAAAAAAAAB8/KSn5FcS72kg/s400/sclient.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5452871041130834354" /&gt;&lt;/a&gt;&lt;br /&gt;"Wrong principal in request" - nie jestem w stanie odgadnąć, co jest przyczyną błędu, za wszelkie pomysły na rozwiązanie zagadki będę bardzo wdzięczny.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-4880722795003365373?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/4880722795003365373/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=4880722795003365373' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/4880722795003365373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/4880722795003365373'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/03/instalacja-i-konfiguracja-systemu.html' title='Instalacja i konfiguracja systemu Kerberos'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_JTOy9QLON1g/S6x8Cg1Sz1I/AAAAAAAAABU/teaT1exFILk/s72-c/krb5.conf.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-4079861715761561332</id><published>2010-03-20T13:13:00.001+01:00</published><updated>2010-07-17T01:18:51.885+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='websphere'/><category scheme='http://www.blogger.com/atom/ns#' term='różne'/><category scheme='http://www.blogger.com/atom/ns#' term='praktyki'/><title type='text'>Podsumowanie ubiegłego tygodnia</title><content type='html'>Wreszcie nadszedł upragniony weekend! Teoretycznie powinienem przewracać się z boku na bok ciesząc się chwilą odpoczynku, ale dobrze wiem, że tym razem nie będę leniuchować. Mam zamiar opracować interfejs graficzny do kolejnego z ćwiczeń dotyczących wielowątkowości oraz bliżej zapoznać się z &lt;span style="font-style:italic;"&gt;MIT Kerberos 5 Release 1.8&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;Całe szczęście, że ubiegły tydzień mogę zaliczyć do udanych - utwierdziło mnie w tym przekonaniu przeprowadzone z Jackiem Laskowskim podsumowanie wykonanej pracy. Instalacja oprogramowania &lt;span style="font-style:italic;"&gt;WebSphere Application Server 7&lt;/span&gt; była równie intuicyjna co instalacja systemu &lt;span style="font-style:italic;"&gt;SUSE Linux Enterprise Server 11&lt;/span&gt;, aczkolwiek nie obyło się bez drobnych przeszkód. Z pierwszą &lt;br /&gt;- &lt;span style="font-style:italic;"&gt;was7&lt;/span&gt; nie rozpoznał &lt;span style="font-style:italic;"&gt;SUSE&lt;/span&gt;, jako wspieranego systemu operacyjnego - poradziłem sobie bez problemu. Przed przystąpieniem do instalacji zapoznałem się z dokumentacją produktu stąd wiedziałem, &lt;br /&gt;że wystarczy jedynie podmienić plik &lt;span style="font-style:italic;"&gt;WAS/was.primary.pak/maintenance.xml&lt;/span&gt; na nowszą wersję, w tym przypadku dla architektury &lt;span style="font-style:italic;"&gt;IA32&lt;/span&gt;. Plik służący do nadpisania &lt;span style="font-style:italic;"&gt;maintenance.xml&lt;/span&gt; można pobrać &lt;a href="http://www-01.ibm.com/support/docview.wss?uid=swg21393772&amp;aid=1"&gt;tutaj&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Mniej zrozumiałym problemem okazał się być komunikat narzędzia &lt;span style="font-style:italic;"&gt;IVT&lt;/span&gt;, uruchomionego przeze mnie po instalacji w celu zweryfikowania czy wszystko przebiegło zgodnie z planem. &lt;span style="font-style:italic;"&gt;IVT&lt;/span&gt; nieczule poinformował mnie, że &lt;span style="font-style:italic;"&gt;"IVTL0170I: Cannot find profile home. IVT cannot continue."&lt;/span&gt;. Dość mocno się zdziwiłem - przecież stworzyłem profil podczas instalacji, która zakończyła się sukcesem. Próba dodania profilu za pomocą &lt;span style="font-style:italic;"&gt;Profile Management Tool&lt;/span&gt; nie przyniosła zamierzonego efektu. Rozwiązania problemu szukałem w &lt;span style="font-style:italic;"&gt;InfoCenter&lt;/span&gt; dla &lt;span style="font-style:italic;"&gt;was7&lt;/span&gt;, nie odnalazłem jednak żadnej istotnej z mojego punktu widzenia informacji. &lt;br /&gt;&lt;br /&gt;Błędem, jaki popełniłem było szukanie odpowiedzi na nurtujące mnie pytanie z dala od źródła - wszystko, czego potrzebowałem znajdowało się w pliku &lt;span style="font-style:italic;"&gt;/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/logs/wsadmin.traceout&lt;/span&gt; zawierającym informację o zaistniałym wyjątku (&lt;span style="font-style:italic;"&gt;java.net.UnknownHostException&lt;/span&gt;). Okazało się, że przyczyną kłopotów był brakujący wpis w &lt;span style="font-style:italic;"&gt;/etc/hosts&lt;/span&gt;, którego brak istnienia zawdzięczam narzędziu&lt;span style="font-style:italic;"&gt; YaST&lt;/span&gt; (oraz poniekąd swojej spostrzegawczości :), które domyślnie odznaczyło polecenie &lt;span style="font-style:italic;"&gt;"Write Hostname to /etc/hosts"&lt;/span&gt; przy konfiguracji ustawień sieciowych. &lt;br /&gt;&lt;br /&gt;Poprawnie utworzony profil dał mi możliwość uruchomienia przykładowej witryny sklepu internetowego &lt;span style="font-style:italic;"&gt;"Plants by WebSphere"&lt;/span&gt; &lt;br /&gt;co ostatecznie upewniło mnie, że tym razem wszystkie czynności zostały wykonane należycie.&lt;br /&gt;&lt;br /&gt;   Praca w korporacji ma swoje mocne dobre strony. Na początku tygodnia zwróciłem się z prośbą o przydział komputera z większą ilością pamięci RAM na pokładzie a już w piątek podczas kilkuminutowej rozmowy telefonicznej zostałem zapewniony, &lt;br /&gt;że maszyna zostanie wysłana z Warszawy w poniedziałek. Podoba mi się podejście, które można krótko opisać w następujący sposób: &lt;span style="font-style:italic;"&gt;"Damy Ci wszystko, czego potrzebujesz tylko przekonaj nas, że to, &lt;br /&gt;co otrzymamy w zamian jest warte tego, o co prosisz"&lt;/span&gt;. Gorzej, gdy nie wiesz, w jaki sposób uzasadnić swoje potrzeby, tutaj nie ma zmiłuj się - liczą się konkrety. Sprzęt to podstawa, ale jeszcze większe znaczenie mają narzędzia, którymi &lt;span style="font-style:italic;"&gt;IBM&lt;/span&gt; nas obdarowuje. Łatwość komunikacji i dostęp do ogromnej bazy informacji &lt;br /&gt;to z pewnością jedne z głównych zalet, które zrobiły na mnie wrażenie. Dostrzegam, że wraz z czasem coraz lepiej wykorzystuję dane mi narzędzia, co ma bezpośrednie przełożenie na fakt, iż coraz lepiej wykonuję swoją pracę.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-4079861715761561332?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/4079861715761561332/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=4079861715761561332' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/4079861715761561332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/4079861715761561332'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/03/podsumowanie-ubiegego-tygodnia.html' title='Podsumowanie ubiegłego tygodnia'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-1154750770512626815</id><published>2010-03-16T11:12:00.002+01:00</published><updated>2010-07-17T01:35:30.440+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='różne'/><category scheme='http://www.blogger.com/atom/ns#' term='współbieżność'/><title type='text'>Programowanie współbieżne</title><content type='html'>Poniedziałkowe laboratorium z przedmiotu "Programowanie współbieżne i rozproszone" zawsze zostawia w mojej głowie pewien mętlik. Zazwyczaj staram się wykonać jak najwięcej w czasie trwania zajęć, aby mieć mniej pracy w domu, fakt, iż jest to ostatnie laboratorium w danym dniu sprawia, że jedyną rzeczą na jakiej potrafię się skupić, jest myśl o powrocie do domowego zacisza. Ta czasowa nieprzydatność do pracy sprawia, że o wiele trudniej jest mi wpaść na prawidłowe rozwiązanie postawionego zadania, choć po dłuższej chwili namysłu okazuje się ono być całkiem banalne. Sytuacja zazwyczaj komplikuje się, gdy w głowie zaczynają pojawiać się dziesiątki pomysłów, a nie mam pewności, który jest tym właściwym.&lt;br /&gt;&lt;br /&gt;Zabawne może wydawać się, że nie tylko ja mam wspomniany mętlik w głowie - cała grupa pozostaje z pracą do wykonania w domu. Co więcej, jeszcze ciekawiej robi się, gdy niejasności pojawiają się tuż przed terminem oddania pracy, a treść zadania mimo swojej prostoty opisu dopuszcza pozornie mnogość interpretacji. Doskonale zdaję sobie sprawę z faktu, iż sam proces planowania trwa znacznie dłużej niż kodowanie, dlatego zawsze próbuję zrobić małą burzę mózgów, w celu wyłonienia kilku najlepszych koncepcji oraz odrzucenia tych całkiem skrajnych, ale po chwili rozmowy odzywa się zmęczenie spowodowane niewyspaniem i wszystkie chęci zgłębienia tematu wnet gdzieś znikają.   Wychodząc z założenia, że w programowaniu tak jak w życiu, nie zawsze liczy się fakt osiągnięcia celu, ale styl w jakim się tego dokonało, na weekend ponownie podchodzę do zadania tym razem wypoczęty i z otwartym umysłem.&lt;br /&gt;&lt;br /&gt;Wyżej opisana historia powtarza się, co tydzień i wiem, że nie tylko ja zostawiam sobie pracę na jego koniec. Dla osób, które mimo szczerych chęci nie znalazły jednak czasu na dopracowanie swojego kodu, zamieszczam krótki opis moich pomysłów na realizację dwóch ostatnich ćwiczeń laboratoryjnych. Zaznaczam, że programy powstałe na ich bazie, zostały ocenione na ocenę bardzo dobrą, co świadczy o fakcie, iż koncepcja i wykonanie są  co najmniej poprawne.&lt;br /&gt;&lt;br /&gt;Pozornie skomplikowane zadanie, które byliśmy zobligowani wykonać na pierwszym laboratorium dotyczącym współbieżności, polegało na odwzorowaniu sytuacji mającej miejsce na parkingu. Samo rozwiązanie jest bardzo krótkie i proste, tym bardziej, że mogliśmy dopuścić do sytuacji, gdzie klienci nie honorują kolejki - najmniej zuchwały klient parkuje/wyjeżdża jako ostatni. Zuchwałość, o której piszę, to nic innego jak przydział czasu procesora, miejsce na parkingu oraz dwie bramy to zasoby, do których każdy wątek-samochód chce mieć dostęp. Jedyne wymagane na starcie programu wartości to ilość pojazdów oraz miejsc na parkingu, czas jazdy potencjalnego klienta poza parkingiem i czas jego postoju. Postanowiłem również założyć odpowiednią ilość zmian stanu pojazdów, aby generowany ruch nie był zbyt wielki, a jedynie przedstawiał mechanizm działania programu. Prostotę wykonania najważniejszych elementów tj. samochodu i obu bram ilustruje kod poniżej, na którym można dostrzec, że instrukcje informujące o zmianie stanu samochodów zawarte są w sekcjach krytycznych - w przeciwnym razie wyświetlane komunikaty nie odzwierciedlałyby chronologicznej kolejności zachodzących zdarzeń.&lt;br&gt;&lt;br /&gt;Klasa Parking:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JTOy9QLON1g/S6st_aU0-RI/AAAAAAAAAA8/lW4E0A_mKu0/s1600/parking.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 245px;" src="http://3.bp.blogspot.com/_JTOy9QLON1g/S6st_aU0-RI/AAAAAAAAAA8/lW4E0A_mKu0/s400/parking.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5452502341283805458" /&gt;&lt;/a&gt;&lt;br /&gt;Wątek:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JTOy9QLON1g/S6izGzt5S_I/AAAAAAAAAA0/CXKB4nlX1BM/s1600-h/watek.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 304px;" src="http://3.bp.blogspot.com/_JTOy9QLON1g/S6izGzt5S_I/AAAAAAAAAA0/CXKB4nlX1BM/s400/watek.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5451804278475279346" /&gt;&lt;/a&gt;&lt;br /&gt;Kolejne laboratorium było już bardziej wymagające. Tym razem zadanie polegało na odwzorowaniu sytuacji mającej miejsce na stacji benzynowej z trzema dystrybutorami. O zagłodzeniu wątków nie może być tutaj mowy - gra toczy się o dużą stawkę, brak benzyny w baku oznacza wyeliminowanie danego samochodu. Wartości liczbowe wymagane na starcie programu to maksymalna długość kolejek, ilość samochodów, ich czas tankowania oraz czas jazdy poza stacją. W przypadku zapełnienia wszystkich kolejek na stacji klient zmuszony jest do dalszej jazdy przez czas równy dwukrotności czasu tankowania, następnie może spróbować ponownie dostać się do kolejki. Samochody powinny dążyć do maksymalnego wykorzystania paliwa, dlatego założyłem, że z każdym kolejnym tankowaniem maksymalny poziom paliwa w baku się zmniejsza. Nie chciałem przecież dopuścić do sytuacji, gdzie w ruchu pozostają np. dwa samochody mające do dyspozycji całą stację dla siebie - mogłyby jeździć wtedy bez końca. Wybór do realizacji tego zadania struktury wyższego poziomu, jaką jest kolejka blokująca (w tym przypadku ArrayBlockingQueue), był dla mnie oczywisty, aczkolwiek do intensywniejszego myślenia zmusił mnie fakt, iż samochód wjeżdżający na stację, powinien wybrać najkrótszą kolejkę. Pierwszym pomysłem było wykorzystanie metod kolejek blokujących w sekcji krytycznej, która zlicza poziom ich zapełnienia i na żądanie klienta wybiera najkrótszą. Następnym krokiem przy założeniu, że pojazd został już przyporządkowany do jednej z kolejek, jest sprawdzenie, czy samochód zgłaszający chęć skorzystania z dystrybutora, jest pojazdem znajdującym się na czele kolejki - tu przychodzi z pomocą metoda peek(), która zwraca element z kolejki bez usuwania go. W przypadku zgodności wykonana zostaje metoda poll() (usuwa samochód z kolejki), po czym dany samochód uzyskuje dostęp do dystrybutora blokując go jednocześnie na czas użytkowania. W przeciwnym przypadku - stwierdzenia niezgodności - zostaje ponowiona weryfikacja, czy samochód zgłaszający chęć skorzystania z dystrybutora, jest pojazdem znajdującym się na czele kolejki. Pomysł ten sprawia wrażenie akceptowalnego, ale czy nie dałoby się zrobić tego subtelniej? Jestem otwarty na wszelkie sugestie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-1154750770512626815?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/1154750770512626815/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=1154750770512626815' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/1154750770512626815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/1154750770512626815'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/03/poniedziakowe-laboratorium-z-przedmiotu.html' title='Programowanie współbieżne'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_JTOy9QLON1g/S6st_aU0-RI/AAAAAAAAAA8/lW4E0A_mKu0/s72-c/parking.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-7561554934049935769</id><published>2010-03-12T10:21:00.001+01:00</published><updated>2010-07-17T01:16:43.232+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='różne'/><category scheme='http://www.blogger.com/atom/ns#' term='praktyki'/><title type='text'>Rozpoczęcie praktyk</title><content type='html'>Praktyki edukacyjne organizowane przez firmę&lt;span style="font-style:italic;"&gt; IBM&lt;/span&gt; ruszyły na dobre&lt;br&gt;i wg planu potrwają trzy miesiące. Postanowiłem wziąć w nich udział ze względu na możliwość zdobycia nowych doświadczeń, które mam nadzieję pomogą mi na drodze do dalszego rozwoju oraz ze względu na wewnętrzną potrzebę zrobienia czegoś "konkretnego", czym m.in. mógłbym pozytywnie zaskoczyć przyszłego pracodawcę. Dodatkowym bodźcem była czysta ciekawość i chęć uzyskania odpowiedzi na pytania &lt;span style="font-style:italic;"&gt;"W jaki sposób działa tak wielka machina?"&lt;/span&gt; oraz &lt;span style="font-style:italic;"&gt;&lt;br&gt;"Czy się w niej odnajdę?"&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;Warunkiem przyjęcia na praktyki było złożenie dokumentu potwierdzającego wysokie wyniki w nauce lub rekomendacji od prowadzącego zajęcia na uczelni, przygotowanie kilkunastominutowej prezentacji w języku angielskim oraz odbycie rozmowy kwalifikacyjnej. Łącznie ze mną biorą w nich udział cztery osoby z Uniwersytetu Zielonogórskiego. Wizytę w poznańskiej siedzibie firmy mamy już za sobą, teraz przyszedł czas na właściwą pracę, którą będziemy wykonywać zdalnie. &lt;br /&gt;&lt;br /&gt;Jeden z dostępnych tematów do zrealizowania, który wydał się szczególnie interesujący brzmiał : &lt;span style="font-style:italic;"&gt;"Using Kerberos token profile to secure enterprise applications in IBM WebSphere Application Server V7"&lt;/span&gt;. Znajomość idei &lt;span style="font-style:italic;"&gt;Kerberos'a&lt;/span&gt; oraz chęć bliższego poznania oprogramowania &lt;span style="font-style:italic;"&gt;WAS7&lt;/span&gt; utwierdziły mnie w wyborze tego tematu. Integracja &lt;span style="font-style:italic;"&gt;Kerberosa&lt;/span&gt; z &lt;span style="font-style:italic;"&gt;WAS7&lt;/span&gt; będzie przeprowadzona na wirtualnej maszynie kontrolowanej przez system &lt;span style="font-style:italic;"&gt;RedHat Enterprise Server&lt;/span&gt; lub &lt;span style="font-style:italic;"&gt;Suse Enterprise Server&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;W chwili obecnej zajmuję się kompletowaniem oprogramowania,&lt;br&gt;w kolejce pozostał już tylko &lt;span style="font-style:italic;"&gt;linux&lt;/span&gt;, którego czas pobierania&lt;br&gt;z pewnością urozmaici lektura dokumentacji &lt;span style="font-style:italic;"&gt;WAS7&lt;/span&gt;. Wraz z rozwojem wydarzeń będę opisywać postęp pracy oraz wszelkie odczucia względem samych praktyk. Dodam jeszcze tylko, że moim mentorem jest &lt;A HREF="http://www.jaceklaskowski.pl/"&gt;Jacek Laskowski&lt;/A&gt; a wszystko co robię w ramach praktyk można obserwować na bieżąco za pomocą &lt;A HREF="http://twitter.com/marekszpak"&gt;twittera&lt;/A&gt; i &lt;A HREF="http://mszpak.blip.pl/"&gt;blipa&lt;/A&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-7561554934049935769?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/7561554934049935769/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=7561554934049935769' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/7561554934049935769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/7561554934049935769'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/03/praktyki-edukacyjne-organizowane-przez.html' title='Rozpoczęcie praktyk'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-201958534690070286.post-4524775346845448963</id><published>2010-03-11T15:05:00.001+01:00</published><updated>2010-07-17T01:12:30.734+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='różne'/><title type='text'>Ruszam z inicjatywą!</title><content type='html'>Zainspirowany ideą posiadania własnego bloga postanowiłem wprowadzić pomysł w życie. Za pomocą internetowego pamiętnika zamierzam dzielić się z szerszym gronem odbiorców swoimi przemyśleniami odnośnie programowania (i nie tylko), komentować napotkane problemy związane z aktualnie realizowanymi projektami oraz opisywać najciekawsze ćwiczenia laboratoryjne, które przyjdzie mi wykonać na uczelni. Mam cichą nadzieję, że moja inicjatywa zostanie pozytywnie odebrana przez czytelników oraz przyczyni się do poszerzenia - nie tylko mojej - wiedzy w kwestii poruszanych przeze mnie zagadnień.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/201958534690070286-4524775346845448963?l=marekszpak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekszpak.blogspot.com/feeds/4524775346845448963/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=201958534690070286&amp;postID=4524775346845448963' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/4524775346845448963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/201958534690070286/posts/default/4524775346845448963'/><link rel='alternate' type='text/html' href='http://marekszpak.blogspot.com/2010/03/ruszam-z-inicjatywa.html' title='Ruszam z inicjatywą!'/><author><name>Marek Szpak</name><uri>http://www.blogger.com/profile/18193613403883324983</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_JTOy9QLON1g/TIT6gcPoIwI/AAAAAAAAAHw/G8WZBwq1e90/S220/marekszpak2.JPG'/></author><thr:total>0</thr:total></entry></feed>
