GWT oraz implementacje MVC

GWT, czyli Google Web Toolkit to nic innego jak zbiór komponentów, które można użyć podczas tworzenia aplikacji. GWT jest łatwe, kod tworzy się szybko i łatwo uruchamia chociażby z poziomu Mavena, jednakże największym problemem nie jest to jak stworzyć okienko, ale jak zorganizować projekt. W tym poście postaram się przedstawić kilka gotowych bibliotek, z którymi się zetknąłem podczas swych bojów z budowaniem sporej aplikacji. Ilość implementacji MVC dla GWT jest dosyć duża a temat był poruszany na zagranicznych blogach już nie jeden raz, wystarczy zajrzeć na poniższe strony: ...

November 5, 2009 · 3 min · splatch

Instalowanie oprogramowania Atlassian cz. 1

Kilka dni temu trafiłem na informacje o tym, że firma Atlassian uruchomiła “promocję” w której wyprzedaje licencje startowe na swoje produkty za 10$. Tym oto sposobem za równowartość dobrego obuwia (niecałe 175 zł) wszedłem w posiadanie sześciu licencji na Crowd, Jira, GreenHopper, Confluence, Fisheye i Bamboo. W poście tym krótki opis instalacji na Tomcat 6.x pierwszych czterech. Przygotowania Uprzedzam, że instrukcja jest pisana z pamięci więc mogą pojawić się jakieś braki. W przypadku gdy instrukcja nie zadziała proszę o komentarz, a postaram się pomóc i uzupełnić wpis tak by był kompletny. Aby ułatwić sobie życie i zaoszczędzić pamięć na serwerze wszystkie produkty będzie obsługiwała jedna instancja Tomcat i PostgreSQL. Niestety Fisheye i Bamboo są dostępne tylko w wersji standalone, stąd proces ich instalacji będzie nieco inny. Zanim ruszymy z całością pobieramy od producenta oprogramowanie. Przeskakujemy na zakładkę Linux i następnie klikamy w prawym górnym rogu i pobieramy wersję standalone. Wykonujemy polecenie [bash]tar -xvzf atlassian-crowd-2.0.2.tar.gz[/bash] ...

October 16, 2009 · 5 min · splatch

Typy generyczne od teraz są mniej anonimowe

Do tej pory tworząc kod z użyciem typów generycznych zawsze borykałem się z problemem - jak dobrać się do klasy na podstawie któregoś parametru. Rozwiązanie znalazłem przeglądając w internecie kod jakieś przykładowej aplikacji. Ot znowu kilka linii które uporządkują kod i zmniejszą ilość powtórzeń. :-) Dbanie o porządek w kodzie to obowiązek każdego programisty. Stąd podział aplikacji na warstwy, wyodrębnianie wspólnego kodu do typów abstrakcyjnych i tak dalej. Są jednak miejsca, których do tej pory nie potrafiłem uporządkować dobrze - były to wszelkiego rodzaju DAO, które zawsze wyglądały podobnie. Interfejs, klasa abstrakcyjna, pochodna wywołująca chroniony konstruktor. Wszystko po to by w klasie abstrakcyjnej móc zdefiniować metodę readById. Oto przykład takiego kodu: [java]// Ogólny interfejs dostępu do danych // T to typ encji, K to typ klucza w danej encji. public interface GenericDAO<T, K> { void save(T instance); void create(T newInstance); void update(T existingInstance); boolean delete(T instance); T readById(K id); List getAll(); } // Implementacja oparta o mechanizmy Springa public abstract class AbstractDAO<T extends BaseEntity, K> extends JpaDaoSupport implements GenericDAO<T, K> { private Class typeClass; protected AbstractDAO(Class typeClass) { this.typeClass = typeClass; } // pobranie obiektu na bazie id public T readById(K id) { return getJpaTemplate().find(typeClass, id); } } ...

October 2, 2009 · 3 min · splatch

XML i Adnotacje - kod ogólnego przeznaczenia i JPA

W poprzednim wpisie przedstawiłem sposób na redukcję kodu w encjach przy pomocy dziedziczenia i adnotacji @MappedSuperclass. Rozwiązanie to możemy również stosować aby tworzyć kod bardziej przenośny, który niewielkim kosztem można użyć w innych projektach. Większość aplikacji webowych stosuje autoryzację opartą o role (ang. Role Based Access Control), w takich wypadkach mamy zazwyczaj encję User oraz Role, pierwszą odpowiedzialną za przetrzymywanie informacji o użytkowniku a druga nazwy ról. O ile role są obszarem stałym - zawsze mają nazwę - o tyle użytkownicy często mają różne wariacje i relacje. Ot choćby powiązanie konta użytkownika z firmą. [sourcecode lang=“java”] // Copyright (C) 2009 Code-House // All rights reserved package org.code_house.security.domain; ...

October 1, 2009 · 2 min · splatch

Dwie klasy redukujące ilość kodu w encjach JPA

Z pewnością nie jest to odkrycie godne podziwu czy też coś, co może realizować z nowinkami JPA 2.0, nie mniej jest to kod bez którego żaden projekt obejść się nie może - mianowicie identyfikacja encji. Borykałem się z problemem dosyć pospolitym, mianowicie pozbyciem się z każdej encji kodu: [sourcecode lang=“java”]@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; [/sourcecode] Nic dziwnego, 40 encji to aż 120 powtórzonych, niepotrzebnie powielonych linii. Nie są obce mi wzorce dziedziczenia, które Martin Fowler opisywał w swojej książce, w tym przypadku chodzi o dziedziczenie mapowanych pól a nie fizyczne odwzorowanie tej hierarchii, czyli zagrywka czysto techniczna. ...

September 4, 2009 · 2 min · splatch