jUnit + Reflections by zaoszczędzić kilka chwil

Java Komentarze (0) »

Kilka razy (… ok może kilkanaście ;) ) zdarzyło mi się napisać klasy reprezentujące encje Hibernate i zapomnieć dopisać je do XML’a z mappingiem. Te niedopatrzenie wychodzi na jaw w momencie deploy’u aplikacji. No ale żeby wiedzieć co jest grane trzeba zajrzeć do logów. Wiadomo nie zajmuje to może jakoś specjalnie wiele czasu ale na pewno rozbija rytm pracy i nie potrzebnie zmusza do przeszukiwania logów.

Plan jest taki: Piszemy jUnitowy test, który sprawdzi czy czasem nie zapomnieliśmy o umieszczeniu wpisu z mappingiem w XML’u dla którejś z encji.

Każda encja jest oznaczona adnotacją @Entity (jeśli używamy adnotacji oczywiście), więc najpierw musimy znaleźć wszystkie klasy oznaczone tą adnotacją, a potem sprawdzić czy odpowiedni wpis znajduje się w pliku XML.

Aby znaleźć wszystkie klasy oznaczone @Entity najlepszym rozwiązaniem wydaje się użycie mechanizmu refleksji. Ja poszedłem na łatwiznę i wykorzystałem bibliotekę Reflections - która dostarcza wysokopoziomowego API.

OK w takim razie w jaki sposób wyszukać wszystkie klasy adnotowane @Entity ?

 Set> set = new Reflections(pakiet).getTypesAnnotatedWith(Entity.class);

W ten sposób zyskujemy dostęp do wszystkich klas adnotowanych @Entity znajdujących się w pakiecie pl.kedziorski. Z obiektu Class łatwo wyciągnąć pełną nazwę klasy, którą umieszcza się w pliku z mappingami.

  clazz.getCanonicalName();

Teraz wystarczy już tylko sprawdzić czy plik XML z mappingiem zawiera znalezioną nazwę.

private Boolean isContainingMapping(String className){
		BufferedReader br;
		try {
			br = new BufferedReader(new FileReader(hibernateMappingFilePath));
 
			String line;
			while ((line = br.readLine()) != null) {
			   if(line.contains(className)) {
				   br.close();
				   return true;
			   }
			}
			br.close();
			return false;
		} catch (IOException e) {
			return false;
		}
	}

Akurat tu sprawdzam linijka po linijce - można by wykorzystać fakt, że mamy do czynienia z plikiem XML i zrobić to znacznie ładniej, ale nie o to mi chodzi. Całość testu, który zabezpiecza zapominalskich przed niepotrzebnym wrzucaniem builda, który i tak się nie uruchomi wygląda następująco:

 import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Set;
 
import javax.persistence.Entity;
 
import org.junit.Assert;
import org.junit.Test;
import org.reflections.Reflections;
 
public class HibernateMappingsTest {
	private static final String hibernateMappingFilePath = "src/main/webapp/WEB-INF/database/DataSource.xml";
	private static final String pakiet = "pl.kedziorski";
 
	@Test
	public void testMappings(){
		Set> set = new Reflections(pakiet).getTypesAnnotatedWith(Entity.class);
		for (Class<!--?--> clazz : set) {
			Assert.assertTrue(isContainMapping(clazz.getCanonicalName()));
		}
		Assert.assertTrue(true);
	} 
 
	private Boolean isContainMapping(String className){
		BufferedReader br;
		try {
			br = new BufferedReader(new FileReader(hibernateMappingFilePath));
 
			String line;
			while ((line = br.readLine()) != null) {
			   if(line.contains(className)) {
				   br.close();
				   return true;
			   }
			}
			br.close();
			return false;
		} catch (IOException e) {
			return false;
		}
	}
}

W podobny sposób wykorzystałem Reflections do wymuszania pewnej konwencji w projekcie - otóż każda moja encja ma statyczne pole Null , które zawiera NullObject tej klasy. Dodatkowo implementuje interfejs NullObject i metodę isNull(). Wykorzystuje te pole m.in w generycznym DAO i ważne jest aby było ono w każdej encji - no ale niestety czasami zdarza mi się o nim zapomnieć (… czasami przez kopiuj-wklej pole Null ma nie ten typ co powinno) - i przed tym również można dość łatwo zabezpieczyć się korzystając z mechanizmu reflekcji i testu. Kod poniżej już bez omawiania.

import java.lang.reflect.Field;
import java.util.Set;
 
import org.junit.Assert;
import org.junit.Test;
import org.reflections.Reflections;
 
import pl.kedziorski.NullObject;
 
public class NullPropertyTest {
 
	private static final String pakiet = "pl.kedziorski";
 
	@Test
	public void testNullPropertyPresence() throws SecurityException, NoSuchFieldException{
		Set&gt; set = new Reflections(pakiet).getSubTypesOf(NullObject.class);
		for (Class<!--? extends NullObject--> clazz : set) {
			clazz.getField("Null");
		}
		Assert.assertTrue(true);
	}
 
	@Test
	public void testNullPropertyType() throws SecurityException, NoSuchFieldException{
		Set&gt; set = new Reflections(pakiet).getSubTypesOf(NullObject.class);
		for (Class<!--? extends NullObject--> clazz : set) {
			if(!clazz.getSimpleName().startsWith("Null")){
				Field field = clazz.getField("Null");
				Assert.assertTrue("Złamana konwencja NullObject!! Niepoprawny typ pola 'Null'. Klasa: "+clazz.getCanonicalName(),field.getDeclaringClass().equals(clazz));
			}
		}
	}
	@Test
	public void testNullPropertyValueNotSimpleNull() throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{
		Set&gt; set = new Reflections(pakiet).getSubTypesOf(NullObject.class);
		for (Class<!--? extends NullObject--> clazz : set) {
			if(!clazz.getSimpleName().startsWith("Null")){
				Field field = clazz.getField("Null"); 
 
				Assert.assertNotNull("Złamana konwencja NullObject!! Pole 'Null' == null. Klasa: "+clazz.getCanonicalName(), field.get(null));
			}
		}
	}
 
	@Test
	public void testNullPropertyValue() throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{
		Set&gt; set = new Reflections(pakiet).getSubTypesOf(NullObject.class);
		for (Class<!--? extends NullObject--> clazz : set) {
			if(!clazz.getSimpleName().startsWith("Null")){
				Field field = clazz.getField("Null");
				Assert.assertEquals("Złamana konwencja NullObject!! Klasa: "+clazz.getCanonicalName(),"Null"+clazz.getSimpleName(), field.get(null).getClass().getSimpleName());
			}
		}
	}
}

Mam nadzieje że komuś się przyda - jeśli ktoś ma jakiś pomysł przed czym jeszcze można by się zabezpieczyć w ten sposób - będę wdzięczny za komentarz. Jeśli jest jakaś ciekawsza metoda to również proszę o wpis z namiarem w komentarzu;)

Confitura 2011 (dawna Javarsovia)

Java, Konferencje Komentarze (2) »

Wczorajszy dzień spędziłem w Warszawie w Centrum Konferencyjno-Kongresowe przy ulicy Bobrowieckiej, gdzie odbywała się największa i najciekawsza darmowa, javowa konferencja w Polsce - Confitura 2011 (dawniej Javarsovia).

Confitura 2011

Na konferencje zawitaliśmy autem aby nie gotować się w pociągu - oczywiście nie obyło się bez problemów - kolege wstukał w GPS nie tę ulicę co trzeba i w pewnym momencie zorientowaliśmy się że jesteśmy po drugiej stronie Wisły - szybka weryfikacja a tu w GPS’ie celem jest ulica Bobrowa zamiast Bobrowieckiej :) Na szczęście udało nam się zdążyć i około godziny 9.00 byliśmy już na miejscu. Szybka rejestracja i wykład sponsorki (akurat przeznaczony na wyciszenie po podróży i rozmowę z kolegami którzy czekali już na nas w Warszawie ;] ). Na konferencji jak zawsze super atmosfera. Masa geek’ów chłonna wiedzy. Brawa dla organizatorów za organizację tak wielkiego przedsięwzięcia.

Jeśli chodzi o prezentacje to moja ścieżka wyglądała następująco:

  • Jakub Koperwas - Aspekt bezpieczeństwa w tworzeniu aplikacji internetowych.
  • Patrycja Wegrzynowicz - Patterns and Anti-Patterns in Hibernate
  • Bartek Majsak - Jak wycisnąć maksimum z testów?
  • Paweł Lipiński - Re-fuck-toryzacja czyli sprowadzanie sp****go kodu na właściwe tory.
  • Tomek Łabuz - Zastosowanie przetwarzania asynchronicznego w aplikacjach
  • Piotr Przybylak - Pisz po pijaku, przeglądaj na trzeźwo

Najbardziej podobało mi się zakończenie prezentacji Pawła Lipińskiego - po prostu mistrzowski filmik :) Dzięki temu że miałem okazję posłuchać Sławka Sobótki w Toruniu zdecydowałem się posłuchać o bezpieczeństwie aplikacji webowych - było warto - jak zawsze na takich prezentacjach dochodzi do mnie jak słabo zabezpieczam to co piszę :( - czas wziąć się w garść.

Udało mi się znaleźć zdjęcia z konferencji - całkiem pokaźna ilość :) - dostępne tu.

Nawet udało się znaleźć zdjęcie gdzie nas złapano w kadr.

dsc_2240

PS. Paweł umieścił filmik ze swoją piosenką.

GWT speed up

GWT, Java Komentarze (1) »

Ostatnimi czasy dość często muszę kompilować projekt który piszę w GWT - sprawa jest dość uciążliwa bo zajmuje około 6 min, a zdarza mi się robić to kilka a nawet kilkanaście razy dziennie.
Jako że na ogół w trakcie pisania testuje siebie ficzery lub ich kawałki pod jedną przeglądarką (FF) nie potrzebuje ani obsługi wielu języków ani wielu przeglądarek.
Dodatkowo aplikacja może chodzić nieco wolniej niż na produkcji. Godzę się na te kompromisy by zyskać sporo na czasie kompilacji. Jak wiemy każda przerwa wytrąca z rytmu pracy jeśli jest za długa (u mnie już minuta wystarcza :) ). Poniżej kilka sposobów aby nie tracić niepotrzebnie focus’u podczas kompilacji.

Przyspieszanie kompilacji GWT:

  • komentujemy wszystkie języki - czas spadł do 2min 30sec
    
    
  • ustawiamy tylko jedna przeglądarkę (u mnie Firefox)- czas spadł do 40sec
    
    
  • pomijamy optymalizację GWT - czas spadł do 23sec
    
    
    

Całkiem spory zysk: dla przypomnienia startowaliśmy z około 6 minut a skończyliśmy na 23 sekundach - mnie to zadowala :)
A wy jakie macie sposoby by przyspieszyć kompilację ?

Sławomir Sobótka w Toruniu

Dobre praktyki, Eclipse, Google, Info, Java, Konferencje, Wtyczki do eclipse Komentarze (1) »

TGD.NET

Nawet nie wyobrażacie sobie mojego zdziwienia gdy rano zaraz po przebudzeniu sprawdziłem maile na telefonie a tam informacja z Toruńskiej Grupy Developerów .NET , że Sławek Sobótka wystąpi w Toruniu.

Fajnie rozkręca się TGD .Net, niedawno byłem na organizowanej przez nich konferencji, teraz zaprosili Sławka - gratuluje.

Szkoda, że w Toruniu żaden JUG nie działa.

Wykłady:

  • Domain Driven Design - Wszystko ma swoje miejsce i wszystko jest na miejscu

“Czy zastanawialiście się co jest przyczyną rozkładu średnich i dużych systemów? Czy jest on nieunikniony i jest jedynie kwestią czasu? A może jednak istnieje jakiś sposób na utrzymanie entropii w ryzach? Podczas prezentacji zobaczymy w jaki sposób Domain Driven Design pomaga w okiełznaniu chaosu. W prezentacji znajdą się główne techniki modelowania takie jak Ubiquitous Language, Bounded Context, Strategic Design. Zostaną przedstawione również podstawowe techniki implementacji DDD: przykłady Building Blocks, Command-query Responsibility Segregation, system zdarzeń, przypadki racjonalnego wykorzystania zarówno ORM jak i czystego i SQL.

  • Command-query Responsibility Segregation - ewolucja architektury warstwowej w stronę modularyzacji i skalowania

Z biegiem kariery, tworząc kolejny system lub aplikację, stajemy przed problemami innej klasy. Inna klasa problemu to inne wymagania odnośnie technologii, metodyki i architektury. Popularne architektury warstwowe mogą być nieodpowiednie do pewnych klas problemów - mogą np. narzucać nieracjonalne wykorzystanie ORM lub promować naiwne modelowanie domeny biznesowej. Podczas prezentacji przedstawię nowe ujęcie warstw - architekturę Command-query Responsibility Segregation, która wspiera aplikacje średniej i dużej skali. Architektura CqRS promuje zdobycze nowoczesnej inżynierii oprogramowania takie jak: Domain Driven Design i noSQL, otwiera system na skalowanie oraz w naturalny sposób rozwiązuje typowe problemy z mapowaniem relacyjno-obiektowym. Główne składowe nowej architektury to: dwa stosy warstw, rozwarstwienie logiki, komunikacja zdarzeniowa oraz opcjonalnie event sourcing (składowanie danych w modelu behawioralnym - w przeciwieństwie do klasycznego modelu strukturalnego)

Miejsce: Wydział Matematyki i Informatyki (ul. Chopina)

Data: 13.05.2011

Godzina: 17.00 - 20.00

Rejestracja: WSS , CodeGuru

Do zobaczenia w piątek 13.  ;-)

SCJP/OCPJP 6 - zdane :)

Java Komentarze (17) »

Oracle Java SE 6 Certified Programmer
Udało się. Wczoraj w godzinach porannych zdałem egzamin na SCJP 6 / OCPJP 6

Uzyskałem 83% - z czego jestem raczej bardzo zadowolony (jadąc byłem pewny, że będzie ciężko)

Egzamin zdawałem w Bydgoszczy (csinf.pl) - Centrum małe ciche - w sali byłem sam :) Miła Pani która to wszystko obsługiwała - byłem skazany na sukces :)

Voucher na SCJP kupiłem bodajże w marcu 2010 - Oracle przysłało mi go jakoś w połowie kwietnia z expire date:  1. Maja

Oczywiście całkiem o nim zapomniałem i jakieś 3 tygodnie temu zdałem sobie sprawę że trzeba wziąć się do roboty - przeczytałem kolejny raz książkę Mariusza Lipińskiego przygotowującą do SCJP - przeczytałem kilka razy 2 minutes drills z ksiązki Sierra i Bates “SCJP Sun Certified Programmer for Java 6 Study Guide (Exam 310-065)” - całej nie miałbym szans dokładnie przeczytać  bo ma +- 900stron no i jest po angielsku a wtedy jeszcze wolniej mi idzie:]

Dodatkowo ściągnąłem sobie Examlab dla SCJP 6 i robiłem sobie testy (żadnego nie zdałem ;] ) - są one co prawda dla starszej wersji SCJP gdzie były 72 pytania ale zmiany są nie znaczne. Jako, że nie zdałem nic z mocków przed prawdziwym egzaminem nie dziwi, że jechałem z przekonaniem, że marne mam szanse :) Ale egzamin okazał się znacznie łatwiejszy niż mocki (to może być moja subiektywna ocena). W zasadzie nie był aż tak podchwytliwy jak one. Albo po prostu lepiej mi podrasowały pytania. Nie ważne - ważne że do przodu :)

Co do samego egzaminu SCJP - jest w sieci wiele opinii że nic on nie daje, że nauka do niego to kwestia nauki wyszukiwania czy nawiasy są po domykane itp. Ja osobiście ucząc się na ten egzamin zdałem sobie sprawę jak słabo znam Jave - z wielu udogodnień nie korzystałem bo ich nie znałem. Teraz już je znam i nie zawaham się ich użyć :) Oczywiście cała zabawa w kompilator raczej nie jest zbyt przydatna - od tego mamy nasze wypchane ficzerami IDE :)

No to by było tyle - w ciągu 8 tygodni ma dojść do mnie paczka z certyfikatem.

java4people

Java, Konferencje Komentarze (2) »

I kolejny wpis na blogu z relacją z konferencji - jakoś ostatnio dużo tych moich konferencyjnych podróży :)

Tym razem zawiało mnie aż do Szczecina - ze względu na raczej słabe połączenie kolejowe między Toruniem a Szczecinem zdecydowałem, że trzeba będzie jechać autem. Zgadałem chłopaków i w piątek ruszyliśmy na Szczecin. Droga w sumie mnie pozytywnie zaskoczyła - naprawdę powoli zaczyna być odczuwalne, że da się w Polsce całkiem wygodnie podróżować samochodem. Gdyby cała droga była jak jej ostatnie 100Km to myślę, że bez zbytniego naginania ograniczeń dałoby się śmignąć w 3h tę trasę (+- 320Km) :) Na miejscu wylądowaliśmy około 20.00 w piątek - po kilku godzinach za kierownicą pierwsze co zrobiłem po dojeździe to szybkie piwko ;) No potem się ogarnęliśmy trochę - rozpakowaliśmy i ruszyliśmy “na miasto” - no i cóż … szału nie robi … nawet ze znalezieniem miejsca na piwo był pewien problem mimo, że mieliśmy kilku lokalnych przewodników. Ostatecznie obskoczyliśmy kilka pubów i jakoś przed 3.00 wylądowaliśmy z powrotem w mieszkaniu.  W zasadzie dłuuuugo odchorowywałem w sobotę te pub’y :(

W sobotę około 9.15 podjechała taksówka - kierowca po drodze trochę nam poprawił nasze skacowane humory :) Rejestracja przebiegła sprawnie - można było wybrać rozmiar koszulki o czym nie wszyscy organizatorzy niestety myślą :) :) Ogólna organizacja była OK. W zasadzie wszytko co powinno być dookoła konferencji było - była kawka, herbatka, ciasteczka i obiad. Chłopaki z szczecińskiego JUGa stanęli na wysokości zadania i warto było śmigać pół Polski, żeby uczestniczyć w tej konferencji. Co do braków to nie podobały mi się sale - siedzenia powinny być po skosie wtedy Ci z przodu nie zasłaniają ekranu tym z tylu.

OK ale przejdźmy do prezentacji. Moja ścieżka:

Nawiasem mówiąc - Clojure Daniel Janus - widać było że Daniel wie o czym mówi i że przygotował się do prezentacji - niestety dało się odczuć tremę. Na pewno jego prezentacja pokazała mi jak czytać Clojure, który wcześniej wydawał mi się ooostro zakręcony. No ale jakoś nie przekonało mnie to do głębszego zainteresowania się tym tematem. Zauważyłem natomiast wysoką ekspresyjność języka - kilka linijek potrafi znaczyć tyle co kilkadziesiąt w javie … ale to cecha nie tylko clojure.

Scala Przemek Pokrywka - Przemek jak dla mnie okazał się gwiazdą tej konferencji - super się go słuchało :) Doskonale przygotowany. No może maleńkim minusikiem był brak slajdów - ale nie o fajerwerki przecież chodzi. Ale to raczej celowe - pozwoliło na dopisywanie nowego kodu :) Ogólnie muszę przyznać, że zostałem przekonany do Scali - zapowiada się super. Czułem jednak pewien niedosyt - publiczność zadawała tyle pytań, że zdecydowanie zaburzało to flow prezentacji.

Lift web framework Łukasz Kuczera - Jako że skala mnie zainteresowała to zostałem na kolejnej prezentacji jej poświęconej. Ogólnie w jej czasie najbardziej doskwierał mi ból głowy będący efektem dnia poprzedniego. W zasadzie dowiedziałem się wszystkiego co potrzeba o lifcie - motywacje, główne zalety itp. Ale jakoś tego nie czuje - być może zbyt wiele mi umknęło przez kaca ;/ Z całą pewnością prezentacja bardzo dobrze przygotowana i poprowadzona.

Python i Java VM Sebastian Pietrowski - Liczyłem, że dowiem się z tej prezentacji jak użyć pythona w aplikacji, która jest w javie - niestety nie dowiedziałem się tego. Było natomiast jak użyć javy pisząc w pythonie ale mnie to nie interesuje - w zasadzie nie pamiętam jakie zalety ma Jython …  Na pewno cześć o Django była ciekawsza - tu już było widać konkretne zalety.

V jak Vaadin inne podejście do GWT Bartek Kuczyński - Byłem bardzo ciekaw prezentacji Koziołka - regularnie czytuje bloga m.in wpisy o Vaadinie. Ogólnie wypadła całkiem nieźle - ja dowiedziałem się sporo mimo znajomości GWT i jakiejś tam styczności z Vaadin’em (maleńki uczelniany projekt na szybko). Trochę małą widownie zgromadziła ta prezentacja - ale jak dla mnie to plus - można było spokojnie wysłuchać co bartek miał do powiedzenia.

Na koniec było podsumowanie konferencji - losowanie nagród (oczywiście nic nie wygrałem :P ), mapka z rozmieszczeniem uczestników - czuje się odpowiedzialny za to, że Toruńska kropka była całkiem spora :)

Najprawdopodobniej zobaczymy się na java4people za rok :)

4developers 2011

Java, Konferencje Komentarze (0) »

Kilka słów na temat konferencji 4developers która miała miejsce w poniedziałek w Warszawie i w której miałem przyjemność uczestniczyć.

Do samej Warszawy przyjechaliśmy dzień wcześniej - zwiedziliśmy Muzeum Powstania Warszawskiego i kilka pub’ów, co dawało się odczuć jeszcze przed wykładami :).

Może na początek wypiszę wykłady w których uczestniczyłem:

  • Gamification driven project management - Monika Konieczny

  • Ciemna strona zarządzania projektami - Mateusz Gurgul

  • Badanie wydajności aplikacji JEE - Daniel Witkowski

  • Jak rozwiązać nierozwiązalne problemy w projektach - Martin Kokott

  • Nowe, bardziej racjonalne podejście do warstw - Sławomir Sobótka

  • Kanban – Lekka Alternatywa - Paweł Brodziński

  • Uwolnij swoją domenę! - Greg Young

Na początek super wykład z technik miekkich poprowadzony przez Monikę Konieczny. W zasadzie lepszego wykładu na początek dnia sobie nie wyobrażam - po pierwsze lekki - po drugie prowadzony z takim entuzjazmem że szybko zapomniałem o wypitych dzień wcześniej piwkach :) Monika opowiadała o tym jak zmotywować zespół stosując różnego rodzaju gry, w których mamy okazję rywalizować z innymi członkami zespołu lub też całym zespołem “walczymy” o jakiś cel.

Kolejna prezentacja w wykonaniu Mateusza Gurgul’a prowadzona była zdecydowanie inaczej - brakowało mi w niej tej dynamiki z prezentacji Moniki. Wydaje mi się, że Mateusz zrobił błędne założenie o tym że jego słuchaczami będą głównie programiści. Niestety na sali (ścieżka Zarządzanie projektami IT) byli głównie PM’owie którzy już przez to wszystko przechodzili. Mateusz opowiedział o problemach jakim musi sprostać PM. Dla mnie oczywiście spora część z tego co opowiadał była wartościowa jako że nie jestem PMem póki co :) jednak reszta sali była wyraźnie rozczarowana. Co mi się nie podobało to postawa pewnego uczestnika, który według mnie nieco za ostro to wyraził.

Kolejna była bardzo krótka prezentacja Daniela Witkowskiego o badaniu wydajności aplikacji jav0wych na której pokazał przykładowy problem i narzędzie które pozwala go wykryć. W zasadzie prezentacja była tak krótka że nie zdążyła się dobrze zacząć a już hostessy prosiły by kończyć. W tym miejscu wspomnę o jedynej wadzie konferencji 4developers jaką zaobserwowałem - zdecydowanie za mało czasu na prezentacje dali. Akurat prezentacja Daniela była wyjątkiem bo przeprowadzana była w czasie paneli dyskusyjnych i trwała raptem 25minut ale inne prezentację też mogłyby być dłuższe niż te 45m - 50h - czułem na ogół lekki niedosyt że już koniec, i prelegenci też czułem, że jeszcze by mieli dużo do powiedzenia.

Kolejny wykład poprowadził Marcin Kokott z firmy Tieto. Opowiadał o tym co robi na codzień - czyli wyszukiwaniu powodów niskiej efektywności zespołów. Prezentacja bardzo mi się podobała - Marcin mówił gdzie bywały problemy - czasem komunikacja - czasem szef nie wiedział co tak naprawdę robi jego zespół.

A potem był obiad :)  i deserek :)

Potem genialna moim zdaniem prezentacja Sławka Sobótki (… w sumie wszystkie prezentacje na których byłem i które odkopałem w necie w jego wykonaniu mi się podobały :) ) o nowym, bardziej racjonalnym podejściu do warstw. Sławek umieścił przed konferencją slajdy na swoim blogu - spoko pomysł można było z grubsza zobaczyć o czym będzie mówił. Ta prezentacja dała mi do myślenia :) - przetrawię sobie to na spokojnie jeszcze i być może wrzucę jakiś osoby wpis z tymi przemyśleniami.

Potem udałem się na prezentacje Pawła Brodzińskiego o Konbanie - przekonał mnie do tablicy z karteczkami obrazującymi progress zadań. Nawet po przyjeździe wprowadziłem mechanizm symulujący działanie takiej tablicy u nas w zespole.

Jako ostatnią prezentacje wybrałem wykład Grega Young’a - wykład poruszał temat skalowalności przy użyciu DDD.

Ogólnie cała konferencja bardzo mi się podobała.  Organizatorzy zadbali o to byśmy się nie nudzili w czasie przerw oferując np konkurs Scrabble. Catering też niczego sobie - kawy, ciastek itp nigdy nie brakowało :D Jedyny minus to wspomniany wcześniej krótki czas prezentacji.

Ogólnie moje odczucia bardzo pozytywne - z pewnością pojawię się za rok :)

web.xml listener i cron4j

Java Komentarze (2) »

Zastanawiałem się dziś jak zrobić by w mojej webowej aplikacji jakiś kod wykonywał się po załadowaniu aplikacji (np scheduler który co określony czas coś tam robi)

Rozwiązanie okazało się bardzo proste:

w pliku web.xml definiujemy listener:

[xml]
<listener>
<listener-class>pl.kedziorski.xyz.Cron</listener-class>
</listener>
[/xml]

No i klasa w której sobie nasłuchujemy deploy’u alikacji:

[java]
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class Cron implements ServletContextListener {

public void contextInitialized(ServletContextEvent sce) {
//TODO startujemy
}

public void contextDestroyed(ServletContextEvent sce) {
//TODO kończymy
}
[/java]

Pewnie większość z was wiedziała jak to osiągnąć - ale może komuś się przyda ;-)

Swoją drogą jeśli chodzi o realizacje CRONa to znalazłem fajną biblioteczkę: cron4j
Nie za duża i w zasadzie dostarcza tego co potrzeba - Możemy definiować zadania w sposób podobny jak w linuxowym cron’ie.
Można też zmieniać “częstotliwość” dla już rozpoczętych zadań.

Zadanie które ma być wykonywane przez naszego CRONa dodajemy w ten sposób:
[java]
Scheduler s = new Scheduler();
s.schedule("* * * * *", new Runnable() {
public void run() {
//TODO Co minute
}});
s.start();
[/java]

Więcej info na stronie dokumentacji projektu.

Przygotowanie do certyfikacji SCJP 6 - M.Lipiński

Java, Książki Komentarze (0) »

OK. Właśnie skończyłem czytać książkę Mariusza Lipińskiego “Przygotowanie do certyfikacji SCJP 6″. Cóż mogę powiedzieć ? Książka objętościowo niewielka jednak w zasadzie nie ma strony która nie byłaby koncentratem wiedzy.  Autor zdecydował się pominąć całe te lanie wody, długie opisy itp występujące w innych książkach  i skupił się tylko na zagadnieniach niezbędnych do znania egzaminu SCJP 6. Książkę czyta się raczej ciężko ze względu właśnie na ten ogrom informacji zawartych na raptem 210 stronach. Ale to w dużej mierze zasługa samego SCJP, który jest egzaminem sprawdzającym znajomość różnych kruczków Javy i są to czasem zagadnienia ciężkie do zapamiętania - bo raczej niepraktyczne. Niemniej dowiedziałem się z tej książki kilku informacji które mogą się przydać również w prawdziwym życiu programisty - co tylko pokazuje, że jeszcze muszę się trochę pouczyć :) Książkę oceniłbym w mojej subiektywnej skali na 8 z 10 pkt.

Zanim podejdę do egzaminu planuję przeczytać ją raz jeszcze - w końcu to tylko 210 stron :) A na pewno podniesie to mój wynik.

GWT 2.1

GWT Komentarze (0) »

Dostępne jest juz finalne wydanie najnowszego GWT oznaczone numerkiem 2.1

Co nowego ?

- Cell Widgets - czyli kilka ciekawych widgetów których zawsze brakowało w GWT

- Wsparcie dla MVP

- Request Factory - to ma być alternatywa dla GWT-RPC - muszę się temu bliżej przyjrzeć

- integracja z SpringRoo

i kilka innych zmian :)

Silnik: Wordpress - Theme autorstwa N.Design Studio. Spolszczenie: Adam Klimowski.
RSS wpisów RSS komentarzy Zaloguj








2zł Nordic Gold