Podczas pisania testów integracyjnych dochodzimy w pewnym momencie do sytuacji gdy musimy zastanowić się w jaki sposób zasymulować działanie zewnętrznych systemów, tak aby nie odbiegały one znacząco od tych z którymi będziemy mieli do czynienia na środowisku produkcyjnym. Jednym z najczęstszych takich systemów zewnętrznych jest baza danych. Chcemy upewnić się, że nasza aplikacja poprawnie się…
Autor: pater
Śledzenie komunikacji w systemach rozproszonych z wykorzystaniem Spring Cloud Sleuth & Zipkin
W przypadku gdy mamy jedną monolityczną aplikację śledzenie zdarzeń jest banalne. Najczęściej dorzucamy logger np. Slf4j i zapisujemy mniej lub bardziej krytyczne zdarzenia odbywające się w naszej aplikacji. Jeżeli coś zawiedzie to w logach wyszukamy coś co przypomina nam błąd i dzięki temu łatwo możemy przeanalizować co się stało. Stosunkowo łatwo w takich aplikacjach odnaleźć…
W jaki sposób CORS spowalnia naszą aplikację i jak możemy temu zaradzić?
CORS (Cross-Origin Resource Sharing) dosyć poważnie wpływa na wydajność naszej aplikacji. W momencie gdy po stronie klienckiej wykonujemy jedno z zapytań, które wymaga wykorzystania CORS jak na przykład: kontakt z API serwera przy użyciu XMLHttpRequest/Fetch API, import czcionek za pomocą @font-face nasza przeglądarka w tle wykonuje tak na prawdę dwa zapytania HTTP, a nie jedno…
Spring Cloud Contract – testy kontraktowe
Żałuję, że nie znałem tego wcześniej. Jeden projekt przy którym pracowałem aż prosił się o zapewnienie takiej stabilności komunikacji jaką dają testy kontraktowe. Po co nam testy kontraktowe? Mało jest systemów, które są w pełni autonomiczne. Bardzo często projekt przy którym pracujemy jest jakąś częścią całego procesu biznesowego. Wymusza to, abyśmy w jakiś sposób komunikowali…
Wersjonowanie REST API za pomocą Content-type
Nasze API to kontrakt, który zawieramy z naszymi klientami na zasadzie: „Tak będziemy od dzisiaj ze sobą rozmawiać”. Niestety w praktyce zazwyczaj przychodzi ten moment kiedy sposób naszej rozmowy musi się delikatnie (lub diametralnie) zmienić. Powody mogą być różne – uznaliśmy, że może warto w końcu pozbyć się XML’a na rzecz JSON’a, albo że jednak…
Pozbądź się ifów ze swojego kodu za pomocą polimorfizmu
Skoro pracujesz z językiem obiektowym to czemu nie piszesz obiektowo? Większość instrukcji warunkowych może zostać zastąpiona polimorfizmem. Jakie są zalety takiego rozwiązania oraz jak przeprowadzić refactoring brzydkiej metody pełnej różnych warunków?
Co tak na prawdę robi @Transactional?
Spróbujmy zapanować nad tym co się dzieje podczas używania różnych adnotacji w Springu. Jak to jest, że czasami @Transactional (i inne adnotacje) nie działają? Do czego przydaje się ThreadLocal? Jeżeli piszesz w Springu to uwierz mi – dotykasz tego każdego dnia. 🙂
Co się dzieje gdy używasz adnotacji @Inject/@Autowired?
Niektóre osoby mogą powiedzieć, że to wiedza niepotrzebna. Spotkałem kilku programistów, którzy mimo wieloletniego doświadczenia nie do końca wiedzieli jak to działa i jakoś z tym żyli. Ale co to za życie. 😛 Wydaje mi się, że znajomość tego jak tak na prawdę działa wstrzykiwanie zależności, chociażby w takim podstawowym stopniu, to wiedza obowiązkowa –…
Valhalla – własne typy prymitywne w Javie
W tym artykule chciałbym opisać jedną z ciekawszych zmian jakie nas czekają w nowej Javie, a dokładniej mowa o projekcie Valhalla prowadzonym przez OpenJDK. O samym projekcie w społeczności słyszy się już od jakiegoś czasu, bo od ok. 2014 roku. Coś tam o oszczędzaniu pamięci, coś o przyspieszeniu… Ale o co tak na prawdę chodzi?…
Czemu czasami porównanie obiektu typu Integer za pomocą „==” działa?
Dosyć popularny błąd nowicjuszy – porównywanie dwóch obiektów typu Integer za pomocą „==”. Ale okazuje się, że tak napisany kod czasami działa poprawnie.