Główna » Archiwum

Archiwum kategorii Java

Java, Polecane »

[26 Feb 2010 | Brak komentarzy | ]
Szybka konwersja obiektu na i z XML’a

Często pisząc krótkie “spike’i” (dla nie wtajemniczonych mianem spike określa się testowe/demonstracyjne aplikacje, lub ich zmodyfikowane fragmenty) potrzebujemy gdzieś zapisać lub przesłać obiekt Javy w formacie XML’a. Znajdziemy całą masę rozwiązań wspomagających to zadanie, jednak gdy zależy nam na czasie, niekiedy najprostsze rozwiązania są najlepsze.

Google App Engine, Java, Polecane »

[12 Jan 2010 | Brak komentarzy | ]
Zanim zdecydujesz się na Google App Engine

Zanim zdecydujesz się na Google App Engine warto wiedzieć o pewnych przypadłościach i zastosowanych rozwiązaniach.

[-] Zapytania do Datastore mogą zwrócić jedynie do 1000 rekordów, zespół GAE pracuje nad propozycją kursora, który będzie pozwalał na iteracje po większej ilości danych.
[--] Duże limitacje GQL – w sortowaniu oraz użyciu operatorów. Szczegóły można przeczytać tutaj.
[---] Znaczne zużycie API CPU dla zapisu i odczytu danych z Datastore, zwłaszcza gdy ich hierarchia jest dość głęboka (więcej na ten temat w moim poprzednim poście – i o rozwiązaniu używając pola Serializowalnego).
[-] Długi czas tworzenia indeksów – …

Google App Engine, Java, Polecane »

[3 Jan 2010 | Brak komentarzy | ]
Pole serializowalne w GAE datastore

W poprzednim poście napisałem o problemach z niebywale dużym zużyciem CPU podczas operacji zapisu do datastore Google App Engine. Od kilku dni zastanawiałem się, jak zaradzić temu problemowi – rozwiązanie znalazłem i zaimplementowałem dosłownie przed chwileczką.
Struktura rekordu z danymi zapisywany podczas zapytania do API była dość rozgałęziona – coś w stylu drzewa o 3 poziomach na drugim poziomie około 3-4 rekordów – na kolnym po około 2-3 dla każdego elementu z poziomu wyżej. Co ważne, żaden z elementów poniżej głównego rekordu nie był używany w zapytaniach.

Google App Engine, Java, Polecane »

[1 Jan 2010 | Brak komentarzy | ]
Czy użycie CPU przez Datastore Cię zrujnuje?

Bawiąc się z małym projektem aplikacji dla Google App Engine doszedłem do różnych interesujących wniosków.
Jednym z ciekawszych jest użycie CPU – i bynajmniej nie CPU generowanego przez kod samej aplikacji – a CPU użyte przez datastore (jak wywnioskować można z panelu administracyjnego – około 90% użycia CPU jest generowane przez API Calls CPU).
Konsumowane jest ono w dość dużym tempie. Moja przykładowa aplikacja zapisuje pewne dane przy zapytaniu przesłanym do API. Zapytanie takie może zapisać/uaktualnić około (oszacowane manualnie na podstawie definicji modelu klas danych) 20 wierszy, musi załadować również dwa troszkę …

Google App Engine, Java, Polecane »

[28 Dec 2009 | Brak komentarzy | ]
Google App engine i DatastoreTimeoutException

Po kilku tygodniach zabawy z GAE zauważyć można masę problemów. Jedną z bardzo denerwujących przypadłości Clouda w wykonaniu Google jest problem z Datastore, do którego proste zapytanie przekracza dozwolony czas odpowiedzi.
Logi prostej aplikacji po pewnym czasie pełne są informacji o DatastoreTimeoutException.

Google App Engine, Java, Polecane »

[12 Oct 2009 | Brak komentarzy | ]
Google AppEngine – kolejne schody…

Ech. Nie jest łatwo zaprzyjaźnić się z GAE. Ciągle jakieś schody…
Przed momentem odkryłem problem z dostępem za pomocą refleksji do java.util.TimeZone, chcąc wyświetlić listę stref czasowych.
Wszystko zaczęło się niewinnie, od atrybutu modelu, zawierającego przefiltrowane listy:

GWT, Informacje, Java, Polecane, Spring Framework »

[4 Jul 2009 | Brak komentarzy | ]
Kod źródłowy aplikacji FinPlan.pl dostępny publicznie

Dzisiaj postanowiłem udostępnić kod źródłowy aplikacji FinPlan.pl publicznie. Do tego na zasadach licencji Apache 2.0.
Dość długo nosiłem się z takim zamiarem, dziś w końcu znalazłem czas by go urzeczywistnić.
Co to jest FinPlan.pl
Samą aplikację można zobaczyć pod adresem http://www.finplan.pl. Serwis pozwala na przeanalizowanie swojej obecnej sytuacji finansowej oraz zaplanowanie oszczędności, tak by ułatwić osiągnięcie przyszłych celów finansowych. Opcjonalna rejestracja w serwisie pozwoli te plany weryfikować i dostosowywać do bieżącej sytuacji – zarówno zawodowej jak i ekonomicznej. Na łamach serwisu mogą być udostępniane spersonalizowane …

Java, Polecane, Spring Framework »

[10 Jun 2009 | Brak komentarzy | ]
Springframework i Jackrabbit (JCR)

Z góry zaznaczam, że specjalnym sympatykiem JSR1 ani Jackrabbit’a nie jestem, i póki co dwa razy zastanowił się bym, czy użyć go w produkcyjnym systemie. Wydaje mi się, że nie jest to technologia wystarczająco dojrzała, w internecie można natrafić na informacje od wielu osób skarżących się na problemy przeróżnej natury, od integracji z innymi narzędziami poprzez skalowalność aż po niełatwy backup. Lecz czasem coś po prostu jest Ci “dane”, więc trzeba się z tym oswoić i starać się podejść do tego z najlepszej strony.
Pierwszym problemem, jaki musiałem rozwiązać, była integracja …

Java »

[28 May 2009 | Brak komentarzy | ]
InvalidQueryException: Parse error: data is not a RelationQueryNode

Ostatnio z potrzeb zawodowych zająłem się JCR – konkretnie Jackrabbitem. Próbując załadować obiekt z repozytorium otrzymywałem błąd: InvalidQueryException: Parse error: data is not a RelationQueryNode. Błąd spowodowany był tym, że nie kodowałem XPath’a którego używałem do załadowania obiektów.
Błąd był spowodowany niewłaściwym kodowaniem znaków, ID obiektu, który chciałem załadować składało się z liczb, przesłane bez zakodowania ISO-9075 powodowało błąd.
Wystarczyło dodać kodowanie za pomocą klasy org.apache.jackrabbit.util.ISO9075 (znajduje się ona w bibliotece jackrabbit-jcr-commons-1.5.5.jar).
Przykładowe rozwiązanie:
[java]return (Person) jcrMappingTemplate.getObject(“/person/” + ISO9075.encode(id));[/java]
by wszystko wróciło do normy.

Java, Polecane, Spring Framework »

[6 Apr 2009 | Brak komentarzy | ]
Spring i RESTTemplate

Jak donosi blog twórców Spring framework, a konkretnie Arjen Poustma, Spring 3.0 zostanie wzbogacony o nowy Template – a mianowicie RestTemplate, który ma być podobny do już istniejących szablonów, takich jak JdbcTemplate czy JmsTemplate, co oznacza między innymi synchronizację (thread-safe) czy rozszerzanie operacji przez tzw. operacje callback.
RestTemplate pozwalać będzie na automatyczne konwertowanie odpowiedzi na obiekt Java. Kilka standardowych konwerterów będzie wbudowanych (domyślam się, że JSON i XML), łatwo będzie również rozszerzyć je o własne implementacje.
RestTemplate oferować będzie wszystkie podstawowe metody REST (GET, POST, PUT, DELETE, HEAD oraz OPTIONS). …