<?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-8814228651583994248</id><updated>2012-02-16T16:32:24.726+01:00</updated><category term='CASH'/><category term='Java 7'/><category term='windows 8'/><category term='JPA'/><category term='JSP'/><category term='NetBeans'/><category term='JEE'/><category term='Sybase PowerDesigner'/><category term='Wzorce projektowe'/><title type='text'>Trochę o Javie.</title><subtitle type='html'>JSE, JEE i nie tylko. Kursy porady</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kadoel-kawaczyjava.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>kadoel</name><uri>http://www.blogger.com/profile/09242013722249997796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8814228651583994248.post-22781642283119365</id><published>2011-11-02T23:11:00.000+01:00</published><updated>2011-11-02T23:11:32.448+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CASH'/><title type='text'>FIRECASH JAK ZARABIAĆ SKUTECZNY PORADNIK</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;FireCash ShareCash jak skutecznie zarabiać w internecie !&lt;br /&gt;&lt;br /&gt;3000$ na miesiąc nie ma problemu !&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;DOWNLOAD&lt;br /&gt;&lt;a href="http://firecash.org/download.html?id=25949"&gt;PORADNIK PDF&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8814228651583994248-22781642283119365?l=kadoel-kawaczyjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kadoel-kawaczyjava.blogspot.com/feeds/22781642283119365/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/11/firecash-jak-zarabiac-skuteczny.html#comment-form' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/22781642283119365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/22781642283119365'/><link rel='alternate' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/11/firecash-jak-zarabiac-skuteczny.html' title='FIRECASH JAK ZARABIAĆ SKUTECZNY PORADNIK'/><author><name>kadoel</name><uri>http://www.blogger.com/profile/09242013722249997796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8814228651583994248.post-2224790899243935252</id><published>2011-10-05T22:22:00.000+02:00</published><updated>2011-10-05T22:22:22.003+02:00</updated><title type='text'>Ulubiony żart programistów Javy</title><content type='html'>&lt;i&gt;Why java programmers wear glasses?&amp;nbsp;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Because they can't C#	                                &lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8814228651583994248-2224790899243935252?l=kadoel-kawaczyjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kadoel-kawaczyjava.blogspot.com/feeds/2224790899243935252/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/10/ulubiony-zart-programistow-javy.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/2224790899243935252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/2224790899243935252'/><link rel='alternate' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/10/ulubiony-zart-programistow-javy.html' title='Ulubiony żart programistów Javy'/><author><name>kadoel</name><uri>http://www.blogger.com/profile/09242013722249997796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8814228651583994248.post-2236367135796971656</id><published>2011-09-14T19:45:00.000+02:00</published><updated>2011-09-17T18:12:03.754+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows 8'/><title type='text'>Windows 8 pre-beta</title><content type='html'>&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-F0cL-XlO7G8/TnDnF4cvU8I/AAAAAAAAADU/puiYtxj4Sic/s1600/win8.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-F0cL-XlO7G8/TnDnF4cvU8I/AAAAAAAAADU/puiYtxj4Sic/s1600/win8.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Microsoft &lt;a href="http://msdn.microsoft.com/en-us/windows/home/"&gt;udostępnił&lt;/a&gt; wersję pre-beta (Windows Developer Preview) systemu operacyjnego Windows 8.Udostępniona wersja Windows 8 została określona przez Microsoft jako Windows Developer Preview. Oznacza to, że jest to wczesna wersja testowa, nie przeznaczona do codziennego użytkowania. Firma ostrzega, że system może działać niestabilnie. Użytkownicy mogą pobrać obraz płyty instalacyjnej (ISO) w jednym z trzech wariantów - wersja 64-bitowa, wersja 64-bitowa wraz z pakietem narzędzi programistycznych lub wersja 32-bitowa.&lt;br /&gt;Microsoft podał minimalne wymagania sprzętowe systemu Windows 8 pre-beta. Do uruchomienia następcy Windows 7 wystarczy komputer z procesorem 1 GHz, 1 GB pamięci RAM (2 GB dla wersji 64-bit), układem graficznym zgodnym z DirectX 9 i 16 GB wolnego miejsca na dysku. W praktyce oznacza to, że Windows 8 pre-beta powinien bez problemu działać nawet na starszych, kilkuletnich maszynach. Firma ostrzega, że nie ma możliwości odinstalowania Windows 8 pre-beta - by przywrócić poprzedni system operacyjny, należy skorzystać z oryginalnego nośnika instalacyjnego lub utworzonej wcześniej kopii bezpieczeństwa. Oczywiście istnieje także możliwość wykonania czystej instalacji, która nie powinna naruszyć obecnego systemu operacyjnego. &lt;br /&gt;Obraz płyty instalacyjnej Windows 8 pre-beta (Windows Developer Preview) można &lt;a href="http://msdn.microsoft.com/en-us/windows/home/"&gt;pobrać&lt;/a&gt; bezpośrednio ze strony Windows Dev Center.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Oto film pokazujący instalację systemu na wirtualnej maszynie VirtualBox:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="345" src="http://www.youtube.com/embed/obZ-Npi9xSA" width="560"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Tutaj zaś ciekawy film prezentujący szybkość ładowania się systemu na komputerze z tradycyjnym dyskiem mechanicznym.&lt;br /&gt;&lt;iframe width="560" height="315" src="http://www.youtube.com/embed/KyPGXNRrBF0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dla osób mających problem z instalacją Windows 8 na VirtualBox pre-beta polecam link :&lt;br /&gt;http://www.sysprobs.com/guide-install-windows-8-virtualbox&lt;br /&gt;źródło: &lt;a href="http://www.dobreprogramy.pl/BUILD-Dzien-1-Windows-8-prebeta-do-pobrania,Aktualnosc,27767.html"&gt;dobreprogramy.pl&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8814228651583994248-2236367135796971656?l=kadoel-kawaczyjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kadoel-kawaczyjava.blogspot.com/feeds/2236367135796971656/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/09/windows-8-pre-beta.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/2236367135796971656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/2236367135796971656'/><link rel='alternate' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/09/windows-8-pre-beta.html' title='Windows 8 pre-beta'/><author><name>kadoel</name><uri>http://www.blogger.com/profile/09242013722249997796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-F0cL-XlO7G8/TnDnF4cvU8I/AAAAAAAAADU/puiYtxj4Sic/s72-c/win8.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8814228651583994248.post-3471291703074025963</id><published>2011-09-14T18:12:00.000+02:00</published><updated>2011-09-19T17:00:55.768+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='JSP'/><title type='text'>JAVA EE6 Programowanie aplikacji WWW KURS cz. 8 Wprowadzenie do JSP</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ev9hS7O9Vjc/TnCAT7ntzNI/AAAAAAAAADI/u5YnKDq7XwA/s1600/JSP_LOGO_RGB.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-ev9hS7O9Vjc/TnCAT7ntzNI/AAAAAAAAADI/u5YnKDq7XwA/s200/JSP_LOGO_RGB.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JSP - JavaServer Pages&lt;/i&gt; jest to technologia, która umożliwia zagnieżdżenie kodu Java w dokumentach HTML. Wcześniej skupialiśmy swoją uwagę na mechanizmie działania serwletów. Generowanie kodu HTML z wykorzystaniem metody &lt;i&gt;println() &lt;/i&gt;obiektu &lt;i&gt;PrintWriter.&lt;/i&gt; Takie podejście bardzo komplikuje kod i utrudnia korzystanie z narzędzi do tworzenia dokumentów HTML. Podział pracy między tworzeniem wizualnej strony, a tworzeniem logiki jest zachwiany. Odpowiedzią na powyższą wadę serwletów było opracowanie przez firmę Sun technologii &lt;i&gt;JavaServer Pages&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JSP pozwala nam na wstawianie do zwykłego kodu HTML konstrukcji w języku Java - co nie jest obecnie zalecane. Umieszczanie kodu Java w dokumencie HTML odbywa się z wykorzystaniem specjalnych znaczników.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-1f7apbHhPfE/TnCGTIw46EI/AAAAAAAAADM/8E73OzIgQ-k/s1600/skryptlet.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://2.bp.blogspot.com/-1f7apbHhPfE/TnCGTIw46EI/AAAAAAAAADM/8E73OzIgQ-k/s400/skryptlet.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Takie umieszczenie konstrukcji językowych Java w dokumencie JSP nazywamy skryptami. Nie powinniśmy stosować takiego rozwiązania, ponieważ jak wiemy JSP zostało stworzone w celu uniknięcia niewygodnego generowania stron HTML z wykorzystaniem serwletów, a także do rozdzielenia mechanizmów aplikacji webowej czyli warstwy logiki aplikacji od warstwy prezentacji. Skryplety burzą ten podział. Powiedzmy sobie po prostu, że jest to przeszłość. Zamiast nich powinniśmy używać specjalnych znaczników EL i JSTL. Wspomniałem kiedyś, że JSP to tak naprawdę serwlet. Od strony technicznej dokument JSP przy pierwszym uruchomieniu jest przekształcany na serwerze do odpowiadającego im serwletu. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-4bTuOIZjlQs/TnCG1lhkqXI/AAAAAAAAADQ/XA-S_JSFQ7M/s1600/jspjsp.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="312" src="http://3.bp.blogspot.com/-4bTuOIZjlQs/TnCG1lhkqXI/AAAAAAAAADQ/XA-S_JSFQ7M/s400/jspjsp.gif" width="400" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Klient wysyła żądanie pobrania strony, które po przejściu przez serwer HTTP trafia do serwera aplikacji - Web server. Żądanie zostaje przekierowane do kontenera JSP, który znajduje się na serwerze aplikacji. Podczas pierwszego żądania pobrania strony JSP zostaje ona wysłana do translatora JSP. Translator generuje kod wynikowy w postaci klasy serwletu. Kod źródłowy jest przesyłany do kompilatora Java, gdzie zamieniamy jest na Java Byte Code maszyny wirtualnej. Od tej pory ten skompilowany kod czyli tak naprawdę serwlet jest zarządzany przez kontener serwletów. &lt;/div&gt;Skompilowane strony JSP pozostają załadowane do maszyny wirtualnej Java i kolejne odwołania do tej samej strony nie wymagają przejścia przez fazę translacji.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Obecnie technologia JSP ma wsparcie w postaci języka wyrażeń &lt;i&gt;EL- Expression Language &lt;/i&gt;i standardowej biblioteki znaczników &lt;i&gt;JSTL - JavaServer Pages Tag Library&lt;/i&gt;.EL i JSTL zastępują nam znaczniki, które za bardzo komplikują kod, a także mieszają logikę prezentacji i aplikacji.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Strony JSP mogą odwoływać się do obiektów predefiniowanych w skryptach :&lt;/div&gt;&lt;ul&gt;&lt;li&gt;request - wszystkie parametry wywołania strony JSP (HttpServletRequest)&lt;/li&gt;&lt;li&gt;response - reprezentuje odpowiedź zwracaną klientowi (HttpServletResponse)&lt;/li&gt;&lt;li&gt;out - reprezentuje stronę zwracaną klientowi (jsp.JspWriter)&lt;/li&gt;&lt;li&gt;session - reprezentuje sesję HTTP (http.HttpSession)&lt;/li&gt;&lt;li&gt;application - reprezentuje kontekst aplikacji (ServletContex)&lt;/li&gt;&lt;li&gt;config - konfiguracja serwletu (servletConfig)&lt;/li&gt;&lt;li&gt;pageContext - obiekty, które są w zasięgu widoczności bieżącej strony (jsp.PageContext)&lt;/li&gt;&lt;li&gt;page - reprezentuje bieżącą stronę (java.lang.Object)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Przyjrzyjmy się skryptom JSP, których jak już wspomniałem nie należy używać. Skrypty są to :&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;i&gt;&amp;lt;%= wyrazenie&amp;nbsp; %&amp;gt;&lt;/i&gt;&lt;/b&gt; - wyrażenia są one przekazywane na wyjście czyli okno przeglądarki&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;i&gt;&amp;lt;% kod %&amp;gt; &lt;/i&gt;&lt;/b&gt;- skryplety są umieszczane wewnątrz metody service() serwletu&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;i&gt;&amp;lt;%! kod %&amp;gt;&lt;/i&gt;&lt;/b&gt; - deklaracje są umieszczane wewnątrz klasy serwletu poza metodami&lt;/li&gt;&lt;/ul&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Przykład wyrażenia:&lt;script src="http://pastebin.com/embed_js.php?i=X1wXiXtU"&gt;&lt;/script&gt;Przykład skrypletu:&lt;script src="http://pastebin.com/embed_js.php?i=VaKRhXDP"&gt;&lt;/script&gt;Przykład deklaracji:&lt;script src="http://pastebin.com/embed_js.php?i=f3SzfJfX"&gt;&lt;/script&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JSP dostarcza dyrektyw czyli kilku różnych konstrukcji stosowanych w zależności od danej sytuacji. Istnieją ogólnie trzy główne typy dyrektyw:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;page&lt;/b&gt; - pozwala m.in. na importowanie klasy, określić język użyty w skryplecie itp.&lt;/li&gt;&lt;li&gt;&lt;b&gt;include&lt;/b&gt; - pozwala na dołączenie innego pliku do treści danej strony&lt;/li&gt;&lt;li&gt;&lt;b&gt;taglib&lt;/b&gt; - jest związana z technologią JSTL, której przyjrzymy się później po omówienie EL&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Przykład dyrektywy page:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=Bjw53XdG"&gt;&lt;/script&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Jak widzimy dyrektywa taka posiada pewne atrybutu, nie są to wszystkie atrybuty jakie może przyjąć. &lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Oto najważniejsze ustawienia dyrektywy page:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;contentType - określa typ MIME strony np. text/html&lt;/li&gt;&lt;li&gt;pageEncoding - kodowanie znaków na stronie&lt;/li&gt;&lt;li&gt;isErrorPage - określa czy dana strona jest stroną błędu&lt;/li&gt;&lt;li&gt;errorPage - określa ścieżkę do strony, która ma być wywołana&amp;nbsp; w razie błędu na tej stronie&lt;/li&gt;&lt;li&gt;session - określa czy na danej stronie jest wykorzystywane mechanizm sesji&lt;/li&gt;&lt;li&gt;import - pozwala na importowanie klas/pakietów, w celu późniejszego wykorzystania&amp;nbsp;&lt;/li&gt;&lt;li&gt;isELIgnored - określa, czy elementy języka wyrażeń EL mają być ignorowane na danej stronie&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Stwórzmy bardzo prostą aplikację w środowisku NetBeans. Klient wchodząc na stronę poda swoje imię i hasło w formularzu, po zatwierdzeniu danych zostaje wyświetlona strona z imieniem i datą logowania.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Stwórzmy na początku stronę odpowiadająca za pobranie danych od użytkownika, nazwijmy ją &lt;i&gt;loginpage.jsp&lt;/i&gt;:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=UkrW3QW1"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Strona &lt;i&gt;index.jsp&lt;/i&gt; zostanie zmodyfikowana w ten sposób, aby wyświetlała login, który podał klient. Strona wykorzystuje bibliotekę&lt;i&gt; JSTL&lt;/i&gt;, powiemy sobie o niej następnym razem. Następuje odczyt w pętli atrybutów sesji. Atrybut ma nazwę&lt;i&gt; User&lt;/i&gt; i odwołujemy się do niego przez &lt;i&gt;sessionScope.User&lt;/i&gt; .&lt;i&gt;User&lt;/i&gt; jest kolekcją zawierającą obiekty klasy &lt;i&gt;User&lt;/i&gt;. Zmienna &lt;i&gt;var="user" &lt;/i&gt;przechowuje pobrany obiekt z kolekcji. Wyświetlenie nazwy użytkownika i daty logowania odbywa się bardzo prosto: &lt;i&gt;${user.name} ${user.t}&lt;/i&gt; .&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=rubPkM9c"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Stworzymy też serwlet odpowiedzialny za pobranie danych z formularza i przekierowania żądania do strony &lt;i&gt;index.jsp&lt;/i&gt;. W serwlecie korzystamy z mechanizmu sesji. Zapisujemy w niej kolekcję przechowującą obiekty klasy &lt;i&gt;User&lt;/i&gt;. Po tym następuje przekierowanie żądania do strony &lt;i&gt;index.jsp&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=FRjs6uPS"&gt;&lt;/script&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Obiekt klasy &lt;i&gt;User&lt;/i&gt; będzie odzwierciedlać klienta, przechowując jego login, hasło i datę logowania. Taka klasa, która spełnia kilka konwencji głównie&amp;nbsp; takich jak bez parametryczny konstruktor, udostępnianie atrybutów po przez metody pośredniczące&lt;i&gt; get i set&lt;/i&gt; nazywamy &lt;i&gt;JavaBean - ziarno kawy&lt;/i&gt;. Jak spojrzymy na nasz serwlet to zauważymy, że ustawiamy w zasięgu sesji atrybut o nazwie &lt;i&gt;User&lt;/i&gt; będący kolekcją typu &lt;i&gt;ArrayList&lt;/i&gt;, przechowującą obiekty klasy &lt;i&gt;Use&lt;/i&gt;r.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=RvPzHsLm"&gt;&lt;/script&gt;&lt;br /&gt;Pozostaje, także do skonfigurowania deskryptor wdrożenia:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=qA42LR0G"&gt;&lt;/script&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;Nasza aplikacja wygląda w następujący sposób:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Formularz logowania:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Qx-6tnGaBbs/TndP1lE0I4I/AAAAAAAAADY/cIpAq3gKC5w/s1600/cz8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="284" src="http://2.bp.blogspot.com/-Qx-6tnGaBbs/TndP1lE0I4I/AAAAAAAAADY/cIpAq3gKC5w/s640/cz8.jpg" width="640" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Strona &lt;i&gt;index.jsp&lt;/i&gt;, która reprezentuje wprowadzone dane:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-09NOD07vQPc/TndQacedBnI/AAAAAAAAADc/5LnN2JmB1aw/s1600/cz8_2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="284" src="http://1.bp.blogspot.com/-09NOD07vQPc/TndQacedBnI/AAAAAAAAADc/5LnN2JmB1aw/s640/cz8_2.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; W następnych częściach przyjrzymy się &lt;i&gt;EL&lt;/i&gt; - językowi wyrażeń, &lt;i&gt;JavaBeans&lt;/i&gt; - ziarna kawy, akcjom &lt;i&gt;JSP&lt;/i&gt;, standardowej bibliotece tagów &lt;i&gt;JSTL&lt;/i&gt;, modelowi &lt;i&gt;JSP 1 i JSP 2&lt;/i&gt; czyli wzorcowi &lt;i&gt;MVC&lt;/i&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8814228651583994248-3471291703074025963?l=kadoel-kawaczyjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kadoel-kawaczyjava.blogspot.com/feeds/3471291703074025963/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/09/java-ee6-programowanie-aplikacji-www-cz_14.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/3471291703074025963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/3471291703074025963'/><link rel='alternate' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/09/java-ee6-programowanie-aplikacji-www-cz_14.html' title='JAVA EE6 Programowanie aplikacji WWW KURS cz. 8 Wprowadzenie do JSP'/><author><name>kadoel</name><uri>http://www.blogger.com/profile/09242013722249997796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-ev9hS7O9Vjc/TnCAT7ntzNI/AAAAAAAAADI/u5YnKDq7XwA/s72-c/JSP_LOGO_RGB.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8814228651583994248.post-7518018867945274901</id><published>2011-09-07T14:51:00.000+02:00</published><updated>2011-09-15T15:29:57.637+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><title type='text'>JAVA EE6 Programowanie aplikacji WWW KURS cz. 7 Serwlety: kontener, kontekst i filtry</title><content type='html'>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Kontekst serwletów jest obiektem służącym do komunikacji serwletów z kontenerem.&lt;br /&gt;Głównym zadaniem kontenera jest obsługa komunikacji między serwletami, a serwerem. Zarządza on cyklem życia serwletów, tworzy nowy wątek obsługujący żądanie. Kontener, także zajmuje się obsługą JSP, strony JSP tak naprawdę są serwletami.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-uk5pLhSdA6U/TmYXAqr4xPI/AAAAAAAAAC8/cPofmje-3X0/s1600/285servletcontainer.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="283" src="http://2.bp.blogspot.com/-uk5pLhSdA6U/TmYXAqr4xPI/AAAAAAAAAC8/cPofmje-3X0/s640/285servletcontainer.gif" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Kontener obsługując konkretne żądanie, które skierowane jest do serwletu po przez adres URL, tworzy dwa obiekty: &lt;i&gt;HttpServletResponse&lt;/i&gt; i &lt;i&gt;HttpServletRequest&lt;/i&gt;. W następnym kroku tworzy lub przydziela pamięć dla wątku, który obsługuje to żądanie. Obiekty reprezentujące żądanie i odpowiedź są przekazane do nowego wątku serwletu. Od tej pory mamy już gotowy serwlet. Następuje wywołanie metody service() serwletu. Metoda ta wywołuje metodę doGet() lub do Post(), w zależności naszego żądania. Jeśli nasze żądanie było typu GET to następuje jak się domyślasz wywołanie metody doGet().&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dzięki kontekstowi serwletów możemy dynamicznie dodawać serwlety do aplikacji, a co najważniejsze korzystać z parametrów aplikacji webowej czyli kontekstu. Wcześniej pisałem o parametrach serwletów. Są one widoczne w ramach danego serwletu. Parametry konteksu są widoczne dla wszystkich serwletów w naszej aplikacji. Określamy je w bardzo podobny sposób co parametry serwletów:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=NP4bhzqy"&gt;&lt;/script&gt;&lt;br /&gt;Aby skorzystać z parametrów kontekstu musimy skorzystać z metody: &lt;i&gt;getInitParameter(String name)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=v0vMQ9J9"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Przejdźmy do filtrów. Filtry są mechanizmem umożliwiającym nam wykonanie operacji w momencie nadejścia żądania. Dzięki nim możemy np. odrzucić dane żądanie, które nie spełnia jakiś określonych parametrów. Filtry możemy podłączać do dowolnej grupy serwletów za pomocą znacznika &lt;i&gt;url-pattern&lt;/i&gt;. Analogicznie do serwletów są deklarowane w deskryptorze wdrożenia. Kontener na podstawie znacznika url-pattern decyduje kiedy zostanie wywołany dany filtr. Kiedy ma być obsłużone żądanie, najpierw kontener przeszuka pasujące do adresu URL filtry i wywoła je, w takiej kolejności w jakiej są zadeklarowane w deskryptorze. Możemy mówić wtedy o sekwencji wywołań. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-hZMp8z3NI4E/TmaeuZA2gjI/AAAAAAAAADA/nJ6axqakW8k/s1600/invfilt.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="382" src="http://2.bp.blogspot.com/-hZMp8z3NI4E/TmaeuZA2gjI/AAAAAAAAADA/nJ6axqakW8k/s400/invfilt.gif" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Z technicznego punktu widzenia filtr jest klasą, która implementuje interfejs &lt;i&gt;javax.servlet.Filter&lt;/i&gt;. Udostępnia on nam metody:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;void init(FilterConfig fc) - metoda wywoływana jest przy utworzeniu filtru. Pozwala na uzyskanie obiektu interfejsu FilterConfig odpowiedzialnego za ustawienia filtru. &lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) - jest wywoływana w momencie nadejścia żądania. Interfejs FilterChain zapewnia komunikację pomiędzy filtrem, a servletem.&amp;nbsp;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;void destroy() - metoda wywoływana przez serwer w momencie zakończenia działania filtru.&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; W zależności od kolejności deklaracji filtrów w deskryptorze - web.xml, nasze żądanie HTTP przechodzi przez kolejne filtry dzięki metodzie doFilter(), w każdym filtrze. Po przejściu wszystkich filtrów, żądanie trafia do serwletu. Po zakończeniu obsługi żądania przez serwlet, sterowanie powraca do kolejnych filtrów.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; Stworzymy teraz bardzo prosty filtr. Zadaniem filtra będzie mierzenie czasu wykonania żądania.&lt;br /&gt;Wspomnieliśmy wcześniej, że filtr to klasa implementująca interfejs&lt;i&gt; Filter&lt;/i&gt;. Nasze żądanie zanim trafi do servletu, najpierw trafia do naszego filtru. Kiedy zostaje wykonywana metoda &lt;i&gt;doFilter() &lt;/i&gt;zmiennej &lt;i&gt;startTime&lt;/i&gt; przypisywany jest aktualny czas, następnie zostaje znowu wykonana metoda &lt;i&gt;doFilter()&lt;/i&gt; z obiektu &lt;i&gt;chain&lt;/i&gt;. Po jej wykonaniu nasze żądanie, przechodzi do właściwego&amp;nbsp; serwletu, gdzie po jego obsłużeniu znowu trafia do filtra, w miejsce po wywołaniu metody &lt;i&gt;doFilter(), &lt;/i&gt;gdzie pobierany jest do zmiennej&lt;i&gt; stopTime&lt;/i&gt; aktualny czas. Aby obliczyć czas wykonania żądania wystarczy te wartości od siebie odjąć. &lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=WPtjdh5t"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tak jak w przypadku serwletów filtry konfigurujemy podobnie. Mamy dwie sekcje. Znacznik filter ,który wiąże klase filtru z abstrakcyjną nazwą i znacznik filter-mapping wiążacy nazwę z adresem URL.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=4jRr62Sd"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Ciekawostką jest znacznik dispatcher . Pozwala on określić, czy filtr ma być stosowany w innych przypadkach niż w bezpośrednich żądaniach.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=pVDPr3wd"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8814228651583994248-7518018867945274901?l=kadoel-kawaczyjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kadoel-kawaczyjava.blogspot.com/feeds/7518018867945274901/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/09/java-ee6-programowanie-aplikacji-www-cz_07.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/7518018867945274901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/7518018867945274901'/><link rel='alternate' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/09/java-ee6-programowanie-aplikacji-www-cz_07.html' title='JAVA EE6 Programowanie aplikacji WWW KURS cz. 7 Serwlety: kontener, kontekst i filtry'/><author><name>kadoel</name><uri>http://www.blogger.com/profile/09242013722249997796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-uk5pLhSdA6U/TmYXAqr4xPI/AAAAAAAAAC8/cPofmje-3X0/s72-c/285servletcontainer.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8814228651583994248.post-1056180813329440834</id><published>2011-09-05T22:34:00.000+02:00</published><updated>2011-09-09T18:58:11.111+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java 7'/><title type='text'>JAVA 7 - czyli kilka drobnych nowości.</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-KIfHFr-Snu0/TmODo_hfnvI/AAAAAAAAAC4/FfJbCFxPUb4/s1600/java7.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="189" src="http://1.bp.blogspot.com/-KIfHFr-Snu0/TmODo_hfnvI/AAAAAAAAAC4/FfJbCFxPUb4/s200/java7.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Na nową odsłonę JSE trzeba było poczekać nam około pięciu lat. Java Standard Edition 7 jest to pierwsze wydanie od czasu przejęcia Sun przez Oracle. Nowa wersja nie jest rewolucyjna jeśli chodzi o nowe zmiany. Jest to kolejna ewolucja JSE opatrzona&amp;nbsp; numerem - 7. Termin upublicznienia nowej wersji był nie raz zmieniany, powodem tego było pewnie przejęcie Sun'a przez Oracle'a.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Na stronie: &lt;a href="http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html"&gt;http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html&lt;/a&gt; możemy zobaczyć szczegółową listę zmian. &lt;br /&gt;&lt;br /&gt;Do najważniejszych zmian w nowej edycji JSE możemy zaliczyć między innymi :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Garbage First - nowy udoskonalony garbage collector w maszynie wirualnej HotSpot&lt;/li&gt;&lt;li&gt;Dla maszyn o architekturze 64-bitowej "skompresowany" 64-bitowy wskaźnik&lt;/li&gt;&lt;li&gt;Biblioteka Fork/Join czyli lepsza obsługa procesorów wielordzeniowych i wielowątkowości&lt;/li&gt;&lt;li&gt;Projekt Coin - udogodnienia na poziomie składniowej języka(zmniejszenie objętości kodu). Kompilator automatycznie zamyka pliki, gniazda itp.&lt;/li&gt;&lt;li&gt;Poprawiona obsługa operacji I/O. &lt;/li&gt;&lt;li&gt;Udoskonalone wsparcie dla języków dynamicznych&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Garbage Collector zarządza pamięcią w JAVIE. Jest to mechanizm, który zwalnia pamięć z nieużywanych obiektów. Działa on niejawnie czyli w tle aplikacji. Jest on nie raz częstą przyczyną spowolnienia naszych programów. Strojenie tego mechanizmu jest bardzo trudne, ponieważ istnieje około 200 parametrów GC. W związku z tym w wydaniu JDK 6 update 14 mamy dostępny nowy eksperymentalny Garbage First. Jest on przeznaczony według twórców do systemów serwerowych, wielowątkowych używających duże ilości pamięci. Nowy mechanizm tak jego poprzednicy jest równoległy, współbieżny i pokoleniowy. Wyróżnia go kompaktowanie sterty, czyli mała fragmentacja pamięci.Sterta podzielona jest na obszary o rozmiarze 1MB.&amp;nbsp;Możemy, także "powiedzieć mu" przez jaki okres czasu ma działać. Jest łatwiejszy w użyciu. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; W poprzednich wersjach GC obszary pamięci, w których są obiekty młode i stare mają stałą wielkość. W nowym Garbage Collector regiony na które jest podzielona pamięć mogą wchodzić w skład pokolenia młodego lub starego i jest to dynamicznie zmieniane w czasie działania aplikacji. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; W maszynach 32-bitowych do dyspozycji mamy 2^32 = 4GB przestrzeni adresowej, a maksymalny rozmiar sterty zależy od systemu operacyjnego. W 64- bitowej maszynie wirtualnej rozmiar ten jest tak duży, że praktycznie możemy nie przejmować się nagłym brakiem dostępnej pamięci. Wadą 64-bitowej maszyny wirtualnej jest zwiększenie zużycia pamięci. Wynika to ze zwiększenia nagłówków obiektów, większego rozmiaru wskaźników do innych obiektów. Garbage First oferuje nam skompresowany 64-bitowy wskaźnik, dzięki temu różnica w zużyciu pamięci między 32-bitową, a 64-bitową platformą staje się dużo mniejsza. Skompresowany wskaźnik jest 32-bitowym offsetem od początku sterty, dlatego w przypadku sterty większej niż 32Gb maszyna wirtualna używa "pełnych" 64-bitowych wskaźników.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Framework fork/join jest implementacją interfejsu &lt;i&gt;ExecutorService. ExecutorService &lt;/i&gt;jest rozszerzeniem interfejsu&lt;i&gt; Executor,&lt;/i&gt; zarządza on cyklem życia wątków, a także śledzi postęp wykonywanego zadania&lt;i&gt;. &lt;/i&gt;Fork/Join ma&amp;nbsp; pomóc programiście w wykorzystaniu wielu procesorów. Jest zaprojektowany dla zadań, które możemy podzielić na mniejsze kawałki. Framework ten dystrybuuje zadania do działających wątków w puli wątków. Używa on algorytmu wykradania zadań (work-stealing). Działające wątki, którym zabraknie zadań, mogą je "ukraść" od innych, które są w tym czasie zajęte. Centralną częścią frameworka jest klasa ForkJoinPool rozszerzająca abstrakcyjną klasę AbstractExecutorService. Klasa implementuje algorytm wykradania zadań i może wykonać ForkJoinTasks(są to "lekkie wątki ").&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; Zasada działania użycia tego frameworka jest bardzo prosta. Jeśli nasz kod wykonuje jakieś zadanie, ze względu na jego duży rozmiar możemy go podzielić na mniejsze kawałki. Przykład ze strony Oracle'a jest prosty. Mamy za zadanie wykonać rozmycie obrazy tzw. blur. Obraz jest reprezentowany przez tablicę liczb, gdzie każda liczba zawiera składowe koloru pojedynczego pixela. Obraz rozmyty będzie, także reprezentowany w takiej samej postaci. Poniższy kod przedstawia realizację rozmycia obrazu:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=0merqLQ4"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Teraz pora na implementację abstrakcyjnej metody compute(), która wykonuje rozmycie obrazu bezpośrednio lub dzieli go na dwa mniejsze zadania. Od tego czy zadanie będzie podzielone zależy rozmiar tablicy.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=fmzNx2St"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Na poziomie samego języka mamy kilka udogodnień. Java 7 wprowadza literały binarne. Pozwalają na zapisywanie typów takich jak: byte, short, int i long za pomocą systemu binarnego.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=Ngn1YSy7"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Nowością jest możliwość użycia znaku podkreślenia.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=TXmsxqJb"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Dla wygody zaimplementowana została możliwość użycia String w konstrukcji switch-case:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=jy8GwM9M"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Diamond. Nie musimy dwukrotnie podawać typu elementu w klasach wykorzystujących typy ogólne - generics. &lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=cCxfYhMq"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Łapanie kilku wyjątków w jednym bloku catch:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=vNDegiR5"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Automatyczne zarządzanie zasobami. Dzięki niemu zasoby zdefiniowane w bloku try będą dostępne, a po jego zakończeniu zostaną automatycznie zamknięte. Java 7 oferuje interfejs &lt;i&gt;AutoCloseable&lt;/i&gt;, posiada on metodę &lt;i&gt;close()&lt;/i&gt;, która odpowiada za zamknięcie zasobu. &lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=uMjdU9Jg"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Klasa java.io.File nie dawała nam takich metod, które odpowiedzialne były by za kopiowanie lub przenoszenie plików. Poza tym miała problemy z wydajnością przy obsłudze "dużych" katalogów. Java 7 wprowadza udoskonalone API dostępu do systemu plików. Nowe pakiety java.nio.file, java.nio.file.attribute oferują nam więcej możliwości. Być może opisze je następnym razem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8814228651583994248-1056180813329440834?l=kadoel-kawaczyjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kadoel-kawaczyjava.blogspot.com/feeds/1056180813329440834/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/09/java-7-czyli-kilka-drobnych-nowosci.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/1056180813329440834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/1056180813329440834'/><link rel='alternate' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/09/java-7-czyli-kilka-drobnych-nowosci.html' title='JAVA 7 - czyli kilka drobnych nowości.'/><author><name>kadoel</name><uri>http://www.blogger.com/profile/09242013722249997796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-KIfHFr-Snu0/TmODo_hfnvI/AAAAAAAAAC4/FfJbCFxPUb4/s72-c/java7.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8814228651583994248.post-8572782656954473668</id><published>2011-09-03T18:16:00.000+02:00</published><updated>2011-09-03T18:18:52.963+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows 8'/><title type='text'>Windows 8 na tablecie</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-YXliiOV3ST4/TmJTJU2SkjI/AAAAAAAAACw/iWjACnn8VYU/s1600/win8.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="131" src="http://4.bp.blogspot.com/-YXliiOV3ST4/TmJTJU2SkjI/AAAAAAAAACw/iWjACnn8VYU/s200/win8.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Microsoft zaprezentował demo Windowsa 8 na tablecie, na którym obok kafelek wyciągających informacje na pulpit tabletu działają duże programy rodem ze stacjonarnego systemu operacyjnego. Pokazano pełen pakiet Office na przykładzie Worda i Excela, który ze względu na niesamowicie obiecujący pomyśle na multitasking wcale nie musi być nieużyteczny na tablecie – jak próbuje dowodzić Gruber. Windows 8 pozwoli bowiem dzielić ekran na dwie części (na dodatek to użytkownik będzie mógł sterować jak wielkie to będą części dla danych aplikacji) po to, by dwie aplikacje działały na raz i dostęp do nich byłby z poziomu jednego ekranu. To dramatycznie podniesie produktywność tabletu, bo rzadko kiedy pracuje się tylko na dokumencie Word bez korzystania chociażby z przeglądarki, czy komunikatora w tym samym momencie.&lt;br /&gt;&lt;br /&gt;Zresztą naprawdę warto zobaczyć o czym mowa.&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="345" src="http://www.youtube.com/embed/p92QfWOw88I" width="560"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;źródło: &lt;a href="http://www.spidersweb.pl/2011/06/prezentacja-windowsa-8-na-tablecie-pokazuje-wielki-potencjal-metro-ui.html"&gt;link&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8814228651583994248-8572782656954473668?l=kadoel-kawaczyjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kadoel-kawaczyjava.blogspot.com/feeds/8572782656954473668/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/09/windows-8-na-tablecie.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/8572782656954473668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/8572782656954473668'/><link rel='alternate' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/09/windows-8-na-tablecie.html' title='Windows 8 na tablecie'/><author><name>kadoel</name><uri>http://www.blogger.com/profile/09242013722249997796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-YXliiOV3ST4/TmJTJU2SkjI/AAAAAAAAACw/iWjACnn8VYU/s72-c/win8.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8814228651583994248.post-5774108017369404838</id><published>2011-09-02T16:55:00.000+02:00</published><updated>2011-09-15T15:30:03.188+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><title type='text'>JAVA EE6 Programowanie aplikacji WWW KURS cz. 6 Serwlety i ich parametry</title><content type='html'>Wspomniałem już wcześniej, że dzięki umieszczaniu różnych ustawień naszej aplikacji w zewnętrznym pliku xml, nie musimy ponownie rekompilować naszych klas. Można powiedzieć, że jest to powszechny standard. Aplikacje webowe JEE mają do dyspozycji plik wdrożenia - &lt;i&gt;web.xml&lt;/i&gt;. &lt;br /&gt;&lt;br /&gt;Parametry serwletów możemy określić za pomocą znacznika &lt;i&gt;&lt;init-param&gt;&lt;/init-param&gt;&lt;/i&gt;:&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=5cu19zyv"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Utworzyliśmy parametr o nazwie &lt;i&gt;autor&lt;/i&gt; i wartości &lt;i&gt;Nieznany&lt;/i&gt;. Parametrami zarządzamy po przez interfejs &lt;i&gt;ServletConfig&lt;/i&gt;, który jest implementowany przez klasy &lt;i&gt;GenericServlet&lt;/i&gt; i &lt;i&gt;HttpServlet&lt;/i&gt;. Metody interfejsu:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;String getInitParameter(String name)&lt;/i&gt; - zwraca wartość parametru o podanej nazwie&lt;/li&gt;&lt;li&gt;&lt;i&gt;String[] getInitParameterNames() &lt;/i&gt;- zwraca wszystkie nazwy parametrów danego serwletu&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Zobaczmy wykorzystanie metody &lt;i&gt;getInitParameter()&lt;/i&gt;:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=9SMZBqEG"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Następnym razem zajmiemy się bardzo ważnym obiektem w aplikacja webowych JEE - kontekstem serwletów.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8814228651583994248-5774108017369404838?l=kadoel-kawaczyjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kadoel-kawaczyjava.blogspot.com/feeds/5774108017369404838/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/09/java-ee6-programowanie-aplikacji-www-cz.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/5774108017369404838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/5774108017369404838'/><link rel='alternate' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/09/java-ee6-programowanie-aplikacji-www-cz.html' title='JAVA EE6 Programowanie aplikacji WWW KURS cz. 6 Serwlety i ich parametry'/><author><name>kadoel</name><uri>http://www.blogger.com/profile/09242013722249997796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8814228651583994248.post-3802961403858043913</id><published>2011-08-27T20:25:00.000+02:00</published><updated>2011-08-27T21:17:59.370+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sybase PowerDesigner'/><title type='text'>Modelowanie danych z użyciem PowerDesigner cz1. Koceptualny model danych</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-wn-0BbaDjUo/TljowKYQ8rI/AAAAAAAAACM/bxrT5msciJg/s1600/images.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="118" src="http://3.bp.blogspot.com/-wn-0BbaDjUo/TljowKYQ8rI/AAAAAAAAACM/bxrT5msciJg/s320/images.jpg" width="160" /&gt;&lt;/a&gt;&lt;/div&gt;Jest to narzędzie typu CASE (&lt;i&gt;Computer Aided System Engineering&lt;/i&gt;) wyprodukowane przez firmę Sybase, która produkuje systemy bazodanowe. &lt;br /&gt;PowerDesigner służy do modelowania systemów.&amp;nbsp; Jako bogate narzędzie posiada ono funkcje pozwalające na modelowanie różnych rozwiązań architektonicznych. Główne zastosowania to: modelowanie danych, hurtowni danych, obiektów aplikacji i systemów,procesów biznesowych,architektury korporacyjnej. Przyjrzyjmy się dziedzinie, w której narzędzie jest to najsilniejsze czyli modelowaniu danych. PowerDesigner obsługuje ponad 60 platform bazodanowych.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Model danych jest reprezentacją danych, które są przetwarzane i produkowane przez system. Modelowanie danych wiąże się z reprezentacją obiektów oraz z relacjami występującymi między nimi.&lt;br /&gt;PowerDesigner umożliwia tworzenie konceptualnych, logicznych i fizycznych modeli danych. Modele pozwalają na analizę systemu na wszystkich poziomach abstrakcji.&lt;br /&gt;&lt;br /&gt;W tym artykule skupimy się głównie na wykorzystaniu modelowania danych&amp;nbsp; przy tworzeniu bazy danych. Możemy wyróżnić trzy fazy projektowania bazy danych:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;budowanie modelu konceptualnego&lt;/li&gt;&lt;li&gt;budowanie modelu logicznego&lt;/li&gt;&lt;li&gt;budowanie modelu fizycznego&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;/span&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;b&gt;Konceptualny model danych&lt;/b&gt; (conceptual data model CDM) &lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;reprezentuje ogólną strukturę danych w systemie informatycznym, czyli relacje pomiędzy jego obiektami. Model konceptualny jest najbardziej abstrakcyjną formą, dlatego pomija aspekt implementacji fizycznej. Dane są reprezentowane w postaci graficznej za pomocą encji i relacji. Powstaje on a podstawie udokumentowanych wymagań użytkownika, czyli w wyniku etapu analizy.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;b&gt;Logiczny model danych&lt;/b&gt; jest na niższym poziomie abstrakcji, ponieważ uwzględnia specyfikację modelu danych ale bez jakichkolwiek uwarunkowań konkretnej implementacji fizycznej.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;b&gt;Fizyczny model danych &lt;/b&gt;jest opisem modelu logicznego, w konkretnym środowisku bazodanowym. Uwzględnia on organizację plików, indeksów itp.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;Reprezentacją graficzną modelu logicznego danych relacyjnych są diagramy E-R ( &lt;i&gt;Entity Relationship Diagram - Diagram związków encji &lt;/i&gt;) . Obiekty, które modelujemy są reprezentowane przez encje. Są one opisywane za pomocą atrybutów. Pomiędzy encjami występują powiązania. Powiązania wynikają z etapu analizy.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;Na poniższym konceptualnym diagramie danych, nauczyciel i student dziedziczą atrybuty z encji Osoba. Między encjami nauczyciel i student występuje relacja jeden do wielu (one-to-many). Oznacza ona, że &lt;/span&gt;&lt;/span&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps atn"&gt;&lt;/span&gt;&lt;span class=""&gt;nauczyciel ma&lt;/span&gt; &lt;span class="hps"&gt;kilku uczniów&lt;/span&gt;&lt;span class=""&gt;, ale&lt;/span&gt; &lt;span class="hps"&gt;każdy uczeń&lt;/span&gt; &lt;span class="hps"&gt;ma tylko jednego głównego nauczyciela. &lt;/span&gt;&lt;span class="hps"&gt;&lt;/span&gt;&lt;span class="hps"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-7f580qfgaRA/Tlj3IJ8xnyI/AAAAAAAAACQ/cHJnOMMOFgg/s1600/conceptual.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="432" src="http://2.bp.blogspot.com/-7f580qfgaRA/Tlj3IJ8xnyI/AAAAAAAAACQ/cHJnOMMOFgg/s640/conceptual.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;Ponadto:&lt;/span&gt;&lt;br /&gt;&lt;span class="hps"&gt;•&lt;/span&gt; &lt;span class="hps"&gt;Nauczyciel może&lt;/span&gt; &lt;span class="hps"&gt;uczyć&lt;/span&gt; &lt;span class="hps"&gt;kilku przedmiotów&lt;/span&gt; &lt;span class="hps"&gt;i&lt;/span&gt; &lt;span class="hps"&gt;przedmiot może być&lt;/span&gt; &lt;span class="hps"&gt;prowadzony przez&lt;/span&gt; &lt;span class="hps"&gt;kilku nauczycieli&lt;/span&gt; &lt;span class="hps"&gt;( relacja wiele&lt;/span&gt; &lt;span class="hps"&gt;do wielu)&lt;/span&gt;.&lt;br /&gt;&lt;span class="hps"&gt;•&lt;/span&gt; &lt;span class="hps"&gt;Nauczyciel może&lt;/span&gt; &lt;span class="hps"&gt;uczyć&lt;/span&gt; &lt;span class="hps"&gt;kilku lekcji&lt;/span&gt; &lt;span class="hps"&gt;i&lt;/span&gt; &lt;span class="hps"&gt;lekcja &lt;/span&gt;&lt;span class="hps"&gt;jest prowadzona&lt;/span&gt; &lt;span class="hps"&gt;tylko&lt;/span&gt; &lt;span class="hps"&gt;przez jednego nauczyciel&lt;/span&gt;a &lt;span class="hps atn"&gt;( relacja &lt;/span&gt;jeden do &lt;span class="hps"&gt;wielu).&lt;/span&gt;&lt;br /&gt;&lt;span class="hps"&gt;•&lt;/span&gt; &lt;span class="hps"&gt;Student uczęszcza&lt;/span&gt; na &lt;span class="hps"&gt;wiele&lt;/span&gt; &lt;span class="hps"&gt;zajęć&lt;/span&gt; &lt;span class="hps"&gt;i&lt;/span&gt; &lt;span class="hps"&gt;lekcji&lt;/span&gt;&amp;nbsp; i &lt;span class="hps"&gt;jest &lt;/span&gt;&lt;span class="hps"&gt;wielu&lt;/span&gt; &lt;span class="hps atn"&gt;studentów na lekcji i zajęciach (&lt;/span&gt;&lt;span class="atn"&gt;relacja wiele-do-&lt;/span&gt;wielu).&lt;br /&gt;&lt;span class="hps"&gt;•&lt;/span&gt; Student studiuje wiele przedmiotów i przedmiot może być studiowany przez wielu studentów&lt;br /&gt;&lt;span class="hps atn"&gt;(&lt;/span&gt;relacja wielu &lt;span class="hps"&gt;do wielu&lt;/span&gt;&lt;span class=""&gt;).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;• wiele lekcji jest z danego przedmiotu, jeden przedmiot może mieć wiele lekcji (relacja wiele do jednego )&lt;/span&gt;&lt;/span&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;Składowymi modelu danych, czyli diagramu E-R są elementy:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;b&gt;Encja(entity)&lt;/b&gt; - prezentuje wyodrębniony logiczny zestaw danych (np. dane odnoszące się do osoby, samochodu itp)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;b&gt;Wystąpienie encji(entity instance)&lt;/b&gt; - instancja encji, która posiada określone wartości wszystkich atrybutów encji. Każde wystąpienie encji jest identyfikowane jednoznacznie za pomocą niepustego podzbioru atrybutów. (np. wystąpienie encji Uzytkownik jest konkretny użytkownik identyfikowany np. jego loginem )&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;b&gt;Identyfikator encji(entity identifier)&lt;/b&gt; - jest to niepusty podzbiór atrybutów encji, który w jednoznaczny sposób identyfikuje każde wystąpienie encji.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;b&gt;Atrybut(attribute)&lt;/b&gt; - opisuje pewną właściwość encji lub związku. (np. dla encji Osoba atrybuty to imie, nazwisko, pesel itp )&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;b&gt;Dziedzina atrybutu (domain)&lt;/b&gt; - jest to typ danych jakie mogą przyjmować atrybutu lub zakres wartości dozwolony dla danego atrybutu&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;b&gt;Podklasa(subtype)&lt;/b&gt; - jest to encja będąca podzbiorem innej encji (nadklasy). Encja(podklasa) dziedziczy atrybuty i związki nadklasy(np. encja Student dziedziczy po bardziej ogólnej encji Osoba)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;b&gt;Związek(relationship)&lt;/b&gt; - jest to połączenie pomiędzy encjami (dwóch lub więcej). Odzwierciedla współdziałanie pomiędzy encjami. Związek pomiędzy instancjami tej samej klasy naszą nazwe rekurencyjnych. Związek może zawierać atrybuty, które go opisują.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;b&gt;Liczność(cardinality) &lt;/b&gt;- jest to liczba instancji będących w danej relacji. Wyróżniamy ze względu na liczność następujące relacje: jeden do jedn, jeden do wielu, wiele do wiele.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;b&gt;Opcjonalność (modality)&lt;/b&gt; - jak sama nazwa wskazuje czy wystąpienie encji w danej relacji jest wymagane. 0 oznacz opcjonalność wystąpienia, 1 wymóg. ( W naszym przykładzie w relacji Nauczyciel - Student 0 jest reprezentowane przez okrąg, a 1 przez pionową kreskę. Nauczyciel może mieć wielu studentów ale równie dobrze w danym czasie nie musi mieć żadanego, natomiast student musi posiadać nauczyciela )&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;b&gt;Normalizacja&amp;nbsp;&lt;/b&gt; - jest to technika analizy zależności pomiędzy elementami danych mająca na celu usuwania nadmiarowych, niespójnych elementów danych.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;Pora na utworzenie naszego konceptualnego modelu danych. Po uruchomieniu naszego narzędzia z menu File wybieramy New, a potem New Model.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Ok3YdOpNRmA/TlkD-wc7GnI/AAAAAAAAACU/7FknMh-UQjc/s1600/conc1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="425" src="http://2.bp.blogspot.com/-Ok3YdOpNRmA/TlkD-wc7GnI/AAAAAAAAACU/7FknMh-UQjc/s640/conc1.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;Następnie możemy zacząć tworzyć nasz model. W tym celu stwórzmy na początku wszystkie encje. Po prawej mamy do dyspozycji paletę narzędzi.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-yeSnMt_7BuE/TlkFHZVzb_I/AAAAAAAAACY/t3takglar98/s1600/conc2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://1.bp.blogspot.com/-yeSnMt_7BuE/TlkFHZVzb_I/AAAAAAAAACY/t3takglar98/s640/conc2.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;W celu edycji danej encji wystarczy kliknąć na nią dwukrotnie. W zakładce Attributes nadajemy atrybuty dla danej encji.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-a2Svyw1GeiM/TlkGLojoXTI/AAAAAAAAACc/6U3V1Y8yCok/s1600/conc3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="476" src="http://1.bp.blogspot.com/-a2Svyw1GeiM/TlkGLojoXTI/AAAAAAAAACc/6U3V1Y8yCok/s640/conc3.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Każdemu atrybutowi możemy określić, czy ma być kluczem głównym(P), czy jest obowiązkowy(M) czyli brak wartości NULL, i czy ma być wyświetlony(D). Ponadto możemy dla każdego atrybutu określić jego domenę. Klikając prawym przyciskiem myszy na pole numeracji atrybutów, z listy wybierzmy Properties(Właściwości), znajdziemy tam więcej ustawień dotyczących atrybutów.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-vSSWrXojtLc/TlkHvIwCfMI/AAAAAAAAACg/sA83RLwDDcs/s1600/conc4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="386" src="http://3.bp.blogspot.com/-vSSWrXojtLc/TlkHvIwCfMI/AAAAAAAAACg/sA83RLwDDcs/s640/conc4.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;Aby stworzyć relację wystarczy z palety wybrać ikonę, która reprezentuje relacje i przeciągnąć ją pomiędzy interesującymi nas encjami. &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-R4bELcrWMjA/TlkZPlRxWhI/AAAAAAAAACk/ayyoX2BOFwU/s1600/conc6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-R4bELcrWMjA/TlkZPlRxWhI/AAAAAAAAACk/ayyoX2BOFwU/s200/conc6.jpg" width="120" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;Aby ustawić właściwości relacji wystarczy kliknąć na nią dwukrotnie. W zakładce cardinalities ustawiamy liczność relacji.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-vLnRSVajckA/TlkbigRg2rI/AAAAAAAAACo/8kl1zMa66dg/s1600/conc5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="620" src="http://4.bp.blogspot.com/-vLnRSVajckA/TlkbigRg2rI/AAAAAAAAACo/8kl1zMa66dg/s640/conc5.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pl"&gt;&lt;span class="hps"&gt; &lt;/span&gt;&lt;span class=""&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8814228651583994248-3802961403858043913?l=kadoel-kawaczyjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kadoel-kawaczyjava.blogspot.com/feeds/3802961403858043913/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/08/modelowanie-danych-z-uzyciem.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/3802961403858043913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/3802961403858043913'/><link rel='alternate' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/08/modelowanie-danych-z-uzyciem.html' title='Modelowanie danych z użyciem PowerDesigner cz1. Koceptualny model danych'/><author><name>kadoel</name><uri>http://www.blogger.com/profile/09242013722249997796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-wn-0BbaDjUo/TljowKYQ8rI/AAAAAAAAACM/bxrT5msciJg/s72-c/images.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8814228651583994248.post-4968332165325550266</id><published>2011-08-26T17:02:00.000+02:00</published><updated>2011-09-06T11:13:26.190+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><title type='text'>Serwer aplikaji JE. Od żądania do odpowiedzi.</title><content type='html'>Gorąco polecam bardzo przystępny cykl, krótkich wykładów autorstwa Jarosława Błąd. &lt;br /&gt;&lt;br /&gt;Wystąpienie poświęcone całościowemu spojrzeniu na środowisko pracy, jakie serwer aplikacji stwarza dla uruchamianych w nim aplikacji. Przedstawione zostały usługi i zasoby udostępniane aplikacji przez serwer, omówiono szczegółowo znaczenie procesu instalacji (deployment) dla poprawnego skonfigurowania środowiska pracy aplikacji w serwerze.&lt;br /&gt;W wykładzie położono duży nacisk na współpracę serwera aplikacji z serwerem HTTP i mechanizmy odwzorowania adresów internetowych na aplikacje zainstalowane w serwerze.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe width="560" height="345" src="http://www.youtube.com/embed/kgAxX40aREc" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://e-point.pl/_itemserver/eps/pl/aktualnosci/od-zadania-do-odpowiedzi.pdf"&gt;Prezentacja w pliku pfd.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8814228651583994248-4968332165325550266?l=kadoel-kawaczyjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kadoel-kawaczyjava.blogspot.com/feeds/4968332165325550266/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/08/serwer-aplikaji-je-od-zadania-do.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/4968332165325550266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/4968332165325550266'/><link rel='alternate' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/08/serwer-aplikaji-je-od-zadania-do.html' title='Serwer aplikaji JE. Od żądania do odpowiedzi.'/><author><name>kadoel</name><uri>http://www.blogger.com/profile/09242013722249997796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/kgAxX40aREc/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8814228651583994248.post-6624065284116463465</id><published>2011-08-22T22:55:00.000+02:00</published><updated>2011-09-06T11:13:40.228+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wzorce projektowe'/><title type='text'>Jak poprawnie zaimplementować wzorzec Singleton w Javie.</title><content type='html'>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cel tego wzorca jest bardzo prosty tak jak on sam. Ma on zapewnić, że w naszej aplikacji istnieje tylko jedna instancja danej klasy. Jako, że mamy tylko jeden obiekt takowej klasy, trzeba oczywiście zapewnić do niego jakiś punkt dostępu, zwykle poprzez metodę statyczną. Pierwsza rzecz jaka przychodzi na myśl, to ograniczenie do konstruktora do własnej klasy i podklas.&amp;nbsp; Konstruktor musi być zatem opatrzony modyfikatorem &lt;i&gt;private&lt;/i&gt; lub &lt;i&gt;protected&lt;/i&gt;. Oczywiste też jest, że instancja musi być przechowywana w postaci prywatnego pola statycznego zainicjowanego wartością &lt;i&gt;null&lt;/i&gt;. Najciekawiej prezentuje się metoda, która zarządza tym polem &lt;i&gt;getInstance()&lt;/i&gt;. Jako, że stanowi ona nie jako punkt dostępu dla innych klas, musi być opatrzona modyfikatorem typu&lt;i&gt; public&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-YMlQ_7qcx2E/TlQMJ2yOrnI/AAAAAAAAACE/hNCLhysDXuo/s1600/Singleton.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="108" src="http://4.bp.blogspot.com/-YMlQ_7qcx2E/TlQMJ2yOrnI/AAAAAAAAACE/hNCLhysDXuo/s320/Singleton.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=7SEemVF3"&gt;&lt;/script&gt;&lt;br /&gt;Pojedyncza instrukcja &lt;i&gt;if&lt;/i&gt;, która sprawdza czy instancja klasy nie została wcześniej utworzona mogła by nie wystarczyć. Wyobraźmy sobie taką sytuacje, że wątek który właśnie sprawdził czy &lt;i&gt;instance == null&lt;/i&gt; zostaje wstrzymany na rzecz drugiego wątku.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=Bru1n9QV"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Drugi wątek sprawdza warunek i tworzy obiekt. Może się zdarzyć, że wcześniejszy wątek znowu przejmie kontrolę w miejscu gdzie został wstrzymany czyli po wejściu do instrukcji if i ponownie utworzy nam instancje tej klasy. Może to wydawać się skomplikowane i zagmatwane ale kto nie wierzy ten niech sprawdzi. Można temu zapobiec stosują blok synchronizujący&lt;i&gt; synchronized&lt;/i&gt; - zapewnia on nam, że kod w tym bloku w danym czasie może być wykonywany tylko przez jeden wątek.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Wydawać by się mogło, że jest to doskonałe rozwiązanie. Mamy tu jeden haczyk. Jaki? Jeśli klasa, ta implementowała by interfejs &lt;i&gt;Serializable &lt;/i&gt;to po przez mechanizm serializacji można by utworzyć wiele takich obiektów. Spójrzmy na poniższy kod:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=sd4Jv700"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Rozwiązanie to wykorzystuje mechanizm class loader'ów. Jest on zapewniony przez maszynę wirtualną. Mechanizm ten jest synchronizowany. Obiekty class loader zapewniają ładowanie klas. Wewnątrz maszyny wirtualnej są zorganizowane w postaci drzewa. Jeśli taki obiekt otrzyma żądanie załadowania danej klasy to w celu uniknięcia wielokrotnego ładowania tej samej klasy, sprawdza czy jego nadrzędny class loader nie zrobił tego wcześniej.&amp;nbsp; Klasa wewnętrzna &lt;i&gt;SingletonHolder&lt;/i&gt; posiada prywatne statyczne i niemodyfikowalne pole. Jak widzimy jest to instancja klasy &lt;i&gt;Singleton&lt;/i&gt;. Kiedy zostaje wywołana metoda &lt;i&gt;getInstance()&lt;/i&gt; class loader załaduje tylko jeden raz klasę &lt;i&gt;SingletonHolder&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Istnieją jeszcze inne sposoby na poradzenie sobie z tym problemem. Przytoczyłem&amp;nbsp; dwa najbardziej popularne rozwiązania.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8814228651583994248-6624065284116463465?l=kadoel-kawaczyjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kadoel-kawaczyjava.blogspot.com/feeds/6624065284116463465/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/08/jak-poprawnie-zaimplementowac-wzorzec.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/6624065284116463465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/6624065284116463465'/><link rel='alternate' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/08/jak-poprawnie-zaimplementowac-wzorzec.html' title='Jak poprawnie zaimplementować wzorzec Singleton w Javie.'/><author><name>kadoel</name><uri>http://www.blogger.com/profile/09242013722249997796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-YMlQ_7qcx2E/TlQMJ2yOrnI/AAAAAAAAACE/hNCLhysDXuo/s72-c/Singleton.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8814228651583994248.post-4071424868877053461</id><published>2011-08-19T21:35:00.000+02:00</published><updated>2011-09-15T15:30:07.023+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><title type='text'>JAVA EE6 Programowanie aplikacji WWW KURS cz.5 Serwlety -  Sesje</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-F0Z_lBlt7lo/Tk6x5F8R-qI/AAAAAAAAACA/P3tSX1JfdzI/s1600/sessionid2.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-F0Z_lBlt7lo/Tk6x5F8R-qI/AAAAAAAAACA/P3tSX1JfdzI/s1600/sessionid2.gif" /&gt;&lt;/a&gt;&lt;/div&gt;Ostatnio poznaliśmy podstawowe wykorzystanie Cookies. Dzisiaj przyjdzie czas na sesje. Protokół komunikacji między klientem a aplikacją WWW czyli HTTP został zaprojektowany jako bezstanowy. Oznacza to, że serwer nie jest w stanie określić czy dane żądanie HTTP pochodzi od tego samego użytkownika, czy od innych niezależnych użytkowników. Problem ten rozwiązano wprowadzając mechanizm emulacji sesji - HTTPSession. Zasada tego mechanizmu nie jest skomplikowana. Każdy klient dostaje od serwera niepowtarzalny identyfikator - identyfikator sesji. Zazwyczaj jest on zapisywany w zmiennej Cookie. Dzięki takiemu rozwiązaniu serwer aplikacji otrzymuje identyfikatoe przy ponownym żądaniu tego samego użytkownika. Serwer aplikacji posiada tablice sesji gdzie dany identyfikator skojarzony jest zbiór programowych obiektów JAVA, które reprezentują stan sesji. Jako, że serwlety w technologii JEE są mechanizm nazwijmy to niskopoziomowym mają one możliwość odczytu i zapisu obiektów odpowiadających za stan sesji. Wykorzystują do tego obiekt sesji. Jest on obiektem interfejsu &lt;i&gt;HTTPSession&lt;/i&gt;. Stan sesji może zostać usunięty po przekroczeniu pewnego limitu czasowego lub po przez jawne usunięcie. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-fPsrWYIgOdU/Tk6xoOeg4TI/AAAAAAAAAB8/__w3hOEW9NM/s1600/jxt_0803.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="299" src="http://3.bp.blogspot.com/-fPsrWYIgOdU/Tk6xoOeg4TI/AAAAAAAAAB8/__w3hOEW9NM/s640/jxt_0803.gif" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;HttpSession session = request.getSession(true);&lt;/code&gt;&lt;br /&gt;Podaje aktualną sesję lub tworzy nową. Gdyby podano parametr &lt;code&gt;false&lt;/code&gt;, to nowa sesja nie będzie tworzona. Jeśli nie ma jeszcze sesji, metoda zwróci &lt;code&gt;null&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Znowu przytoczę przykład z książki " JAVA EE6 programowanie aplikacji WWW". Poniższy kod sprawdza czy dane żądanie jest pierwszym żądaniem użytkownika danej sesji.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=zkHxz0pi"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Oto najważniejsze metody interfejsu HTTPSession:&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;table border="0" class="dataTable" style="width: 100%;"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;b&gt;&lt;span class="blueBold"&gt;METODA&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="blueBold"&gt;&lt;i&gt;void setAttribute(n,o)&lt;/i&gt;&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span class="blueBold"&gt;Opis&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="blueBold"&gt;&amp;nbsp;Zapamiętuje na czas sesji obiekt pod podaną nazwą&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;i&gt;String getId()&lt;/i&gt;&lt;/td&gt; &lt;td class="dataTableCell"&gt;Zwraca aktualny identyfikator sesji.&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;i&gt;boolean isNew()&lt;/i&gt;&lt;/td&gt; &lt;td class="dataTableCell"&gt;Zwraca wartość true, jeśli klient nie odesłał jeszcze żądania z danym&lt;br /&gt;identyfikatorem sesji.&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;i&gt;long getCreationTime()&lt;/i&gt;&lt;/td&gt; &lt;td class="dataTableCell"&gt;Zwraca czas utworzenia sesji.&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;i&gt;long getLastAccessedTime()&lt;/i&gt;&lt;/td&gt; &lt;td class="dataTableCell"&gt;Zwraca czas otrzymania przez kontener ostatniego żądania z danym&lt;br /&gt;identyfikatorem sesji.&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;i&gt;void setMaxInactivateInterval(int)&lt;/i&gt;&lt;/td&gt; &lt;td class="dataTableCell"&gt;Ustawia maksymalny czas (wyrażony w sekundach) pomiędzy kolejnymi żądaniami klienta w ramach danej sesji.&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;i&gt;int getMaxInactiveInterval()&lt;/i&gt;&lt;/td&gt; &lt;td class="dataTableCell"&gt;Zwraca&amp;nbsp;&amp;nbsp;maksymalny czas (wyrażony w sekundach) pomiędzy kolejnymi żądaniami klienta w ramach danej sesji.&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;i&gt;void invalidate()&lt;/i&gt;&lt;/td&gt; &lt;td class="dataTableCell"&gt;Kończy sesję.&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Oto inne wykorzystanie mechanizmu sesji. W poniższym kodzie następuje&amp;nbsp; mieszczenie nowego obiektu stanu sesji.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=rh8qH1Za"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Następnie odczytujemy zapisany wcześniej obiekt stanu.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=unay8gNw"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;Jest to jedynie bardzo proste wykorzystanie sesji w celach edukacyjnych. Więcej możemy znaleźć w fachowej literaturze lub na stronach oracle. Temat miał jedynie pokazać czym są sesje i po co je stosujemy. Jeśli zamierzamy w przyszłości tworzyć aplikacje WWW musimy poszerzyć swoją wiedzę z tego zakresu.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8814228651583994248-4071424868877053461?l=kadoel-kawaczyjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kadoel-kawaczyjava.blogspot.com/feeds/4071424868877053461/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/08/java-ee6-programowanie-aplikacji-www_19.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/4071424868877053461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/4071424868877053461'/><link rel='alternate' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/08/java-ee6-programowanie-aplikacji-www_19.html' title='JAVA EE6 Programowanie aplikacji WWW KURS cz.5 Serwlety -  Sesje'/><author><name>kadoel</name><uri>http://www.blogger.com/profile/09242013722249997796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-F0Z_lBlt7lo/Tk6x5F8R-qI/AAAAAAAAACA/P3tSX1JfdzI/s72-c/sessionid2.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8814228651583994248.post-3630589076309129332</id><published>2011-08-16T14:04:00.000+02:00</published><updated>2011-09-15T15:30:16.972+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><title type='text'>JAVA EE6 Programowanie aplikacji WWW KURS cz.4 Serwlety - Ciasteczka</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-xngjlSrT1_0/TkpPZkTct0I/AAAAAAAAAB4/KRozkj2-fJ0/s1600/chocolate_chip_cookie.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="184" src="http://4.bp.blogspot.com/-xngjlSrT1_0/TkpPZkTct0I/AAAAAAAAAB4/KRozkj2-fJ0/s200/chocolate_chip_cookie.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Ciasteczka czyli zmiennie Cookies reprezentowane są w postaci klasy Cookie. Są one przechowywane na komputerach użytkowników aplikacji webowych. Dzięki nim możemy zapamiętywać preferencje, hasła, loginy.&lt;br /&gt;Do wysyłania zmiennych Cookies do klienta HTTP służy metoda:&lt;br /&gt;&lt;b&gt;&lt;i&gt;- addCookies() &lt;/i&gt;obiektu&lt;i&gt; response&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;Zaś do odczytu zmiennych odebranych od klienta służy metoda:&lt;br /&gt;&lt;b&gt;&lt;i&gt;- addCookies() &lt;/i&gt;obiektu &lt;i&gt;request&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Metody te tak naprawdę operują na nagłówkach żądań i odpowiedzi HTTP. Główne metody klasy Cookie to:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;&amp;nbsp;Cookie(n, s) - tworzy zmienną o nazwie n i wartości s&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;String getDomain() - odczyt adresu domenowego &lt;/i&gt;&lt;i&gt;dla, którego przeznaczona jest zmienna s &lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;void setDomain(s) - ustawia adres domenowy dla, którego przeznaczona jest zmienna s &lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;String getMaxAge() - odczyt czasu życia zmiennej liczony w sekundach&lt;/i&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;void setMaxAge(v) - ustawia czas życia zmiennej liczony w sekundach&amp;nbsp;&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;String getName() - odczyt nazwy zmiennej&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;void setName(s) - ustawia zmienną&amp;nbsp;&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;String getPath() - odczyt prefiksu ścieżki URL na serwerze, dla której przeznaczona jest zmienna&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;void setPath(s) - ustawia prefiks ścieżki URL na serwerze, dla której przeznaczona jest zmienna&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;String getValue() - odczyt wartości zmiennej&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;void setValue(s) - ustawia wartość zmiennej&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;Kiedy zmienna Cookie jest wysyłana do klienta HTTP następuje serializacja obiektu do postaci łańcucha znakowego umieszczonego w nagłówku odpowiedzi HTTP, w polu Set-Cookie. Odczyt polega na operacji odwrotnej czyli zbudowaniu obiektu na podstawie pola Cookie nagłówka żądania HTTP.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=AuTnzPKM"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=s53yvitC"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Napiszmy sobie prosty serwlet, którego zadaniem będzie przechowywanie informacji o dacie ostatniej wizyty na stronie i wyświetlenie tej informacji. Przykład ten pochodzi z książki: "JAVA EE6 Programowanie aplikacji WWW"&lt;br /&gt;&lt;br /&gt;W następnej części zastanowimy się nad problem bezstanowości protokołu HTTP. Czyli czas na sesje.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=H8m0rveH"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8814228651583994248-3630589076309129332?l=kadoel-kawaczyjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kadoel-kawaczyjava.blogspot.com/feeds/3630589076309129332/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/08/java-ee6-programowanie-aplikacji-www_16.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/3630589076309129332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/3630589076309129332'/><link rel='alternate' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/08/java-ee6-programowanie-aplikacji-www_16.html' title='JAVA EE6 Programowanie aplikacji WWW KURS cz.4 Serwlety - Ciasteczka'/><author><name>kadoel</name><uri>http://www.blogger.com/profile/09242013722249997796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-xngjlSrT1_0/TkpPZkTct0I/AAAAAAAAAB4/KRozkj2-fJ0/s72-c/chocolate_chip_cookie.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8814228651583994248.post-3605502041179945665</id><published>2011-08-09T22:43:00.000+02:00</published><updated>2011-08-10T20:10:29.101+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JPA'/><title type='text'>JPA wstęp do technologii cz. 1</title><content type='html'>&lt;b&gt;JPA&lt;/b&gt; - Java Persistence API jest to część technologii EJB 3.0. JPA jako oficjalny standard mapowania obiektowo-relacyjnego(ORM) pozwala na uproszczenie zapisu danych w postaci obiektowej do postaci relacyjnej, jaką znamy w relacyjnych bazach danych.&lt;br /&gt;&lt;br /&gt;Elementami standardu Java Persistence są:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&amp;nbsp;interfejs programistyczny Java Persistent API&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&amp;nbsp;język zapytań JPQL&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&amp;nbsp;metadane o odwzorowaniu obiektów w struktury relacyjne&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Encje są to lekkie obiekty, które służą nam do reprezentacji trwałych danych. Encja reprezentuje tabelę w relacyjnej bazie danych. W języku Java definiujemy ją jako klasę encji. Klasa encji to zwykła klasa, która spełnia następujące reguły:&lt;br /&gt;&lt;br /&gt;-&lt;b&gt; musi być opatrzona adnotacją &lt;i style="color: black;"&gt;&lt;span class="long_text" id="result_box"&gt;&lt;span style="background-color: white;" title="The class must be annotated with the javax.persistence.Entity annotation."&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;div style="color: black;"&gt;&lt;b&gt;&lt;span class="long_text" id="result_box"&gt;&lt;span style="background-color: white;" title="The class must be annotated with the javax.persistence.Entity annotation."&gt;- posiada publiczny lub chroniony bezargumentowy konstruktor (może posiadać inne konstruktory)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;b&gt;&lt;span class="long_text" id="result_box"&gt;&lt;span style="background-color: white;" title="The class must be annotated with the javax.persistence.Entity annotation."&gt;- nie może być typu final ani dziedziczyć z żadnej konkretnej klasy lub implementować konkretnego interfejsu&lt;/span&gt;&lt;/span&gt;&lt;span class="long_text" id="result_box"&gt;&lt;span style="background-color: white;" title="The class must be annotated with the javax.persistence.Entity annotation."&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;b&gt;&lt;span class="long_text" id="result_box"&gt;&lt;span style="background-color: white;" title="The class must be annotated with the javax.persistence.Entity annotation."&gt;- jeśli obiekty klasy mają być parametrami metod zdalnego interfejsu EJB muszą implementować interfejs &lt;i&gt;Serializable&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="long_text" id="result_box"&gt;&lt;span style="background-color: white;" title="The class must be annotated with the javax.persistence.Entity annotation."&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;b&gt;&lt;span class="long_text" id="result_box"&gt;&lt;span style="background-color: white;" title="The class must be annotated with the javax.persistence.Entity annotation."&gt;- dostęp do pól klasy możliwy jest tylko po przez metody set i get&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;span class="long_text" id="result_box"&gt;&lt;span style="background-color: white;" title="The class must be annotated with the javax.persistence.Entity annotation."&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=scEwYK8y"&gt;&lt;/script&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box"&gt;&lt;span style="background-color: white;" title="The class must be annotated with the javax.persistence.Entity annotation."&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box"&gt;&lt;span style="background-color: white;" title="The class must be annotated with the javax.persistence.Entity annotation."&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8814228651583994248-3605502041179945665?l=kadoel-kawaczyjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kadoel-kawaczyjava.blogspot.com/feeds/3605502041179945665/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/08/jpa-wstep-do-technologii-cz-1.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/3605502041179945665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/3605502041179945665'/><link rel='alternate' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/08/jpa-wstep-do-technologii-cz-1.html' title='JPA wstęp do technologii cz. 1'/><author><name>kadoel</name><uri>http://www.blogger.com/profile/09242013722249997796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8814228651583994248.post-5192102809640704107</id><published>2011-08-03T18:31:00.000+02:00</published><updated>2011-09-06T11:14:11.842+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>NetBeans 7.0.1 wydany</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-C641_ra5kzQ/Tjl3loQ-UdI/AAAAAAAAABA/Q0jjFP2xSao/s1600/ImageProxy.ashx.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-C641_ra5kzQ/Tjl3loQ-UdI/AAAAAAAAABA/Q0jjFP2xSao/s1600/ImageProxy.ashx.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Jest już dostępne kolejne stabilne wydanie NetBeans - zintegrowanego środowiska programistycznego Java.&lt;br /&gt;NetBeans  IDE jest wolnym, otwartym oprogramowaniem udostępniającym programistom  zintegrowane środowisko do tworzenia aplikacji Java. Wśród  najważniejszych zmian wprowadzonych do wydania 7.0.1 można wymienić  pełną obsługę Java 7 wraz ze wszystkimi nowinkami wprowadzonymi przez  JDK 7. NetBeans 7.0.1 może także współpracować z serwerem aplikacji  GlassFish w wersji 3.1.1 i cechuje się ulepszoną integracją z Oracle  WebLogic Server. Środowisko posiada wszystkie &lt;a href="http://wiki.netbeans.org/NetBeans7.0PatchesInfo"&gt;poprawki&lt;/a&gt;  wprowadzone przez Oracle od momentu wydania poprzedniej wersji  NetBeans. NetBeans IDE 7.0.1 zawiera oczywiście nowinki wprowadzone do  wydania 7.0, takie jak obsługa HTML5, Maven 3 czy możliwość zawijania  wierszy. Pełna lista zmian i nowości jest &lt;a href="http://netbeans.org/community/releases/70/relnotes.html"&gt;dostępna&lt;/a&gt; na stronie o wydaniu.&lt;br /&gt;żródło:&amp;nbsp;&lt;a href="http://www.dobreprogramy.pl/"&gt;dobreprogramy.pl&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8814228651583994248-5192102809640704107?l=kadoel-kawaczyjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kadoel-kawaczyjava.blogspot.com/feeds/5192102809640704107/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/08/netbeans-701-wydany.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/5192102809640704107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/5192102809640704107'/><link rel='alternate' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/08/netbeans-701-wydany.html' title='NetBeans 7.0.1 wydany'/><author><name>kadoel</name><uri>http://www.blogger.com/profile/09242013722249997796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-C641_ra5kzQ/Tjl3loQ-UdI/AAAAAAAAABA/Q0jjFP2xSao/s72-c/ImageProxy.ashx.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8814228651583994248.post-5244640601483404831</id><published>2011-08-03T18:18:00.000+02:00</published><updated>2011-09-15T15:30:21.626+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><title type='text'>JAVA EE6 Programowanie aplikacji WWW KURS cz.3 Serwlety.</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-1hd2xnJ47nw/TjlMCgPhQII/AAAAAAAAAAg/O3-F7JCPWZs/s1600/java-servlets.jpeg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-1hd2xnJ47nw/TjlMCgPhQII/AAAAAAAAAAg/O3-F7JCPWZs/s1600/java-servlets.jpeg" /&gt;&lt;/a&gt;&lt;/div&gt;Zaczynamy od podstaw podstaw. Opowiemy sobie o &lt;b&gt;serwlecie&lt;/b&gt; czyli elemencie, który jest wykorzystywany we wszystkich aplikacjach webowych.&lt;br /&gt;&lt;br /&gt;Warstwa prezentacji, o której wspomnieliśmy we wcześniejszych częściach stanowi część aplikacji WWW. Aplikacja ta znajduje się po stronie serwera HTTP, który odpowiada za generowanie graficznego interfejsu użytkownika. Każde żądanie powoduje kolejne wykonanie kodu logiki prezentacji. Protokół HTTP, który wykorzystuje model komunikacyjny typu klient-serwer jest protokołem tekstowym, oparty na TCP. Klient HTTP po nawiązaniu połączenia z serwerem przekazuje mu komunikat zawierający żądanie HTTP. Serwer HTTP odpowiada na żądanie i wysyła odpowiedź, która zawiera żądany dokument. Po zakończeniu tego procesu serwer zamyka połączenie. Musimy sobie powiedzieć, że protokół HTTP jest bezsesyjny i bezstanowy. Pod czas komunikacji klienta z serwerem, klient przekazuje parametry wywołania aplikacji na serwerze. Owe parametry mogą być przekazane za pośrednictwem protokołu HTTP na dwa sposoby:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;- GET &lt;/b&gt;jest to rozkaz ,w którym parametry dołączone są do adresu URL&lt;br /&gt;&lt;b&gt;- POST&lt;/b&gt;&amp;nbsp; parametry są w ciele żądania HTTP, ciało reprezentuje dane wysyłane przez klienta HTTP do serwera np.parametry,pliki.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-7aKWQ7xWGpk/TjmzWOhpJ7I/AAAAAAAAABw/OS7iQOyY56g/s1600/web-requestHandling.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="233" src="http://3.bp.blogspot.com/-7aKWQ7xWGpk/TjmzWOhpJ7I/AAAAAAAAABw/OS7iQOyY56g/s400/web-requestHandling.gif" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Działanie serwletów sprowadza się do metod doGet() doPost(). Obie metody są wywoływane, gdy serwlet otrzymuje żądanie HTTP. Kiedy klient spróbuje skorzystać z aplikacji po raz pierwszy, serwer wykona następujące czynności:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;-załaduje klasy serwletu&lt;/b&gt;&lt;br /&gt;&lt;b&gt;-utworzy instancje serwletu&lt;/b&gt;&lt;br /&gt;&lt;b&gt;-wywoła metody init()&lt;/b&gt;&lt;br /&gt;&lt;b&gt; -wywoła metody service()&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Każdy serwlet przez nas stworzony musi dziedziczyć po klasie &lt;b&gt;HttpServlet&lt;/b&gt;. Wcześniej napisałem kilka podstawowych informacji dotyczących protokołu HTTP. Zawiera on definicję metod:GET, POST, PUT, HEAD, OPTIONS, TRACE, DELETE, CONNECT. W większości wypadków najczęściej stosuje się metody GET i POST.W serwlecie do obsługi tych metod służą nam:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: inherit;"&gt;&lt;i&gt;-&amp;nbsp; protected &lt;code&gt;&lt;/code&gt;void doGet(HttpServletRequest request,                           HttpServletResponse response)      throws ServletException, IOException&lt;/i&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;i&gt;-&amp;nbsp; protected &lt;code&gt;&lt;/code&gt;void doPost(HttpServletRequest request,                           HttpServletResponse response)      throws ServletException, IOException&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;Napiszmy sobie naszą pierwszą aplikacje WWW. Do tego celu będziemy potrzebować środowiska programistycznego oraz serwera . Skorzystajmy do tego celu ze NetBeans IDE. Jako serwer aplikacji posłuży nam GlassFish. Zakładam, że czytelnik wie jak skonfigurować własne środowisko oraz serwer aplikacji więc nie będę wdawał się w zbędne szczegóły.&lt;br /&gt;&lt;br /&gt;Gdy uruchomimy NetBeans'a, utwórzmy nowy projekt.&lt;br /&gt;1. Z menu&lt;i&gt; File&lt;/i&gt; wybieramy&amp;nbsp; &lt;i&gt;New project.&lt;/i&gt;&lt;br /&gt;2. Wybieramy element o nazwie &lt;i&gt;Java Web, &lt;/i&gt;a potem zaznaczamy opcję &lt;i&gt;Web Application&lt;/i&gt; i klikamy &lt;i&gt;Next&lt;/i&gt;.&lt;br /&gt;3. Nazywamy swoją aplikacje np. &lt;i&gt;PierwszaAplikacja &lt;/i&gt; i klikamy &lt;i&gt;Next&lt;/i&gt;.&lt;br /&gt;4. Z listy Serwerów wybierzmy&amp;nbsp; pozycję GlssFish Server&amp;nbsp; 3.x (Ja posiadam najnowszą wersje serwera)&lt;br /&gt;5. Klikamy na przycisk&lt;i&gt; Finish.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-OMkfrAhemn4/TjlZQE9RDII/AAAAAAAAAAs/6ywPy--bhbo/s1600/netbeans1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="411" src="http://4.bp.blogspot.com/-OMkfrAhemn4/TjlZQE9RDII/AAAAAAAAAAs/6ywPy--bhbo/s640/netbeans1.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ou7uFttxfNQ/TjmzzSrzYdI/AAAAAAAAAB0/hCwAJxnqqu8/s1600/web-module.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="229" src="http://4.bp.blogspot.com/-ou7uFttxfNQ/TjmzzSrzYdI/AAAAAAAAAB0/hCwAJxnqqu8/s320/web-module.gif" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Powyższy rysunek przedstawia nam strukturę katalogów aplikacji webowej na serwerze.&lt;br /&gt;&lt;br /&gt;Projekt aplikacji webowej domyślnie zawiera jedną stronę &lt;i&gt;index.jsp&lt;/i&gt;. Wykorzystamy tę stronę do stworzenia prostego formularza. w formularzu stworzymy pole tekstowe i przycisk. Kiedy użytkownik kliknie na przycisk zostanie przeniesiony pod adres, który zostanie obsłużony przez serwlet. Zmodyfikujmy więc nasz plik&lt;i&gt; index.jsp.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-dcXJJeic1LE/Tjled2PS5rI/AAAAAAAAAAw/VOBqyArB8TY/s1600/netbeans2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://1.bp.blogspot.com/-dcXJJeic1LE/Tjled2PS5rI/AAAAAAAAAAw/VOBqyArB8TY/s640/netbeans2.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;Dyrektywa &lt;i&gt;@page&lt;/i&gt; określa różne istotne właściwości strony.&lt;br /&gt;Atrybut &lt;i&gt;action&lt;/i&gt; określa nazwę pliku, do którego przesyłamy żądanie. W naszym wypadku jest to formularz. Czas na stworzenie serwletu.&lt;br /&gt;&lt;br /&gt;1. Kliknij prawym przyciskiem na &lt;i&gt;Source Packages.&lt;/i&gt;&lt;br /&gt;2. Z menu New wybierzmy opcję&lt;i&gt; Servlet&lt;/i&gt;&lt;br /&gt;3. Nazwijmy naszą klasę&amp;nbsp; &lt;i&gt;ValidationOfAge&lt;/i&gt;, a w pole &lt;i&gt;Package&lt;/i&gt; wpiszmy &lt;i&gt;package1.&lt;/i&gt;&lt;br /&gt;4. W następnym kroku zaznaczmy opcję : &lt;i&gt;Add information to deployment descriptor (web.xml)&lt;/i&gt;,a w polu &lt;i&gt;Servlet Name &lt;/i&gt;wpiszmy &lt;i&gt;Walidacja wieku. &lt;/i&gt;W polu &lt;i&gt;URL Patterns(s) &lt;/i&gt;wpiszmy &lt;i&gt;/validationofage.do&lt;/i&gt;&amp;nbsp; .&lt;br /&gt;&lt;br /&gt;Powinniśmy otrzymać wygenerowany serwlet . &lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-uJHTTGkuBWk/Tjlpz7SK5nI/AAAAAAAAAA0/9WkFvkLW_gI/s1600/netbeans3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="448" src="http://3.bp.blogspot.com/-uJHTTGkuBWk/Tjlpz7SK5nI/AAAAAAAAAA0/9WkFvkLW_gI/s640/netbeans3.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Środowisko NetBeans utworzył nam dodatkową metodę &lt;i&gt;procesRequest()&lt;/i&gt;. Nie jest to metoda, która jest opisywana w specyfikacji, ale jedynie udogodnienie twórców tego środowiska. Możemy zauważyć, że niezależnie od rodzaju żądania, czy to jest żądanie typu GEST czy POST zawsze wywoływana jest metoda &lt;i&gt;procesRequest().&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Zmodyfikujmy właśnie tę metodę tak jak niżej na rysunku:&lt;br /&gt;&lt;i&gt; &lt;/i&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/--AJ7g1omKnw/TjluTkCvP8I/AAAAAAAAAA4/-bxT4FMXkN8/s1600/netbeans3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="428" src="http://4.bp.blogspot.com/--AJ7g1omKnw/TjluTkCvP8I/AAAAAAAAAA4/-bxT4FMXkN8/s640/netbeans3.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Metoda &lt;i&gt;setContentType() &lt;/i&gt;ustawia nam typ &lt;a href="http://pl.wikipedia.org/wiki/Typ_MIME"&gt;MIME&lt;/a&gt; przesyłanego dokumentu. Możemy ją tak ustawić aby w odpowiedzi dostać np. plik graficzny - &lt;i&gt;response.setContentType("image/jpg"). &lt;/i&gt;&lt;br /&gt;&lt;i&gt; &lt;/i&gt;&lt;br /&gt;&lt;i&gt;PrintWriter getWriter() - &lt;/i&gt;zwraca obiekt zapisujący dla danych tekstowych. Parametry metody &lt;i&gt;HttpServletRequest&lt;/i&gt; i &lt;i&gt;HttpServletResponse &lt;/i&gt;reprezentują obiekty żądania i odpowiedzi. Metoda &lt;i&gt;Object getParameter(String name)&lt;/i&gt; pobiera parametr o danej nazwie w żądaniu. Nasz parametr nazywa się &lt;i&gt;age&lt;/i&gt;, był podany w naszym formularzu:&amp;nbsp; &lt;i&gt;&amp;lt;input type="text" name="age" /&amp;gt;&lt;/i&gt; . Nasuwa się też nam pytanie jak serwer skojarzył adres URL serwletu &lt;i&gt;validationofage.do&lt;/i&gt; z klasą, któa go obsługuje - &lt;i&gt;ValidationOfAge.class&lt;/i&gt; . Odpowiedź na nasze pytanie znajdziemy w pliku web.xml. Znajdziemy go w podanej ścieżce &lt;i&gt;/WEB-INF/web.xml&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-0H_R_kGLqDQ/TjlyFsyqN_I/AAAAAAAAAA8/JBVnvFI2-vE/s1600/netbeans3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="342" src="http://4.bp.blogspot.com/-0H_R_kGLqDQ/TjlyFsyqN_I/AAAAAAAAAA8/JBVnvFI2-vE/s640/netbeans3.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Plik ten jest deskryptorem wdrożenia. Znajdują się w nim liczne ustawienia aplikacji webowych JEE. Dzięki takiemu podejściu czyli umieszczeniu konfiguracji w pliku XML, każda jego zmiana nie wymaga ponownej kompilacji kodów źródłowych. W pliki web.xml możemy zdefiniować parametry dla poszczególnych serwletów i naszej aplikacji. To na tyle w tej części. W następnej części będziemy rozwijać nasze poznane wiadomości dotyczące podstawowych elementów każdej aplikacji webowej - serwletów. Oczywiście nie myśl, że w ten sposób tworzy się obecnie aplikacje, było by to zbyt trudne. Czy wyobrażasz sobie cały kod html umieszczany w wywołaniu funkcji println() ? No ja na pewno nie.&lt;br /&gt;&lt;i&gt; &lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8814228651583994248-5244640601483404831?l=kadoel-kawaczyjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kadoel-kawaczyjava.blogspot.com/feeds/5244640601483404831/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/08/java-ee6-programowanie-aplikacji-www_4895.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/5244640601483404831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/5244640601483404831'/><link rel='alternate' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/08/java-ee6-programowanie-aplikacji-www_4895.html' title='JAVA EE6 Programowanie aplikacji WWW KURS cz.3 Serwlety.'/><author><name>kadoel</name><uri>http://www.blogger.com/profile/09242013722249997796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-1hd2xnJ47nw/TjlMCgPhQII/AAAAAAAAAAg/O3-F7JCPWZs/s72-c/java-servlets.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8814228651583994248.post-8814506762694795422</id><published>2011-08-03T14:14:00.000+02:00</published><updated>2011-09-15T15:30:24.951+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><title type='text'>JAVA EE6 Programowanie aplikacji WWW KURS cz.2 Model aplikacji.</title><content type='html'>Logika aplikacji podzielona jest na komponenty. Każdy komponent pełni inne funkcje. Wyróżniamy następujące warstwy aplikacji:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;-kliencka Client Tier&lt;br /&gt;-webowa Web Tier&lt;br /&gt;-biznesowa Business Tier&lt;br /&gt;-informacyjna Eis Tier&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Klient web jest to przeglądarka WWW, która wyświetla strony otrzymane z serwera. Strony WWW są dynamicznie generowane w postaci dokumentów (HTML/XHTML,XML). Za generowanie odpowiadają komponenty webowe, które uruchamiane są w warstwie web.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Komponenty webowe są to:&lt;br /&gt;&lt;b&gt;-serwlety&lt;br /&gt;-strony JSP i JSF&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-AL4D6917O8M/TjmylPg7E3I/AAAAAAAAABs/vAJ8HT5pvIs/s1600/overview-multitieredApplications.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/-AL4D6917O8M/TjmylPg7E3I/AAAAAAAAABs/vAJ8HT5pvIs/s400/overview-multitieredApplications.gif" width="366" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;Warstwa kliencka i webowa zazwyczaj traktowane są jako warstwa prezentacji.Podział taki pozwala skupić się na samym aspekcie wizualizacji bez wgłębiania się w szczegóły logiki biznesowej.&lt;br /&gt;&lt;br /&gt;Warstwa biznesowa jej zadaniem są głównie np:obliczenia, operacje na danych,itp. Korzysta głównie z komponentów warstwy webowej i biznesowej (EJB - Enterprise JavaBeans).&lt;br /&gt;&lt;br /&gt;Warstwa danych(informacyjna) inaczej warstwa EIS (Enterprise Information Systems) obejmuje wszelkie źródła danych dla warstwy logiki biznesowej. Takimi źródłami są między innymi: bazy danych, systemy informatyczne już istniejące w danym przedsiębiorstwie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8814228651583994248-8814506762694795422?l=kadoel-kawaczyjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kadoel-kawaczyjava.blogspot.com/feeds/8814506762694795422/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/08/java-ee6-programowanie-aplikacji-www_03.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/8814506762694795422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/8814506762694795422'/><link rel='alternate' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/08/java-ee6-programowanie-aplikacji-www_03.html' title='JAVA EE6 Programowanie aplikacji WWW KURS cz.2 Model aplikacji.'/><author><name>kadoel</name><uri>http://www.blogger.com/profile/09242013722249997796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-AL4D6917O8M/TjmylPg7E3I/AAAAAAAAABs/vAJ8HT5pvIs/s72-c/overview-multitieredApplications.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8814228651583994248.post-6528651900139776011</id><published>2011-08-03T14:11:00.000+02:00</published><updated>2011-09-15T15:30:29.916+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><title type='text'>JAVA EE6 Programowanie aplikacji WWW KURS cz.1 Wprowadzenie</title><content type='html'>&lt;b&gt;JEE - Java Enterprise Edition&lt;/b&gt; jest to standard tworzenia zorientowanych na usługi aplikacji biznesowych. Aplikacje te są budowane z wykorzystaniem języka Java i technologii J2SE (zakładam, że czytelnik zna tę technologię w stopniu minimum podstawowym). &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wszystko wydawałoby się tak piękne i klarowne na początku jeśli nie to, że tak naprawdę jest to cała masa różnorodnych technologii, a także frameworków dzięki którym my programiści możemy tworzyć nasze aplikacje WWW.Musimy też sobie powiedzieć, że istnieją oczywiście&amp;nbsp; frameworki i biblioteki, udostępniane przez zewnętrzne firmy.Może na początku wydawać się to wszystko zagmatwane i przytłaczające, ale postaram się przedstawić podstawową, wprowadzającą wiedzę w świat tworzenia naszych przyszłych aplikacji WWW.Oczywiście potrzeba nam na początku przede wszystkim samozaparcia w naszej nauce.&lt;br /&gt;&lt;br /&gt;Cechą szczególną&amp;nbsp; aplikacji JEE jest to, że do uruchomienia wymagają serwera aplikacji webowych.Najbardziej popularne to:GlassFish, Tomcat, IBM WebSphere Application Server.Na tej stronie:&lt;a href="http://java.sun.com/javaee/overview/compatibility.jsp"&gt;serwery&lt;/a&gt; możemy znaleźć certyfikowane serwery Java Enterprise.&lt;br /&gt;&lt;br /&gt;Aplikacje webowe czyli strony internetowe wykorzystujące często bazy danych, posiadają dynamiczną funkcjonalność.Przykładem takich aplikacji są sklepy internetowe, systemy zarządzania treścią CMS.Jeśli spojrzymy na podstawowe technologie, z których korzystają są to:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;-Java Servlet&lt;br /&gt;-JavaServer Faces&lt;br /&gt;-JavaServer Pages&lt;br /&gt;-JavaServer Pages Standard Tag Library&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-pH0VaqNE-DU/Tjk56VNcFxI/AAAAAAAAAAY/111iiy71bcg/s1600/fig3.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="156" src="http://1.bp.blogspot.com/-pH0VaqNE-DU/Tjk56VNcFxI/AAAAAAAAAAY/111iiy71bcg/s400/fig3.gif" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Trzeba sobie powiedzieć, że podstawą wszystkich aplikacji webowych tworzonych za pomocą technologii JEE są &lt;b&gt;serwlety&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Serwlety Java to programy umiejscowione po stronie serwera HTTP, służą do automatycznego generowania dokumentów stanowiących odpowiedź na żądania HTTP.&lt;br /&gt;&lt;br /&gt;To na tyle jeśli chodzi o bardzo krótkie wprowadzenie.W następnych częściach przyjrzymy się dokładniej architekturze aplikacji WWW.Przypomnimy sobie podstawowe założenia protokołu HTTP, poznamy zasadę działania serwletów i napiszemy naszą pierwszą aplikacje WWW.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8814228651583994248-6528651900139776011?l=kadoel-kawaczyjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kadoel-kawaczyjava.blogspot.com/feeds/6528651900139776011/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/08/java-ee6-programowanie-aplikacji-www.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/6528651900139776011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8814228651583994248/posts/default/6528651900139776011'/><link rel='alternate' type='text/html' href='http://kadoel-kawaczyjava.blogspot.com/2011/08/java-ee6-programowanie-aplikacji-www.html' title='JAVA EE6 Programowanie aplikacji WWW KURS cz.1 Wprowadzenie'/><author><name>kadoel</name><uri>http://www.blogger.com/profile/09242013722249997796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-pH0VaqNE-DU/Tjk56VNcFxI/AAAAAAAAAAY/111iiy71bcg/s72-c/fig3.gif' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
