Od kilku dni dostępna jest nowa wersja Eclipse Galileo, powoli opadają emocje więc warto sprawdzić co zmieniło się w nowej wersji, a jest o czym pisać bo pomimo niewielkiego skoku na liczniku numeru wersji sam eclipse odmienił się znacznie. Choć na pierwszy rzut oka różnic nie zauważycie.

Eclipse Ganymede po prawej, po lewej nowa wersja Galileo
Jak widać zmian w oknie głównym nie ma żadnych, i słusznie jak dla mnie jest niemal idealne. Jednak mile zaskoczeni zostali użytkownicy MacOS (w tym ja) otóż nowy Eclipse wykorzystuje również Cocoa do wyświetlania okien, na pewno poprawi to warunki estetyczne aplikacji. Dodatkowo dzięki Customize Perspective mamy możliwość ustawić jakie ikony chcemy widzieć w toolbarze oraz jakie pozycje w menu mają być dostępne, dzięki temu dokładnie dostosujemy IDE do naszych możliwości. Continue reading ‘Eclipse Galileo nowości i różnice’
Dzisiejszego dnia udostępniony został Eclipse Galileo. W chwili obecnej jest to tzw. EarlyAccess więc dostęp ograniczony jest do pobrania przez sieć bittorrent (zarejestrowani użytkownicy mają dostęp do bezpośredniej metody pobierania).
Zapraszam do ściągania i opisywania zmian względem poprzedniej wersji Ganymede.
Jedną z bardziej denerwujacych rzeczy w pisaniu aplikacji Javovych (aplikacji webowych) jest ciągłe redeployowanie aplikacji celem sprawdzenia czy naniesione poprawki lub nowe funkcje działają poprawnie.
W językach skryptowych takich jak PHP, Ruby czy też świeży Grails dzieje się to w pełni automatycznie, zmienię część kodu, przechodzę do przeglądarki odświeżam i cieszę się, że działa (bądź nie). Continue reading ‘Wygodniejsze tworzenie aplikacji z JavaRebel’
Przed chwilą zdarzył mi się dziwny przypadek, wykorzystując zbudowany formularz dodawałem dane do bazy, jednak dane nie zawierały polskich znaków, zamiast nich były łagodnie mówiąc “krzaczki”, poprawiłem szybko krzaczki w bazie i zaczęły się poprawnie wyświetlać na stronie, problem więc nie był w samej bazie a w formularzu. Nastała chwila konsternacji gdyż sam spring został skonfigurowany pod utf-8 (ustawione kodowanie znaków) a dane przesyłane do bazy były w kodowaniu ANSI.
Po przeszukaniu internetu okazało się, że nie jestem sam, i aby wszystko zaczęło działać wystarczy ustawić filtr w pliku web.xml.
<filter>
</filter><filter -name>charsetFilter</filter>
<filter -class>org.springframework.web.filter.CharacterEncodingFi lter</filter>
<init -param>
<param -name>encoding</param>
<param -value>UTF-8</param>
</init>
<filter -mapping>
</filter><filter -name>charsetFilter</filter>
<url -pattern>/*</url>
I wszystko działa poprawnie.
Rozwiązanie znalezione na: http://forum.springsource.org
Jak ważne jest testowanie wie każdy programista, testy jednostkowe można pisać po stworzeniu aplikacji, lub co zalecane w trakcie jej tworzenia. Samo pisanie testów nie jest męczącym zajęciem o ile tworzymy niewielki projekt z odseparowanymi od siebie klasami. Problem zaczyna wzrastać do rangi misji niemożliwej gdy jedna klasa połączona jest z innymi klasami nie zawsze jawnie zadeklarowanymi jak to ma miejsce w aplikacjach opartych o Springframework.
W takim momencie z pomocą przychodzi nam adnotacja @ContextConfiguration zawarta w pakiecie org.springframework.test. Dzięki niej możemy bezpośrednio do naszej klasy testu jednostkowego podpiąć skonfigurowany wcześniej kontekst aplikacji zawierający zadeklarowany beany.
Continue reading ‘Springframework @ContextConfiguration – podpinamy kontekst do testów’
Tworzenie mojego projektu* rozpocząłem od zdefiniowania bazy danych, tabel w bazie oraz odpowiednich relacji między tabelami, na koniec dodałem sekwencje. Wszystko wygląda pięknie, i tak w teorii działa.
Jak każdy programista jestem leniwy, zamiast tworzyć mapowania w moim IDE o wiele lepiej wygenerować je wprost z bazy. W IntelliJ robi się łatwo o ile znajdziemy odpowiednią opcję o czym pisałem jakiś czas temu. Niestety szybko przekonałem się, że nie jest to idealne odwzorowanie moich tabel. Nie wiedzieć czemu IntelliJ zapomniał zaimportować sekwencje zadeklarowane w bazie, co skutkowało wystąpieniem szeregu błędów podczas prób zapisania danych w bazie, w szczególności wyróżnia się jeden:
org.springframework.web.util.NestedServletException: Request processing failed;
nested exception is org.springframework.orm.hibernate3.HibernateSystemException:
ids for this class must be manually assigned before calling save():
com.darekzon.coffeine.domain.Category;
nested exception is org.hibernate.id.IdentifierGenerationException:
ids for this class must be manually assigned before calling save():
com.darekzon.coffeine.domain.Category
Continue reading ‘@GeneratedValue oraz @SequenceGenerator – czyli sekwencje w hibernate’
Tworząc mój projekt stanąłem przed problemem którego nie potrafiłem rozwiązać, było to w miarę łatwe parsowanie przyjaznych linków celem wydobycia z nich parametrów. Spring 2.5.6 z którego korzystałem nie miał takiej możliwości (nie znalazłem rozwiązania), więc postanowiłem migrować projekt do najnowsze wersji tego frameworka a mianowicie do wersji 3.0.0 M3.
Z racji, że korzystam z mavena uznałem, że wystarczy zmienić wersje bibliotek w pliku POM.xml i wszystko ładnie będzie działać, niestety repozytoria które miałem skonfigurowane nie posiadały w swoich zasobach najnowszej wersji Spring-a.
Po szybkim przejrzeniu strony springframework.org szybko pobrałem konfigurację repozytorium Springa w którym przechowywane były najnowsze wersje bibliotek, niestety, po skonfigurowaniu tego repozytorium nie można było go zaktualizować (pobrać listy zawartości). Przeszukałem internet i nie znalazłem nic na ten temat, wpadłem natomiast na ciekawą aplikację jaką jest Nexus. Aplikacja pomaga nam utworzyć własne repozytorium, wymagając jedynie systemu operacyjnego z rodziny *Unix i maszyny wirtualnej javy, udostępniany jest też plik *.war, więc wszyscy użytkownicy, tomcata również znajdą coś dla siebie.
Tak więc utworzyłem na swoim serwerze vps repozytorium zawierające najnowszą wersję Springa, dodałem konfigurację do pliku POM.xml i wszystko działa, no prawie wszystko. Moje IDE nie widzi nowych wersji podczas wpisywania zależności, ale pobiera je poprawnie.
Dla wszystkich chętnych poniżej wstawiam konfigurację pliku POM.xml z moim repozytorium.
<repositories>
<repository>
<id>repo.a</id>
<url>http://mvn.darekzon.com/nexus/content/groups/public</url>
</repository>
</repositories>
Podczas pracy z Hibernatem oraz bazą PostgreSQL napotkałem się na dziwny błąd podczas wykonywania zapytania INSERT do bazy danych.
Gdy wysyłałem dane do bazy wyskakiwał poniższy błąd:
org.hibernate.exception.ConstraintViolationException:
Could not execute JDBC batch update
root cause
java.sql.BatchUpdateException:
Zadanie wsadowe 0 insert into public.user
(name, password, email, login, sureName, registerDate, payback, id) values ...
Rozwiązaniem/obejściem problemu jakie znalazłem jest wstawienie w pliku konfiguracyjnym hibernate-a (hibernate.cfg.xml) linijki:
<property name="hibernate.jdbc.batch_size">0</property>
Dzięki temu wszystko zaczęło ładnie działać, minusem jest zmniejszenie wydajności w obsłudze bazy danych, od teraz zapytania do bazy będą wysyłane pojedynczo a nie w grupie.
Jak ktoś zna lepsze rozwiązanie, z chęcią je poznam.
W poprzednim wpisie stworzyłem podstawowy projekt, nie posiada on żadnego kodu, bibliotek więc pora to nadrobić. Tym razem dodamy obsługę frameworków Spring oraz Hibernate a przy okazji zrzucimy schemat bazy danych do plików POJO (Plain Old Java Object – klasy czysto javove). Dzięki wsparciu dla wielu technologii IntelliJ Idea potrafi bardzo sprawnie podpowiadać składnię plików konfiguracyjnych, generować pliki, czy też ściągać odpowiednie biblioteki.
Żeby aplikację pisało się szybko i wygodnie warto dodać do projektu wsparcie dla frameworków. Aby to zrobić wystarczy wywołać okno “Framework Support” dostępne w menu projektu pod opcją “Add framework support“
Podczas zabaw z Grails spotkałem się z pewnym problemem, na moim serwerze podczas próby uruchomienia prostej Grails-owej aplikacji wyskakuje błąd:
Error executing script RunApp: : Error starting Sun's native2ascii:
gant.TargetExecutionException: : Error starting Sun's native2ascii:
Problem sprawia funkcja native2ascii konwertująca pliki zapisane w natywnym kodowaniu do kodowania UTF, aby pozbyś cię tego błędu wystarczy edytować plik Config.groovy znajdujący się w folderze twoj-projekt/grails-app/config.
Odnajdujemy tam linie:
grails.enable.native2ascii = true
i zamieniamy ją na:
grails.enable.native2ascii = false
Problem rozwiązany.
Ostatnie komentarze