GeeCON 2010 - call for papers
Call for papers na kolejną edycję GeeCON właśnie ruszyło! Tym razem konferencja odbędzie się w Poznaniu i będzie trwać calutkie 3 dni!!!

Jeśli chcecie w niej uczestniczyć za darmo to zgłoście się w call for papers a oprócz otrzymania darmowego ticketu na GeeCON Conference będziecie mogli również przedstawić swoją wiedzę szerokiemu gronu międzynarodowych uczestników! Więcej szczegółów na stronie konferencji.
Aaaa zapomniałbym - mamy całkiem fajne bannerki na bloga, zapraszam do ich umieszczania ![]()
Scala + IntelliJ IDEA 9.0 Community Edition
Pewnie część z Was już wie, iż pojawiła się ostatnio 9ta wersja IntelliJ IDEA. Ponieważ środowisko to posiada moim zdaniem (i to nie dlatego, że jestem w JB Academy :P) najlepsze wsparcie dla popularnego ostatnio języka Scala postanowiłem dziś przedstawić w jaki sposób można szybko utworzyć projekt dla tego języka. IntelliJ jest obecnie dostępne w w dwóch wersjach - Community (darmowa) i Ultimate (płatna). Na całe szczęście dla wszystkich Scala jest już obsługiwana w wersji darmowej, stąd właśnie tej wersji użyję w moim przykładzie.
Pierwsza rzecz która uderzyła mnie mocno zaraz po zainstalowaniu to brak znanego mi z wersji Ultimate look and feel.
To które ustawia się przy pierwszym starcie wersji Community wygląda strasznie (sic!), szybka zmiana ustawień i da się używać
Czas zainstalować wtyczkę do Scali, wchodzę w ustawienia (Ctrl + Alt + S) i wpisuję “plugins” w okienku wyszukiwania.
Po prawej stronie w oknie sekcji plugins wybieram available i tam klikając prawym klawiszem opcję download and install. Chwila moment i już mogę tworzyć swój projekt.
Krok pierwszy to wybranie rodzaju projektu, w naszym przypadku jest to utworzenie nowego projektu od samego początku:

Tworzony przez nas projekt jest projektem mavenowym więc wprowadzamy jego nazwę i wybieramy typ modułu jako Maven Module:

Czas wybrać archetyp z pomocą którego zostanie stworzony nasz projekt, wybór jest oczywisty - wybieramy scala-archetype-simple, który pozwoli na utworzenie prostego projektu dla języka Scala:

Teraz przyjdzie nam chwilę poczekać (długość zależy od szybkości łącza), IntelliJ uruchomi mavena a ten utworzy nasz projekt pobierając jednocześnie wszystkie potrzebne zależności. Na końcu pozostaje nam odświeżyć strukturę projektu (podpiąć pobrane biblioteki), zrobimy to poprzez kliknięcie na napis Import Changes:

To już w zasadzie wszystko - projekt budujemy wybierając w oknie mavena interesujące nas fazy “cyklu życia” i klikając na przycisk Run Maven Build:

Projekt oczywiście się… nie zbuduje, wszystko dlatego, że jeden test w wygenerowanym domyślnie kodzie kończy się niepowodzeniem
Podczas konfigurowania projektu możecie natrafić na problem w postaci braku zdefiniowanej instalacji mavena, aby poprawnie skonfigurować mavena wystarczy go pobrać i prawidłowo ustawić ścieżkę w konfiguracji IntelliJ (wciskamy Ctrl + Alt + S, wpisujemy “maven home” w wyszukiwarce - IntelliJ podświetli nam pole w którym mamy podać ścieżkę do katalogu domowego mavena).
IntelliJ otwarte!
Wreszcie mogę o tym napisać! IntelliJ IDEA jest teraz dostępne za DARMO i jako open-source! Wersję community możecie pobrać na tej stronie.
RuPy 2009 - rejestracja rozpoczęta!
Może to tak średnio związane z Javą (choć będą prezentacje o JRuby) ale myślę, że warto o tym wspomnieć. Kolejna edycja RuPy czyli konferencji poświęconej językom skryptowym (głownie Ruby i Python) nadchodzi wielkimi krokami!!! Dwa dni temu została uruchomiona rejestracja, dla tych co zarejestrują się wcześniej promocja - super niskie ceny!
Ja będę (o ile mi coś nie wypadnie) i mam nadzieję, że i Wy będziecie ![]()
IntelliJ IDEA (Maia) i wsparcie dla platformy Android
Już koniec sierpnia, powoli nadchodzi czas na kolejną wersję IntelliJ IDEA, postanowiłem więc sprawdzić jak wygląda wersja EAP dziewiątej już edycji IntelliJ o kodowej nazwie Maia. Oczywiście pobrałem sobie najnowszy dostępny build, który w chwili pisania tego posta jest oznaczony numerem 10666. Mija chwila i mogę się cieszyć najnowszą publicznie dostępną wersją IntelliJ.
Z nowych rzeczy, które pojawiają się w najnowszym IntelliJ należy wymienić wsparcie dla:
- Java EE 6.0
- GWT 1.6
- OSGi
- PHP
- Adobe AIR
- Google App Engine
- Android
To tylko część ze zmian w nadchodzącej wersji, pełną listę znajdziecie tutaj.
Ja postanowiłem sprawdzić jak IDEA radzi sobie z Androidem. Wiadomo, iż głównym środowiskiem do tworzenia aplikacji na Androida jest obecnie Eclipse, stąd też wprowadzenie wsparcia w IntelliJ może dać mocną alternatywę programistom tworzącym na niego aplikacje.
Zaraz po uruchomieniu IntelliJ wybrałem opcję File -> New Project, moim oczom ukazało się następujące okno:

Niby znajome ale jakoś tego wszystkiego więcej. Okazuje się, że w nowej wersji IntelliJ pojawiają się dwie nowe opcje:
- Import projektu Grails z istniejącym kodem źródłowym
- Import projektu Griffon z istniejącym kodem źródłowym
No to super! Pewnie wszyscy developerzy Groovy, którzy używają IntelliJ się ucieszą!
Wybieram Create project from scratch i klikam Next, pojawia się ekran ustawień projektu:

Wybieram z listy Android module oraz uzupełniam podstawowe dane takie jak nazwa projektu i jego lokalizacja. Jak widzicie dostępnych jest jeszcze kilka innych modułów, najistotniejsze z nich to J2ME, Flex, Grails i oczywiście Java. Z miejsca widać, że IntelliJ przyda się nie tylko developerom Javy ale również np. Flexa.
Dobra, klikam Next, pojawia się ekran w którym można wybrać położenie katalogu z kodem, ponieważ nic nie zmieniam więc pozostaje mi jedynie kliknąć Next.
Dochodzę do ekranu ustawień modułu Android:

Ponieważ nie ustawiałem wcześniej ścieżki do Android SDK, stąd muszę to zrobić w tym kroku. Dodaję moje SDK oraz zmieniam ustawienia pakietu na org.holewa:

Nie zmieniam nazwy aktywności ani też nazwy projektu, pozostaje mi jedynie kliknąć Next.
Środowisko chwilę coś przetwarza… ukazuje się ekran jak poniżej:

Znajduje się w nim kod przykładowej aplikacji “Hello, World!”. Aby sprawdzić czy aplikacja faktycznie się uruchamia wybieram z menu Run -> Run.
Po dłuższej chwili (kilkadziesiąt sekund), moim oczom ukazuje się emulator z uruchomioną aplikacją:

Wow! Nie sądziłem, że stworzenie projektu w nowej wersji IntelliJ będzie tak szybkie. Aktualnie używam wersji 8.1.3 i przyznam, że mam drobne problemy z Androidem, w tej wersji jednak nie jest on oficjalnie wspierany i wymaga instalacji zewnętrznej wtyczki, co też może tłumaczyć moje problemy. Pozostawię więc sobie wersję “rozwojową” na dysku i będę ją używał podczas pisania moich mobilnych aplikacji ![]()
JetBrains Academy member.
Ci którzy śledzą mojego Twittera już wiedzą dla innych ogłaszam to tutaj. Oficjalnie zostałem jednym z członków JetBrains Academy. JetBrains Academy to zespół ludzi wybieranych ze społeczności użytkowników rozwiązań firmy JetBrains, ponieważ jak zapewne część z Was wie od pewnego czasu jestem uzależniony od używania IntelliJ IDEA, stąd wiadomość o chęci wcielenia mnie do tej grupy niezmiernie mnie uradowała.
Członkowie JetBrains Academy to miłośnicy produktów JetBrains, ludzie którzy udzielają się w społeczności poprzez organizację spotkań, udział w projektach open source i charakteryzują się dużą wiedzą. I właśnie ta ostatnia cecha czyni mnie malutkim bo jak tu porównać mnie do takich ludzi jak Antonio Goncalves (tego pana nie muszę przedstawiać), Jonas Bonér (twórca AspectWerkz, commiter m.in. Terracota i AspectJ) czy Hamlet D’Arcy (commiter Groovy) a to tylko część z osób będących członkami JetBrains Academy, w planach są kolejne, co najmniej tak samo znane nazwiska. Nie ma jednak nic złego co by na dobre nie wyszło - już dostałem wiatr w żagle
Dla tych osób które ciekawe są co daje udział w JetBrains Academy mogę powiedzieć, iż przede wszystkim jest to bardzo bliska współpraca z ludźmi z JetBrains i to zarówno jeśli chodzi o zgłaszanie uwag co do produktów jak i zapoznanie się z nowymi, pewnie niejednokrotnie jeszcze nie ogłoszonymi publicznie rozwiązaniami. Dochodzą do tego jeszcze inne rzeczy jak choćby wsparcie ze strony firmy spotkań organizowanych przez członków akademii. Więcej na temat JetBrains Academy znajdziecie tutaj.
Na koniec dodam, że Polska ma aktualnie trzech przedstawicieli, pozostali to dobrze Wam znany Łukasz Lenart (biedaczysko chyba nie znalazł fotki którą mógłby pokazać światu :P) oraz od strony .NET Michał Brzozowski.
Tworzenie aplikacji na platformę Android

Ostatnio zainteresowałem się platformą Android, która wydała mi się dość interesująca z uwagi na ciekawe podejście oraz duże ułatwienia w tworzeniu aplikacji. Już pierwsze kilkanaście minut z przykładami na Androida wystarczy aby zauważyć świeże (na ile to możliwe) pomysły twórców tej platformy.
W całej platformie chyba najbardziej podoba mi się podejście do tworzenia interfejsów użytkownika, osoby zapoznane z Flexem mogą znaleźć tu pewną analogię a mianowicie podobnie jak we Flexie interfejs użytkownika może być tworzony deklaratywnie w pliku XML, oczywiście w dalszym ciągu istnieje możliwość stworzenia interfejsu standardowo (w czystej Javie ala Swing), jednak to właśnie deklaratywne tworzenie interfejsu w moim skromnym mniemaniu jest kierunkiem w którym wszystkie rozwiązania wspierające tworzenie UI powinny się kierować.
Aby nie przedłużać przystąpię w tym momencie do opisu całej koncepcji i podstawowcyh zagadnień związanych z Androidem. Na samym początku warto zaznaczyć, że Android opiera się na systemie Linux, każda aplikacja napisana na tą platformę jest uruchamiana w odrębnym procesie. Każda aplikacja jest również uruchamiana w swojej instancji JVM nie jest to jednak JVM od Oracle, tfu miało być Sun’a a maszyna stworzona przez inżynierów Androida na bazie Apache Harmony, nazywa się ona Dalvik. Dalvik na tyle się róźni od JVM z Sun’a, że kod napisany na JVM Sun’a musi zostać skonwertowany przy użyciu specjalnego narzędzia które docelowo stworzy plik z rozszerzeniem .dex, plik taki jest mniejszy od jar’a stworzonego pod JVM Sun’a, spowodowane jest to optymalizacją kodu i jego konwersją na bytecode Dalvika. Warto też tu dodać, że Dalvik VM nie jest zgodny z żadnym standardem wypracowanym przez JCP (myślę tutaj głównie o JME i innych standardowych bibliotekach).
Tyle o samym backgroundzie na którym będą uruchamiane aplikacje, czas przybliżyć koncepcję wg. której tworzone są aplikacje na Androida. Wyróżnić tutaj możemy cztery podstawowe kategorie komponentów na bazie których stworzyć możemy większość aplikacji, są nimi aktywności (activities), usługi (services), adresaci (broadcast receivers) i wreszcie dostawcy treści (content providers). Opiszę teraz pokrótce każdą z nich:
Aktywności (activities)
Aktywności możecie identyfikować z pewnego rodzaju prostym zadaniem jak np. wyświetlenie listy osób w książce adresowej, pokazanie galerii zdjęć czy wreszcie pokazanie szczegółów kontaktu w komunikatorze. Każda aktywność może być wywołana niezależnie a jej wywołanie może się odbywać z poziomu różnych aplikacji (tu wchodzą w grę uprawnienia które opiszę w jednym z kolejnych postów). Aktywność powinna być utożsamiana przez was z tym co widzicie na wyświetlaczu.
Usługi (services)
Usługi w stosunku do aktywności nie są widoczne dla użytkownika w sposób bezpośredni. Usługa służy do wykonywania czegoś w tle (background) jak np. pobierania pliku, synchronizacji danych czy też odtwarzania muzyki.
Usługa może zostać wywołana z poziomu aktywności np. kliknięcie na liście plików do pobrania spowoduje schowanie ekranu aplikacji przy jednoczesnym uruchomieniu usługi pobierania pliku w tle.
Adresaci (broadcast receivers)
Adresaci reagują na zdarzenia, zdarzenia są rozgłaszanie w systemie i mogą przekazywać naprawdę różne informacje m.in. rozładowanie baterii, utrata zasięgu sieci. Użycie komponentu adresata pozwala w łatwy sposób reagować na takie zdarzenia, adresat taki może w konekwencji uruchomić pewną aktywność (np. uruchomić listę sieci do wyboru przy nagłym braku zasięgu wcześniej obsługiwanej sieci).
Dostawcy treści (content providers)
Dostawcy treści to komponenty odpowiedzialne za współdzielenie treści pomiędzy aplikacjami, umożliwiają one aplikacją dostęp do zasobów innych aplikacji (tutaj również w grę wchodzą uprawnienia).
To chyba tyle tytułem wstępu. W kolejnym poście omówię podstawy tworzenia interfejsów, wspomnę też o tajemniczej klasie R ![]()
GeeCON za 250zł ?!!!
Tak, właśnie pojawiła się informacja o promocji 5+1, wiele firm pytało o zniżki za grupowe wejściówki więc pojawiła się standardowa “procedura” w tej kwestii. Wystarczy, że zarejestrujesz pięć osób a dostaniesz bilet dla szóstej osoby całkowicie za free! Ta promocja sprawi, że GeeCON będzie dostępny już od 250zł (w przypadku biletów dla studentów/aktywnych członków JUGów) za osobę za calutkie DWA dni!!! Jeśli już się zarejestrowałeś to znajdź dodatkowe osoby a będziesz płacił mniej!!!
A to jeszcze nie wszystko, szykujemy dla was specjalne szkolenia prowadzone przez Sun Learning Services w powalającej cenie (stanowiącej ułamek ich realnej ceny!!!), niestety ilość miejsc na szkolenia będzie ograniczona więc kto pierwszy ten lepszy ![]()
Przedsmak szkoleń tutaj, więcej szczegółów (w tym cena) w najbliższym czasie.
GeeCON - czy Twój szef wystarczająco dba o Ciebie?
Tytuł może zbyt kontrowersyjny ale w innym przypadku pewnie nie zwrócilibyście na niego uwagi
Jak zapewne większość z Was wie, wczoraj wystartowaliśmy z rejestracją na GeeCON - pierwszą w pełni międzynarodową konferencją poświęconą Javie w Polsce. Jest to dobry moment aby przybliżyć pokrótce powody dla których ją organizujemy oraz dlaczego poważnie powinieneś zastanowić się nad udziałem w GeeCON.
Po pierwsze, głównym powodem dla którego zabraliśmy się za organizację GeeCON była chęć umożliwienia Wam i sobie udziału w konferencji podczas której prelegentami będą ludzie z naprawdę topową wiedzą. Część z nich to znane osoby pracujące nad rozwojem technologii których używacie codziennie w pracy, część to ludzie pracujący nad ciekawymi projektami, którzy są chętni podzielić się swoim doświadczeniem. Staramy się ich zebrać w jednym miejscu i czasie, tak aby stworzyć możliwie najbardziej interesujące wydarzenie “javowe” w tym roku w Polsce.
Oczywiście, nie wszystkie tematy muszą wszystkim odpowiadać, możliwe też, że część z prezentacji, które znajdują się w agendzie byłaby Waszym zdaniem gorsza od tych, które musieliśmy odrzucić z braku wolnych slotów (aktualne wolne sloty w agendzie są przeznaczone dla prelegentów, którzy nie śpieszą się z podsyłaniem tematów i abstraktów).
Organizując GeeCON staramy się unikać tego czego sami nie lubimy, dlatego też ograniczyliśmy do absolutnego minimum wszystkie marketingowe aspekty prezentacji, a prelegenci sponsorów będą opowiadać o rozwiązaniach open source i technologiach ogólnie dostępnych, to jest jeden z naszych głównych celów.
Pomimo faktu, że wszyscy organizujemy konferencję za free (ot taki rodzaj wolontariatu), nie uda nam się doprowadzić do tego aby wejściówki były za darmo. Niestety są pewne koszty stałe, których pokrycie konieczne jest do realizacji pełni naszej wizji. Gdybyśmy z nich zrezygnowali to GeeCON nie byłby już GeeCONem w tej postaci jaką możecie obserwować (byłby krótszy i z udziałem mniejszej ilości zagranicznych prelegentów oraz z dużym udziałem prezentacji marketingowych).
Na całe szczęście udało nam się zminimalizować stawkę do poziomu, który część osób naprawdę zadowala (pozostałe zawsze będą narzekać, że jest zbyt drogo :P). 389 PLN to chyba stawka do przełknięcia dla wszystkich firm informatycznych w kraju i dla większości developerów (już nie narzekajcie jak to mało zarabiacie), w ten sposób prawdopodobnie odrzucamy główny argument Waszego PM’a, który pewnie zawsze mówi Wam, że wyjazd na zagraniczne konferencje to zbyt duży koszt
Faktycznie porównując z takimi konferencjami jak QCon, Jazoon czy też ApacheCon to GeeCON jest śmiesznie tani. Oczywiście wiadomo, że te konferencje są sporo większe od GeeCON ale z drugiej strony i tak możecie uczestniczyć w jednej ścieżce w jednej chwili co sprawia, że w przeliczeniu na godzinę prezentacji GeeCON to zdecydowanie mniejszy koszt. I o to właśnie wszystkim organizatorom chodziło, nie organizować imprezy dla zysku a tylko dlatego aby dostarczyć Wam godne uwagi wydarzenie “javowe”.
Jeśli już dotarliście do tego miejsca to mam nadzieję, że podzielicie się swoimi uwagami i spostrzeżeniami, zarówno jeśli chodzi o GeeCON, jak i inne rzeczy które mogą się Wam wydać istotne w kontekście tego wpisu. Na koniec jeszcze chciałem wszystkich zaprosić do udziału w GeeCON i nie tylko, bo już wielkimi krokami zbliża się kolejna Javarsovia i Java4People
Java Servlet 3.0 Specification czyli nadchodzą zmiany…
Ostatnio przeglądałem listę specyfikacji nad którymi trwają prace w ramach Java Community Process, w ten sposób natrafiłem na specyfikację oznaczoną JSR 315. Zapewne to oznaczenie kodowe większości z Was nic nie mówi, więc przytoczę tu pełną nazwę którą jest “Java Servlet 3.0 Specification”. Tak, dokładnie specyfikacja oznaczona jako JSR 315 dotyczy niczego innego jak właśnie nowej wersji servletów, oznaczonej numerem 3.0.
Nowa wersja nową wersją i różnie to wygląda w przypadku różnych technologii, jednak wydaje mi się, że zmiany które będą wprowadzone w ramach kolejnej wersji servletów są na tyle istotne, iż warto je tutaj przybliżyć.
Servlety 3.0 wniosą powiew świeżości, oto część zmian jakie nadchodzą:
- użycie adnotacji do konfiguracji servletów i filtrów
- “web fragments”, czyli dotychczasowa konfiguracja web.xml z wykorzystaniem wielu plików
- metody do dodawania servletów i filtrów
- asynchroniczne przetwarzanie
Opiszę teraz pokrótce poszczególne z nich:
Użycie adnotacji do konfiguracji servletów i filtrów
Tak naprawdę oprócz konfiguracji servletów i filtrów możemy również skonfigurować listenery.
Pakiet zawierający potrzebne adnotacje nosi nazwę javax.servlet.annotation.
Znajdują się w nim m.in. następujące adnotacje:
- @WebServlet
- @ServletFilter
- @WebServletContextListener
Oczywiście servlety, filtry jak i listenery muszą implementować/rozszerzać odpowiednie interfejsy/klasy (tak jak to było do tej pory), zespół pracujący nad tą specyfikacją planował wcześniej zrezygnować z konieczności rozszerzania klasy javax.servlet.http.HttpServlet na rzecz samego oznaczenia klasy servletu adnotacją @Servlet (obecnie jest @WebServlet)oraz dostarczenia metod przyjmujących jako parametr HttpServletRequest oraz HttpServletResponse. Oczywiście w takim przypadku konieczne byłyby dodatkowe adnotacje jak np. @GET czy też @POST w celu oznaczenia czy dana metoda zdefiniowana w ramach servletu obsługuje odpowiednią metodę HTTP. Wcześniejsze podejście umożliwiało w ten sposób zastosowanie zwykłych klas POJO jako klas servletów. Nie jestem do końca przekonany do takiego podejścia, nie to żebym był tradycjonalistą, jednak taka elastyczność wydaje mi się zbędna w tym przypadku w dodatku wprowadza pewien ład. Wracając jednak do adnotacji to będą one obok standardowego pliku web.xml drugim sposobem na definicję parametrów servletu, servlet w ten sposób oznaczony będzie automatycznie wykrywany (oczywiście o ile będzie się znajdował w classpath) przez kontener servletów zgodny ze specyfikacją Java Servlet 3.0. Warto tu nadmienić, iż wzorcową implementacją (RI - reference implementation) kontenera zgodnego z tą specyfikacją ma być Glassfish w wersji 3 (to chyba nikogo nie dziwi).
Aby obrazowo przedstawić zastosowanie adnotacji @WebServlet proponuję spojrzeć na poniższy przykład:
name=“sampleservlet”,
urlPatterns={“/sampleservlet”},
initParams={
@InitParam(name=“paramname”, value=“paramvalue”)
}
)
public class TestServlet extends javax.servlet.http.HttpServlet {
//tu kod servletu
}
Jak widzicie w powyższym przykładzie zdefiniowałem nazwę servletu “sampleservlet” oraz mapowanie “/sampleservlet“, podałem też przykładowy parametr który może zostać użyty przy inicjalizacji servletu. Tak zdefiniowany servlet musimy umieścić w zasięgu naszego classpath, kontener zgodny ze specyfikacją 3.0 servletów powinien sam wykryć taki servlet i go odpowiednio zainicjować. Oczywiście można wyłączyć obsługę automatycznego wykrywania servletów, filtrów czy też listenerów, jest to jednak całkiem wygodna opcja, którą z uwagi na bezpieczeństwo powinno się używać z rozwagą.
Web fragments
Pewnie nie raz spotykaliście się z przydługawymi plikami web.xml (tzw. deskryptory aplikacji), w których skonfigurowana była cała masa servletów, filtrów, listenerów.
Obsługa takiego pliku może niejednokrotnie przysporzyć problemów, dodatkowe problemy pojawiają się
gdy chcemy skonfigurować jakiś framework, którego jeszcze nie znamy.
Tutaj z pomocą przyjdzie nam JSR 315 i tzw. “web fragments”. Pewnie już domyślacie się do czego to służy? Otóż web fragments mają w zamiarze umożliwić dzielenie konfiguracji która znajduje się w jednym pliku konfiguracyjnym na wiele “fragmentów”, z których zostanie wczytana kompletna konfiguracja.
W praktyce oznacza to, iż we frameworkach takich jak np. Struts 2 a właściwie w ich archiwum JAR będzie można umieścić taki fragment deskryptora. Tak umieszczony fragment będzie mógł zostać wykryty przez kontener servletów i odpowiednio wykorzystany np. do domyślnej konfiguracji frameworku. Oczywiście będzie tu przyjęta odpowiednia konwencja, plik taki musi się nazywać web-fragment.xml, musi być też umieszczony w katalogu META-INF biblioteki.
Prawda, że przyjemne? A jak to jeszcze ułatwi życie
Oczywiście może się tutaj pojawić problem z bezpieczeństwem jak automatyczna inicjalizacja rzeczy o których moglibyśmy sobie nie zdawać sprawy.
Kolejna rzecz to:
Metody do dodawania servletów i filtrów
Tak, będziemy mogli użyć specjalnych metod, których przeznaczeniem będzie inicjalizacja np. servletu.
Będą to metody addServlet oraz addFilter.
Czas na ostatnią z wymienionych powyżej nowości (oczywiście znajdziecie tego więcej na stronie specyfikacji), a mianowicie:
Asynchroniczne przetwarzanie
To jedna z najważniejszych zmian w porównaniu do wersji 2.5. Znacie dobrze te sytuacje w których Wasz servlet musi wywołać wywołanie usługi sieciowej albo przeprowadzić jakąś inną operację zajmującą więcej czasu, w takie sytuacji klient wywołujący servlet musi czekać aż operacja zostanie wykonana. Właśnie w takim przypadku przydaje się wywołanie asynchroniczne, i tutaj okazuje się, że twórcy specyfikacji 3.0 servletów wprowadzają do niej asynchroniczne przetwarzanie. Ale jak to ma wyglądać w praktyce? Obecna wersja specyfikacji wprowadza pojęcie kontekstu wywołania asynchronicznego, reprezentowanego przez klasę AsyncContext zawiera on informacje o otrzymanym żądaniu i odpowiedzi. Oczywiście w celu użycia wywołania asynchronicznego na servlecie należy go odpowiednio skonfigurować, czyli ustawić jeden atrybut o nazwie supportAsync, tak skonfigurowany servlet (lub filtr) będzie mógł już służyć do obsługi wywołań asynchronicznych. Ponieważ po wykonaniu operacji przez servlet może się okazać konieczne wykonanie dodatkowych czynności, autorzy specyfikacji JSR 315 wprowadzają nowy rodzaj interfejsu listenera AsyncListener którego implementację należy dodać do requestu. Implementacja taka będzie posiadała co najmniej dwie metody o nazwach onComplete oraz onTimeout (zdefiniowane w ramach interfejsu), pierwsza zostanie wywołana w przypadku zakończenia przetwarzania requestu na czas, druga w przypadku gdy wystąpi timeout (wartość timeoutu w milisekundach podamy w parametrze servletu o nazwie asyncTimeout).
To wszystko w tym wpisie, więcej informacji na temat Java Servlet 3.0 Specification znajdziecie na stronie Java Community Process.





