coding

Szybkie tworzenie projektów Spring

Nagle wpadł Ci do głowy świetny pomysł na aplikację. Bierzesz kartkę i ołówek, projektujesz strukturę, zapisujesz co lepsze pomysły. Po jakimś czasie orientujesz się, że to będzie dosyć złożony projekt. Jesli napiszesz to w sposób klasyczny to wszystko będzie ze sobą bardzo ściśle związane, referencje utworzą Ci prawdziwą pajęczynę, konstruktory będą miały wiele parametrów, do tego zazwyczaj będzie trzeba używać setterów, żeby skonfigurować nowo powstały obiekt. Właśnie! Gdzie to wszystko skonfigurować i złożyć do kupy? Skąd brać referencje do potrzebnych serwisów i repozytoriów, kiedy tworzymy obiekt gdzieś w miejscu, które jest głęboko zakopane w stosie wywołań? Jak nad tym zapanować?

I nagle doznajesz olśnienia – No przecież!  Spring, wstrzykiwanie zależności, programowanie aspektowe. To wszystko załatwia Twoje problemy. No to zaczynasz. Na początek tworzysz projekt Maven i zaczynasz pisać POM. Googlujesz za potrzebnymi zależnościami, konfigurujesz projekt. Zakładam, że nie jesteś starym Mavenowym wyjadaczem, więc pewnie tracisz czas na doszukiwanie się drobnych błędów w konfiguracji. Następnie zaczynasz pisać plik konfiguracyjny Spring – applicationContext.xml. Ściągnąłeś pewnie jakiegoś tamplate’a, skonfigurowałeś jednego beana i chcesz sprawdzić czy aplikacja załaduje konfigurację i czy poprawnie ona zadziała. Pewnie znowu będziesz miał parę frustrujących błędów, a stack trace nie jest zbytnio czytelny, zwłaszcza dla osób początkujących. Po jakimś czasie się udało, to teraz jeszcze tylko skonfigurować MVC, autoryzację, napisać podstawowe strony JSP lub wystawić serwisy odpowiadające JSONem. Ile godzin na to poświęcisz? 5? 10? Jeśli dopiero się wdrażasz w Spring MVC i Spring Security to na pewno zajmie Ci to więcej czasu. Czy nie lepiej by było gdyby cały ten biolerplate code był dostępny od ręki i magicznie skonfigurowany stricte pod Twój projekt, tak żebyś musiał napisać tylko tę najprzyjemniejszą część?

Poznaj Spring Roo!

Spring Roo jest narzędziem RAD (Rapid Application Development) służącym do błyskawicznego tworzenia projektów w Springu. Najprostszym sposobem na rozpoczęcie pracy z Roo jest ściągnięcie Spring Tool Suite, czyli Eclipse’a specjalnie przygotowanego do pracy z frameworkiem Spring. Jednak jeśli chcesz możesz równie dobrze przystosować swojego Eclipse’a.

Teraz stworzymy projekt Spring Roo. Wybierz New -> Spring Roo Project, wypełnij dwa pierwsze pola i kliknij Next, Finish

Tworzenie nowego projektu Spring Roo

Tworzenie nowego projektu Spring Roo

 W oknie uruchomi się konsola Spring Roo i automatycznie stworzy podstawowy projekt. Następnie otworzy się zakładka z konsolą Roo. Niestety czasami konsola potrafi się nie załadować do końca, więc jeśli dłuższy czas widzisz tekst jak poniżej, zamknij konsolę i otwórz na nowo.

Restart zawieszonej konsoli

Restart zawieszonej konsoli

Jak już widzisz logo Roo w ASCII code to znaczy, że wszystko się poprawnie załadowało i można rozpocząć pracę.

Na pierwszy ogień idzie konfiguracja połączenia z bazą danych. Mamy na komputerze zainstalowany serwer bazy MySQL. Chcemy aby nasza aplikacja łączyła się z bazą o nazwie grizz za pomocą użytkownika grizz. Do połączenia chcemy wykorzystywać popularne narzędzie ORM – Hibernate. Co robimy? W konsoli Roo wklep takie zaklęcie:

jpa setup –database MYSQL –provider HIBERNATE –databaseName grizz –userName grizz –password tajnehaslo

A żeby było jeszcze łatwiej to mogłeś wpisać w konsoli hint i przeczytać podpowiedź. Co więcej – wpisując samo jp i wciskając Ctrl+Space konsola Roo automatycznie uzupełni nam komendę, dodatkowo po wpisaniu podstawowej komendy Ctrl+Space podpowie nam jakie parametry są obligatoryjne, a po dopisaniu dwóch minusów (–) i wciśnięciu tego skrótu Roo podpowie jakie są dostępne parametry dodatkowe. Dlatego też nie musisz pamiętać tych wszystkich zaklęć.

Roo pozwala w taki sposób na skonfigurowanie połączenia z 15 różnymi bazami danych za pomocą 4 różnych systemów ORM.

Kolejną rzeczą jest stworzenie klas modelowych (encji). Wpisz ent, wciśnij 3 razy Ctrl+Space, dopisz .model.Person, Enter. Właśnie wpisałeś komende na stworzenie nowej klasy modelowej, która nazywa się Person, znajduje się w pakiecie pl.grizwold.model i pozwala nam na dostęp do danych w bazie w tabel Person. Cała komenda wygląda tak

entity jpa –class pl.grizwold.model.Person

Przydałoby się, żeby nasza osoba miała imię, nazwisko i przyjaciół. Wpisujemy kolejno

field string –fieldName name –notNull true –sizeMin 3 –sizeMax 24

field string –fieldName surname –notNull true –sizeMin 3 –sizeMax 45

field set –fieldName friends –type ~.model.Person –fetch LAZY

W klasie Person teraz możemy przechowywać imię o długości od 3 do 24 znaków i nazwisko o długości od 3 do 45 znaków. Oba pola są polami obowiązkowymi (notNull). Dodatkowo każda osoba może mieć przypisanych przyjaciół. Parametr –fetch LAZY oznacza, że po załadowaniu pojedynczej osoby z bazy nie są od razu ładowani wszyscy jej przyjaciele. Dopiero, gdy zostanie wykonana jakaś operacja na zbiorze przyjaciół to zostanie wysłane zapytanie do bazy i wtedy dopiero zostaną oni załadowani. Gdybym w parametrze zamiast LAZY podał EAGER to mogłoby się zdarzyć, że przy załadowaniu pojedynczej osoby ładowałbym całą bazę osób.

Ok, powiedzmy, że jedna encja nam wystarczy. Teraz stwórzmy wszystkie potrzebne kontrolery i strony JSP, żeby móc zarządzać naszą encją. Wpisz w konsoli

web mvc setup

web mvc all –package pl.grizwold.web

Właśnie stworzyłeś podstawową stronę wraz ze wszystkimi potrzebnymi kontrolerami i widokami.

Teraz czas włączyć aplikację. Prawoklik na projekcie w Package Explorer, wybierz Run As -> Run on server. Zaznacz Manually define a nwe server, wybierz na przykład Apache Tomcat w wersji 7.0. Zakładam, że masz już gdzieś zainstalowany serwer Tomcat i poradzisz sobie z dołączeniem ścieżki instalacji. Na koniec kliknij Finish. Serwer powinien automatycznie wystartować. Wejdź teraz w przeglądarce pod ten adres

http://localhost:8099/GrizwoldsTrainingApp/

Powinieneś zobaczyć taką stronę

Działająca aplikacja stworzona przez Spring Roo

Działająca aplikacja stworzona przez Spring Roo

Oczywiście to nie wszystko co potrafi Spring Roo. Jednak zanim zaczniesz się zagłębiać w możliwościach Roo zalecam Ci zapoznać się z projektem jaki wygenerowałeś w tej krótkiej lekcji. Zachęcam Cię do eksperymentowania, psucia, zmieniania i rozwijania tego co teraz masz. Jeśli nie używasz systemu kontroli wersji, to nie bój się, że coś zepsujesz . Przecież stworzenie tego co widzisz na screenie to ledwo kilka komend

jpa setup –database MYSQL –provider HIBERNATE –databaseName grizz –userName grizz –password tajnehaslo
entity jpa –class pl.grizwold.model.Person
field string –fieldName name –notNull true –sizeMin 3 –sizeMax 24
field string –fieldName surname –notNull true –sizeMin 3 –sizeMax 45
field set –fieldName friends –type ~.model.Person –fetch LAZY
web mvc setup
web mvc all –package pl.grizwold.web

Niedługo na blogu ukarzą się kolejne lekcje ze Spring Roo jak i samego Springa. Zaglądaj częściej ;)

Just another WordPress site